Read AGENTS.md first (it is the canonical agent guide) and OBEY its
HARD STOP git preflight — this very handoff exists because a month of
work was once built on a stale checkout and had to be hand-merged back.
master (pushed to origin) is the
reunified line: the 2.5D renderer / four-quest campaign / Chronicles
Houses-and-Scions line merged with the Crossroads world-web / wagons /
security line. Ore mining/smithing is deliberately removed (ARPG direction;
crafting arrives through the Houses meta systems — Vesselforge brand-searing
is live).
Verified green as of this handoff:
npm run lintclean;npm run test:unit696/696npm run playtest31/31 (real server, real protocol)npm run test:e2e— the browser-critical-loop Playwright gate (built client: login, Chronicles onboarding, WASD after UI focus, context menus, pointer equip/unequip, zone entry)
Deployment: one Node process serves the built client + WS on :6500;
pm2 start ecosystem.config.cjs; cloudflared quick tunnel for public play;
/?play = one-URL quick start (per-browser guest House); /stats = human
status page; /api/stats = JSON. HTML shell is no-cache, hashed assets
immutable.
The owner's verdict after playing on real devices: "looks and plays awful." All the plumbing above is necessary but not sufficient. The next agent's job is GAME FEEL and VISUAL QUALITY, played by hand in a real browser, not proven by harness. Concrete starting points observed:
- The 2.5D perspective view renders but reads muddy: heavy fog/blur over the
village, low contrast, washed-out tiles (see any
?playsession). - The inventory was reverted to 32px cells so the pane fits and drags work; the intended 54px "art fills the pane" scale needs the login-restyle pane layout ported (below) — right now items look tiny.
- Combat/feedback polish, HUD legibility, and first-minute impressions have had no human-driven iteration since the merge.
Iterate: play in the browser (npm run dev, or build + npm start), change,
play again. Use the owner's feedback loop; do not declare feel-work done from
green tests.
tests/pending-port/README.md lists them; each spec should return to
tests/unit/ or tests/e2e/ when its feature lands:
- Escape game menu (
src/components/ui/EscapeMenu.vueexists, unmounted). - Login-restyle pane layout + 54px inventory scale + HUD-orb pane host.
- Browser-local account sign-in screen ("Continue as browser guest").
- Client diagnostics API (
window.__verdigrisDiagnostics, ClientDiagnostics- ConnectionManager) — the reconnect e2e asserts on it.
- Narrow-viewport pane containment.
player:logindispatches TWO flows: payloads withguestId/quickGuest/resumeScionId→ chronicle-auth flow (SQLite houses/scions, wagon-pitch spawn, world web); plain payloads → direct admission (JSON guest saves,awaitChroniclesbrowser flow). The client socket wrapper decorates only interactive logins withawaitChronicles.- The town is the 2.5D Delaford Village carrying the four world-web road gates one tile beside its own portals (tin 37,94 / salt 64,114 / chalk 37,138 / copper 12,115) plus wagon pitches. The full Crossroads conversion (sanctuary truce, wagon/chart panes in the client shell) is planned follow-up; server systems + playtests for it are live.
- Two Chronicles persistence stacks coexist (JSON chronicles-store + SQLite chronicles-repository). Unification is open work.
inventory.addis synchronous, returns{ ok, added, remainder, ... }; currency is a slot-less carried balance; overflow defaults to'reject', reward paths pass{ overflow: 'drop' }.
- The playtest harness proves the PROTOCOL, not the DOM. The merge shipped
five client breaks invisible to 31/31 playtests (dead store action,
never-set socket-auth flag, missing Adventure menu, clipped inventory rows,
missing
?playhook). After ANY client change runnpm run test:e2eand actually look at the game. - Playtest scenarios are timing/order sensitive; fire-and-forget
dev:*commands can be dropped by the rate bucket — re-request insidewaitFor. - Windows console tools mangle regex escapes through heredocs; prefer direct file edits for regex-bearing code.