docs(plan): Slice 6b/6c vendor-completion contract — move-to-use, staging, selling, status-bar axiom
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
33b45ee581
commit
ab3146ba88
2 changed files with 938 additions and 0 deletions
|
|
@ -688,3 +688,48 @@ a quantity; Buy → coins drop by the displayed price, the stack lands in
|
|||
the pack, the shop refreshes; a single-item buy works; insufficient funds
|
||||
fails cleanly; the session still closes on walk-away/portal with the
|
||||
materialized items removed.
|
||||
|
||||
## Slice 6b/6c — vendor completion (contract authored 2026-08-08)
|
||||
|
||||
**Research:** `docs/research/2026-08-08-slice6b-vendor-completion-research.md`.
|
||||
Closes the user's seven-finding gate batch (dropdown polish landed at
|
||||
`33b45ee5`). Ordered chunks, one implementer:
|
||||
|
||||
1. **Move-to-use (Q2):** wire the existing client-predicted approach
|
||||
primitive (`PlayerInteractionMovementSink.BeginApproach`,
|
||||
`MovementType.MoveToObject` — today Pickup-only) onto `RequestUse`, so
|
||||
using a vendor (or anything) beyond range walks the player in first,
|
||||
retail's shape. No new movement machinery.
|
||||
2. **Buy staging (Q3):** `AddToBuyList` semantics per the research
|
||||
trace — Add stages the selection + slider quantity into the Buying
|
||||
tab's list (rendered count/price), Buy on that tab sends ONE batched
|
||||
0x005F with every staged entry, the two removal shapes + Clear, and
|
||||
retail's X-close confirm dialog when staging is non-empty (the current
|
||||
unconditional hide stays correct only for empty staging).
|
||||
3. **Selling (Q4):** the Selling tab's list is THE drop target — accept
|
||||
pack-item drops via the `ExternalContainerController` drag-handler
|
||||
pattern, filter through `InqAcceptability` (all four rejection reasons
|
||||
with retail's exact strings), staged sell list, batched 0x0060, and
|
||||
the existing reconciliation machinery.
|
||||
4. **Status bar (Q5) — user evidence is the axiom:** the code-reading
|
||||
says our chain already matches retail, but the user's live session
|
||||
says the stack count/value/split-bar presentation is absent for a
|
||||
vendor selection. Reproduce in a UI-level test FIRST (drive the real
|
||||
SelectedObjectController mount with a vendor selection); fix what the
|
||||
reproduction reveals; if it genuinely cannot reproduce, STOP and
|
||||
report with the test as evidence for a live-probe session.
|
||||
5. **Pack order (Q1):** code-verified correct (wire placement position →
|
||||
front insert). NO change; the gate re-checks it live and #352 gets
|
||||
filed only if it reproduces.
|
||||
|
||||
Register: same-commit rows for any deviation; AP-161 narrows again as
|
||||
staging/sell land (its remaining scope should shrink to nothing or to
|
||||
precisely what stays absent).
|
||||
|
||||
**Gate (user):** click a vendor from afar → walk-in + open; stage two
|
||||
different items with quantities → Buy All → one transaction, coins/items
|
||||
correct; drag a sellable item onto the Selling tab → stages → Sell →
|
||||
coins up, item gone; an InqAcceptability-rejected item shows retail's
|
||||
refusal; X with a staged list → confirm dialog; stacked selection shows
|
||||
count/value/split-bar in the toolbar; bought items land at the front of
|
||||
the pack.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue