The sell-junk diagnostic sat behind the gate that fails

He hit sell junk again and the log said nothing — not because the sweep had
nothing to report, but because the sweep never ran.

pfUI's Sell Grey Items button is `if GetNumJunkItems() <= 0 then return end`
and only then SellAllJunkItems (modules/autovendor.lua). That is the one path
he clicks, so a zero count ends the click there. Last session's instrument
lived inside SellAllJunkItems, downstream of the thing that was answering
zero, and it could not be reached.

Both now share one junk_survey of the carried bags, so the count and the
sweep can never disagree about what they are looking at, and each says its
half:

  GetNumJunkItems, when it answers zero while occupied slots have no resolved
  quality, says so and names them — a truthful zero stays silent;
  SellAllJunkItems says what it queued as well as what it could not judge;
  and ui_merchant's drain now warns, rather than debugs, when a queued slot
  resolves to no item guid. That was the last silent place the click could
  die, and debug does not reach his log.

So whichever of the three branches is at fault, his next click answers it.

Also checked and cleared on the way: the drain's slot.saturating_sub(1) is
right — the feed keys container slots 1-based.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
2026-10-29 09:36:04 -06:00
co-authored by Claude Opus 5
parent 7ebae975d9
commit fff48cd75c
2 changed files with 184 additions and 55 deletions
+9 -1
View File
@@ -686,7 +686,15 @@ fn drain_merchant(
count: 0,
});
}
None => debug!("ui_merchant: sell on an empty slot ({bag}, {slot}) — ignored"),
// Warned, not debugged: the two queues that reach here both name a slot the VM has
// just looked at and found occupied, so "no item guid there" is an anomaly, not
// housekeeping. It is also the last silent place a sell-junk click could die — the
// count and the sweep both say what they saw now (`C_MerchantFrame`'s `junk_survey`),
// and this is where that trail would otherwise end.
None => warn!(
"ui_merchant: sell on bag {bag} slot {slot} found no item guid — nothing sent. \
The slot read occupied when it was queued."
),
}
}
// A held vendor row dropped into a slot: `CMSG_BUY_ITEM_IN_SLOT` with count 1, the