Harden keyboard and camera routing, inventory and vendor interactions, chat/emotes, relog portal flow, and paperdoll rendering. Add retail research, connected gate coverage, and release-gate validation.
131 lines
7.3 KiB
Markdown
131 lines
7.3 KiB
Markdown
# Combined client parity owner gate
|
||
|
||
**Date prepared:** 2026-08-26
|
||
|
||
**Run:** OWNER-COMPLETE 2026-08-26 on one exact Release binary.
|
||
|
||
**Scope:** #443–#450 plus the complete inventory/vendor interaction audit.
|
||
|
||
**Outcome:** Sections A–C and E–F passed, including the mid-drag cursor-icon
|
||
re-test added during the round. Issues #444–#450 are owner-accepted. Section D
|
||
failed: the private paperdoll remained missing, so #443 stays open as the only
|
||
surviving defect. Tested executable SHA-256:
|
||
`173989F3C85C05C0746D628CDF9C6194F6A5E3EFD4597806BF83417483C37B42`.
|
||
|
||
Keep the client log for the whole run and take a screenshot for any visual or
|
||
text mismatch. For every refused item action, record the cursor color, exact
|
||
SpewBox line, and whether the item visibly moved before the refusal.
|
||
|
||
## A. Keyboard, camera, combat input, and relog — #446/#450
|
||
|
||
1. In Configure Keyboard, bind Move Forward to bare Shift while Toggle
|
||
Walk/Run already owns it. Verify the retail conflict dialog appears and the
|
||
chosen resolution is honored. Repeat with a known allowed shared chord.
|
||
2. Apply a changed binding, close/reopen Options, then restart the client.
|
||
Verify it survives. Test Revert, Defaults, Cancel, and Load/Save `.keymap`.
|
||
3. Press regular Enter: chat input must focus. Press keypad Enter outside chat:
|
||
it must perform only its configured camera action and must not focus chat.
|
||
4. Press bare Escape through the retail ladder: cancel target/focus/selection
|
||
first, then toggle Gameplay Options. It must never enter a developer orbit
|
||
or bird's-eye mode. Preserve the approved mouse-wheel zoom range.
|
||
5. Hold End, Page Down, or Delete in melee mode. The bar must charge while the
|
||
key is held and attack only on release, using the selected height.
|
||
6. Shift+Escape to character selection, immediately re-enter, and verify the
|
||
destination loads and exits portal space. Repeat twice in one process.
|
||
|
||
## B. Chat and combat text — #447/#448
|
||
|
||
1. Run `@acecommands`. Every non-empty server line must be visible; an
|
||
oversized response must retain the newest complete lines, not blank the
|
||
transcript.
|
||
2. Run `@acehelp acecommands` and send ordinary chat afterward. Verify normal
|
||
text, filtering, and scrolling remain intact.
|
||
3. Land ordinary and critical melee hits. Outgoing lines must match retail
|
||
wording and punctuation and contain no acdream-added percentage.
|
||
|
||
## C. Selection, use, containers, movement, and splitting — #445/#449
|
||
|
||
Use a normal item, unusable item, wearable, weapon, two mergeable stacks, a
|
||
Pyreal stack, one side pack, a full main pack, a full side pack, an open
|
||
external container, and a creature/player target.
|
||
|
||
1. Single-click and right-click inventory, side-pack, external-container, and
|
||
paperdoll items. Verify one global selection, stable highlight, status text,
|
||
and right-click examination.
|
||
2. Select an owned Pyreal stack. The toolbar must read
|
||
`<stack> <appropriate name> (of <total carried Pyreals>)`, with no comma
|
||
insertion added by acdream.
|
||
3. Single- and double-click a carried side pack. It must open on press, issue
|
||
no generic item-use request, and remain stably selected.
|
||
4. Double-click usable, unusable, wearable, and wieldable items. Verify one
|
||
action. Any local refusal must appear once in SpewBox, not in normal chat.
|
||
5. Move a full item between main pack and side pack. Before acknowledgement,
|
||
the source must remain canonical with retail's waiting/ghost presentation;
|
||
after success it appears only at the destination. Force one rejection and
|
||
verify no duplicate, disappearance, or speculative capacity change.
|
||
While holding the item under the cursor, move across the inventory and wait
|
||
through several ordinary object updates: the cursor icon must remain visible
|
||
until release. This re-gates the mid-drag procedural-refresh fix found during
|
||
the first 2026-08-26 owner pass.
|
||
6. Fill the main pack, observe a rejected move, drop one loose item, then move
|
||
an item from a side pack into the freed slot immediately. It must accept
|
||
without reopening the inventory window (#449).
|
||
7. From a stack of 10, select 2 and split into an empty main-pack slot, an open
|
||
side pack, and an external container. Each successful result must be 8+2.
|
||
8. Merge full and partial stacks. Verify selected quantity, target selection,
|
||
target-cap clamp, source remainder, and exact refusal text for a full target.
|
||
9. Drop full and partial stacks to the world, then pick them up. Verify pending
|
||
visuals, authoritative commit, failure cleanup, and no duplicate object.
|
||
10. Give a full and partial stack to a creature; drag onto another player and
|
||
verify secure-trade routing. Hover rejection must stay silent; release
|
||
rejection must print the exact ClientLocal reason.
|
||
11. Equip once by double-click and once by paperdoll drag. Test a clothing
|
||
conflict and weapon replacement. Canonical inventory/paperdoll ownership
|
||
must not change before the authoritative response.
|
||
|
||
## D. Private paperdoll viewport — #443
|
||
|
||
1. From a fresh process, open inventory and assess one monster and one player.
|
||
2. The animated doll must be present on first open, not appear only after a
|
||
delay. Close/reopen each view several times and change equipment once.
|
||
3. Record #443 independently if the viewport is late or missing even when the
|
||
underlying equip/inventory transaction is correct.
|
||
|
||
## E. Vendor parity and alternate currency — #444/#445
|
||
|
||
1. On the browse list, single-click selects, right-click examines, and
|
||
double-click buys exactly one/current-slider unit through the normal retail
|
||
purchase path.
|
||
2. Add a stack quantity greater than one to Buying. Double-click its staged
|
||
row: remove exactly one unit and print
|
||
`Removing <name> from shopping list` once in SpewBox.
|
||
3. Stage an owned item in Selling. Right-click examines it; double-click
|
||
removes the whole staged entry and prints the same removal form.
|
||
4. Drag a staged Selling row: it must unstage. Repeat after selecting only part
|
||
of its stack: SpewBox must print
|
||
`You cannot split items from this panel` and the slider must reset to max.
|
||
5. From an owned stack of 10, select 2 and drag into Selling. Verify the
|
||
temporary row resolves to the new authoritative stack of 2, Sell All sells
|
||
exactly 2, and 8 remain (#445).
|
||
6. At an alternate-currency vendor, note holdings in the Items cost sentence
|
||
and Buying/Selling purse lines. Buy once: every visible holding must decrease
|
||
immediately and remain correct after authoritative inventory refresh,
|
||
tab changes, and vendor reopen (#444).
|
||
7. Buy All once with enough currency and once without enough. The first uses
|
||
the refreshed balance; the second prints retail's insufficient-funds notice
|
||
and sends no purchase.
|
||
|
||
## F. Re-entrant and lifecycle stress
|
||
|
||
1. Change selection during a pending split, close an external container during
|
||
a pending move, and retry immediately after a refusal.
|
||
2. Attempt a second inventory operation while one request is pending. Verify a
|
||
clean retail refusal/no-op, never duplicated wire action or stuck busy state.
|
||
3. Log out or portal with a recently completed interaction, re-enter, and
|
||
verify pending projections and the request ledger converge to zero.
|
||
|
||
## Pass rule
|
||
|
||
The pass rule was satisfied for #444–#450 on the exact binary recorded above.
|
||
#443 remains open by itself because the transaction rows passed and the failure
|
||
was confined to private viewport residency.
|