# MapleWeb staged QA log

Last updated: 2026-08-21 (America/Los_Angeles)

This is the resumable browser-QA ledger. It records observed public behavior,
fixes, regressions, and the exact continuation point. A check is not complete
from packet fixtures or source inspection alone when browser evidence is
required.

## Active checkpoint

- Public origin: `https://necklace-really-cited-improved.trycloudflare.com/`
- Published checkpoint: `public-test-qa-stage-c4`
- Browser-tested client fix commits: `636020d`, `985e002`
- Published source commit: recorded by the release manifest and source offer;
  the only later change is this QA/blueprint checkpoint.
- Branch: `codex/mapleweb-port`
- Runtime content: 16 v83 NX packages plus isolated `LoginTheme.nx`
- Portal registration contract: username and password only. The public Cosmic
  configuration has account PIN disabled; PIC remains a distinct character
  security flow.

## Latest verification evidence

- Preferred release build: `scripts/build_wasm.ps1 -Jobs 4 -SkipBootstrap` —
  passed, warning-free, clean-source attestation accepted by the packager.
- Web suite: 56 tests passed, one environment-dependent skip.
- Native client-state/protocol suite: 21 tests passed.
- Public release shell, CSS, client JavaScript, WASM, manifest, registration,
  game bridge, and asset stream loaded from the same release.
- Current-release browser console after world-map asset streaming and chat:
  zero errors.
- `assets/` was not modified.

## Stage A — portal, deployment, and runtime baseline

Status: **passed for desktop public QA**.

- [x] Public services ready and release/config/manifest agree.
- [x] Portal visual order, registration dialog, diagnostics, launch, reload,
  audio, and fullscreen controls.
- [x] WebAssembly/WebGL2/WebSocket/IndexedDB/Web Crypto/secure-context checks.
- [x] Launch cannot race uninitialized runtime configuration.
- [x] Release-versioned CSS and JavaScript prevent stale shell/client pairing.
- [x] Fullscreen preserves the native 800×600 frame with 4:3 letterboxing.
- [ ] Narrow/mobile portal pass. The game remains desktop-primary.
- [ ] Replace the temporary Quick Tunnel with a durable trusted hostname.

## Stage B — registration and login lifecycle

Status: **passed for the exercised public paths**.

- [x] Simple username/password registration with no portal PIN/PIC fields.
- [x] Duplicate/validation/success states and password clearing.
- [x] Correct login and server-backed wrong-password notice.
- [x] Notice dismissal with Enter/Escape.
- [x] Fresh-account Terms → gender flow with account PIN disabled by Cosmic's
  supported `ENABLE_PIN: false` setting.
- [x] Physical digit, Backspace, Enter, and Escape input on PIN/PIC prompts.
- [x] Successful first-time account PIN registration performs Cosmic's required
  reconnect, returns to a fresh sign-in form, and does not surface a terminal
  client error.
- [x] Returning-account PIN authentication.
- [x] PIN-disabled returning-account login proceeds directly from credentials
  to Scania without displaying or auto-submitting a PIN.

## Stage C — world and character lifecycle

Status: **partially passed**.

- [x] v83 Scania world panel, three channels, load gauges, and Enter Channel.
- [x] Keyboard world/channel navigation and transition to roster.
- [x] Empty and populated roster rendering.
- [x] Character creation scene, name approval, appearance confirmation, and
  server-persisted roster update.
- [x] Roster focus restoration after creation.
- [x] Character PIC prompt, channel redirect, and initial field entry.
- [x] Character deletion with PIC after a fresh reconnect removes the explicitly
  selected second character and restores a valid one-character roster.
- [x] Exit-to-login/relog from world selection returns to a fresh sign-in form
  without a terminal disconnect.
- [x] Two-character creation plus left/right selection updates the highlighted
  character and information panel.
- [x] Empty-roster character information and selected-world panels fit inside
  800×600; the v83 fallback shows the server world name and channel.
- [x] Blocked-name OK shows a visible modal rejection above character creation,
  modal OK dismisses it, and creation Cancel returns to the roster.

## Stage D — playable field and UI order

Status: **partially passed**.

- [x] Mushroom Town initial field, player, NPC, tutorial prompts, map layers,
  minimap, welcome notice, and v83 bottom status/chat bar.
- [x] Left/right movement changes the authoritative player position.
- [x] Fullscreen keeps the complete HUD visible.
- [x] Inventory, equipment, skill, and stat windows render from v83 UI data.
- [x] World map streams and renders without transport failure.
- [x] Chat entry, field message, speech bubble, and continued client operation.
- [x] Current-release error log remains empty after the above interactions.
- [x] Captured an unambiguous airborne jump frame in Mushroom Town.
- [x] Double-clicked Heena, completed the Yes/Next dialogue path, and retained a
  healthy client through the transition to `In a Small Forest`.
- [x] v83 key-configuration window renders and toggles from the backslash key.
- [x] Party window renders and toggles from the configured P key.
- [ ] Quest log. Q is mapped to `KeyAction::QUESTLOG`, but `UIStateGame` has no
  quest-log case and the client has no quest-log UI type yet.
- [ ] Shop/storage, item use/equip, audio during a map change, reconnect, and
  two-client presence.

## Defect ledger

| ID | Defect and client-only root cause | Fix | Public result |
|---|---|---|---|
| QA-001 | Audio control ignored the custom Maple Web Audio facade. | `1d3b871` | Passed: `Audio ready`. |
| QA-002 | Login notices were mouse-only. | `1d3b871` | Passed with Enter/Escape. |
| QA-003 | PIN/PIC ignored physical keyboard input. | `1d3b871` | Passed on account and character prompts. |
| QA-004 | Launch could race runtime configuration. | `eb87b84` | Passed; launch remains disabled until validated config. |
| QA-005 | World selection requested post-v83 NX paths and rendered blank. | `08384ce` | Passed with v83 Scania/channel artwork. |
| QA-006 | World, roster, and character-creation keyboard focus was incomplete. | `fde0bc5`, `ac67e99`, `157803c`, `7c20210` | Passed through field entry. |
| QA-007 | Enter cleared an approved name before final creation. | `b3f2305` | Passed; character persisted and roster updated. |
| QA-008 | Roster focus was lost after character creation. | `93658e2` | Passed; Enter opens character PIC. |
| QA-009 | Post-v83 status-bar paths hid the HUD; widescreen fullscreen then cropped its fallback. | `888d6c4`, `3d4c89e` | Passed; complete v83 bar visible in 4:3 fullscreen. |
| QA-010 | Unversioned shell CSS/JS remained stale after release changes. | `939f1f8` | Passed; release query keys match config. |
| QA-011 | Gameplay windows requested absent `UIWindow2.img`/`UIWindow4.img`. | `7d9aa0b`, `0cd565c` | Passed for inventory, equipment, skills, stats, minimap, and world map. |
| QA-012 | Overlapping asset reads produced duplicate responses; LazyFS treated them as fatal and used browser-illegal close codes. | `7c5efa5` | Passed; world map and chat complete with zero current-release errors. |
| QA-013 | Cosmic intentionally ends the authenticated login session after first-time PIN registration, but the client mapped that expected reconnect state to a terminal disconnect. | `b3c7686` | Passed on a newly registered public account: Terms → gender → register PIN → fresh sign-in → submit saved PIN → Scania, with no `Client unavailable` overlay. |
| QA-014 | After reauthentication, the native client reached world/character selection while the surrounding portal remained stuck on `Sign in required`. | `ac79cc8` | Passed on the public release: the authenticated world-list request now restores `Client ready` and `Client launched`; roster entry and map play remain healthy. |
| QA-015 | A replacement Quick Tunnel was rejected because the three exact-origin bridge allowlists still named the expired hostname. | Deployment configuration | Passed: registration, game, and asset bridges accept only the replacement trusted origin and remain healthy. |
| QA-016 | `UILoginNotice` was painted before full-screen character/world scenes, hiding the blocked-name response and making OK appear inert. | `636020d` | Passed on C3/C4: rejection is visible, modal OK dismisses it, and creation Cancel returns to the roster. |
| QA-017 | Original-v83 `UI.nx` has the selected-world panel but not the later `CharSelect/selectedWorld` child sprites, leaving the panel blank. | `985e002` | Passed on C4: server-derived `Scania` and `CH. 1` labels render inside the native panel. |

## Open findings

- `QUESTLOG` is an intentional Stage 4/5 implementation gap, not a passed UI
  check. The binding exists, but no quest window is constructed.
- One early deletion rehearsal had ambiguous visual selection after several
  create/select/map/reload steps. Two controlled repeats passed, including a
  fresh-session proof that selected the second character by pointer, verified
  its name in the information panel, deleted it, and retained the first. Repeat
  this exact named-target proof if roster-selection code changes.

## Exact continuation point

Start on `public-test-qa-stage-c4` without rebuilding unless source changes.
Stage C's exercised two-character creation/navigation/deletion lifecycle is
closed. The first-time PIN reconnect, authenticated shell synchronization, and
world-selection relog regressions do not need repeating unless login/session
code changes. The deployed public server now has PIN disabled, so future public
login smoke tests should assert that no PIN prompt appears; keep the historical
PIN state-machine fixtures for configurations that enable it. Continue Stage D with the quest-log implementation gap first,
then shop/storage, item use/equip, audio across a map change, reconnect, and
two-client presence. Record screenshots and release-scoped browser errors for
each check. After any source change: commit, run the warning-free preferred
build, package from the clean attested commit, confirm the release-versioned
shell URLs, deploy, and rerun the affected public path. Do not mark Stages 4–9
or full-v83 support complete from this checkpoint.
