Skip to content

feat(rq-b9zi): the room's name greets the player over the picture, then settles in its corner - #1114

Open
rmstdope wants to merge 7 commits into
mainfrom
rq-b9zi-room-name-title
Open

rmstdope wants to merge 7 commits into
mainfrom
rq-b9zi-room-name-title

Conversation

@rmstdope

Copy link
Copy Markdown
Owner

Bead: rq-b9zi — The room's name greets the player over the picture, then settles in its corner. Mockup: docs/ui/rq-room-name-title.html.

Summary

The "You are in" card and its chips of who and what is here are gone; the picture marks them. Entering a room (or loading a game) tells the room's name over the middle of the picture, which then settles as the name alone in the top-left corner. A first visit's arrival carries the name as its heading instead.

 <LanternLayout>
   <main .lq-main .lq-titled?>
     <div .lq-stage>
       <ArrivalOnPicture>
+        head on a description part: "You are in" + room (ArrivalPart.room, lit by the read-along)
-      <RoomPlate> "You are in", name, chips (buttons), folded/compact rows
+      <RoomPlate :away :bare> name only, written on the picture; pointer-events none
     </div>
+    <RoomTitle> "You are in" + name + rule, above the words (z 3), aria-hidden
     <RoomPlate phone> name + "⟲ Story so far"
useRoomTitleStore (new, nothing saved)
  watch [game, load, roomName], scene idle with a picture up, no chapter page, staged
    key already greeted          -> nothing
    latest turn arrives on picture -> let pass (the arrival heads it)
    otherwise                     -> greet(name); settle after ROOM_TITLE_MS (3600)
  layout: any keydown/pointerdown (capture) settles it; the press still acts
  plate away while the title or an arrival is up; marks dim to 25 %

Removed: the phone plate's fold logic (plateFolded, MIN_SPEECH_ROOM) — with no chips the plate is always one row.

Evidence

  • Unit: RoomPlate.test.ts (name alone, no chips, away), useRoomTitleStore.test.ts (revisit greets, first visit lets pass, settles after its time / at once, once per room, load greets, waits for the scene and the chapter page, no title on the text page), LanternLayout.title.test.ts (title up, plate away, lq-titled, key and press settle, arrival keeps the plate away), ArrivalOnPicture.test.ts + stageArrival.test.ts (the heading).
  • E2E: new e2e/roomTitle.spec.ts (walk back into a room: title, then the corner; any key settles).
  • Updated specs: lantern.spec.ts (no "You are in" in the plate), phoneSideways.spec.ts (long name stays one row before the buttons, replaces the chips-share test), dreamEnding.spec.ts (the engine's "You are in …" line checked in the arrival's text, not its new heading), questNews.spec.ts (viewports 850×740 / 390×620 so the checklist still splits under the shorter plate — found by scanning heights; paging by Enter, since a click at the card's corner now reaches the picture's press areas), LanternLayout.scene.test.ts (a held-panel press no longer uses a plate chip).
  • Local, after rebase on main: eslint 0, prettier check clean, vue-tsc clean, vitest 6985 passed, Playwright 202 passed, build OK. Laptop and tall-screen screenshots checked against the mockup.

Validation (from the plan): all commands above pass; the human check (walk, load, watch title and corner on laptop and narrow window) is for verification.

Deviations from the plan: no lantern/roomTitle.ts (the rule lives in the store); the title is rendered beside the stage, not inside it (the stage isolates its layers, so the narrator's card covered it); the plate lets presses through; load is covered at store level, not e2e.

Formatting constraints verified.

Merge Danger

Door: two-way

Pure UI; nothing saved changes shape.

Blast Radius: stage-wide

Every room entry on the laptop, sideways-phone and tall-screen stages; the arrival card's page cut (its head now takes room on description parts); presses near the top-left corner now reach the picture. In Acts 2–4 (no placed areas yet) room things are reachable only by story names, the drawer and the actions sheet — agreed with the navigator.

🤖 Generated with Claude Code

rmstdope and others added 6 commits November 12, 2026 10:18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its title

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the room

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rmstdope

Copy link
Copy Markdown
Owner Author

Review (cold read, reviewed_head: 1b8296ca322ec6bfe6ea25fe5924f3493865ee56) — reviewed before merge under the producer's review practice, by an agent given the diff and the bead, and not the producer's reasoning.

  1. (blocks) Loading a game never shows the title: the store greets over the old picture and marks the key greeted, then the layout's stageKey watcher settles it; the key is used up, so the new picture gets no title (LanternLayout.vue stageKey watcher, useRoomTitleStore.ts).
  2. (blocks) LanternLayout.title.test.ts only calls greet() by hand; no layout test drives the store's watcher for a load or a move, which is why Implement golden path steps 1-10 for Act 2 with complete quest system, character interactions, and spell learning #1 passes.
  3. (should) The planned e2e "press a thing during the title opens the ring and settles it" was dropped without a note (e2e/roomTitle.spec.ts).
  4. (navigator) plateAway uses arrival.active, true for quest/spell news too, so the corner name fades on every quest or spell news in a room; the acceptance only asks for it away during the title and a first visit's arrival.
  5. (minor) Sideways phone: room() trims 2 px for any head, but only .lq-news-head gives the 2 px back; with the room heading a page can be cut 2 px too tall (ArrivalOnPicture.vue).
  6. (suggestion) The room heading shows on every page of the description; the plan said the first page; not in the deviation notes.
  7. (suggestion) questNews.spec.ts pages with waitForTimeout(300); wait on the page change instead.
  8. (low) A quick A → B → A walk whose change of scene is cut short can skip A's title: only the last greeted key is held.

…ves the corner name

Answers the review: the title store waits for any changed room (or a fresh
stage) until its picture is up, so a load and a quick walk back are greeted;
the corner name steps away only for an arrival that tells a room; the
sideways 2 px trim is the news head's alone; e2e presses the priest through
the title and pages quest news by waiting on the page change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rmstdope

Copy link
Copy Markdown
Owner Author

Answers to the review of 1b8296ca

  1. Fixed. The title store no longer remembers a greeted key: any change of game, load or room arms a greeting (pending), which is shown or let pass only once the stage is ready (no chapter page, scene idle, a picture up). The layout's stageKey watcher now calls roomTitle.reset() (settle and re-arm) instead of settle(), and scene.reset() makes the stage not ready until the new picture is up.
  2. Fixed. LanternLayout.title.test.ts gains "greets the room when a game is loaded in it, once its picture is up" through the real layout (turns stripped of narrate, loadNumber++); useRoomTitleStore.test.ts gains the reset case.
  3. Fixed. e2e/roomTitle.spec.ts places the priest on the chapel's picture (routed manifest), presses him while the title is up: his ring opens and the title settles. The press is a mouse click at his spot, since the picture drifts and the button is never "stable" for a locator click.
  4. Fixed as agreed (no navigator question needed: the acceptance keeps the corner name except during the title and a first visit's arrival). New useArrivalStore.tellsRoom (an arrival with a description part is up); plateAway uses it. Tests in useArrivalStore.test.ts and LanternLayout.title.test.ts (an events-only arrival leaves the corner name).
  5. Fixed. The sideways trim applies only when a news head is shown (piece).
  6. Kept on every page, deliberately: it matches the news head the card already carries on every page, and the agreed drawing shows the name heading the words. Recorded under the plan's Decided by me via this answer; the navigator can overrule.
  7. Fixed. Paging waits on the list's text changing (or the card going) with expect.poll, no fixed sleep.
  8. Fixed by the same change as 1: walking A -> B -> A before B's picture is up arms a greeting for A, shown when the scene is idle. Test: "greets a room walked back into before the change of scene to another was up".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant