Lane 11 PR 11: the sheet at the table — hit points, conditions, spells, rests, add from content (#737) #976

Merged
claude-bot merged 11 commits from build/lane11-11-hot-half into main 2026-09-30 19:45:30 +00:00
Collaborator

Part of #737 (lane 11, character sheets), PR 11 of the build contract (docs/design/lane11-build-contract.md). It builds on PR 10 (#975, merged).

What's new

  • The hot half, with no version made: a character's player and the GM change these straight from the sheet, on a phone too:
    • hit points with −5 / −1 / + and temporary points;
    • hero points;
    • dying and wounded as tracks to press;
    • conditions as chips with −/+, an "until" note, and Add a condition. Every figure a condition changes shows the penalty in its terms.
  • Spells: Cast spends the rank's slot, or a focus point for a focus spell, and marks a prepared spell expended. The expended mark takes it back. Refocus sits by the focus points.
  • Rest… (D209): the header lists the game's own rests and says what each gives back before it's taken.
    • PF2e: daily preparations and Refocus.
    • 5e: a short rest spends the Hit Point Dice the table rolled (the page rolls nothing), and a long rest gives everything back and removes one level of Exhaustion (SRD 5.2.1).
    • Hero points refill to 1 once per session, when a session starts being played.
    • Server route #14.
  • Add from the loaded content: search with Picker, the entry's card, then how many and where. Each row has its own quantity, where it is, invested/equipped, prepared, and Remove. A row whose pack has gone keeps its name and says where it came from.
  • Live: an open sheet picks up the other side's changes within a few seconds (polling).

Checks

  • Render-checked at 390×844 and 1440 in both themes. The fixes are in b6e865e6 and a15586c5: Tab stays in dialogs, locks drawn on load, dice count checked, 24 px targets, compact hit points, pips wrap as units.
  • After merging main (with PR 10): the full backend suite passes on PR 12's branch, which contains this one (6631 passed). Ruff 0.4.4 check and format are clean.
  • Changelog: changelog.d/737-lane11-hot-half.added.md.

PR 12 (block, reveal, table) is stacked on this.

🤖 Generated with Claude Code

Part of #737 (lane 11, character sheets), PR 11 of the build contract (`docs/design/lane11-build-contract.md`). It builds on PR 10 (#975, merged). **What's new** - **The hot half, with no version made:** a character's player and the GM change these straight from the sheet, on a phone too: - hit points with −5 / −1 / + and temporary points; - hero points; - dying and wounded as tracks to press; - conditions as chips with −/+, an "until" note, and Add a condition. Every figure a condition changes shows the penalty in its terms. - **Spells:** Cast spends the rank's slot, or a focus point for a focus spell, and marks a prepared spell expended. The expended mark takes it back. Refocus sits by the focus points. - **Rest… (D209):** the header lists the game's own rests and says what each gives back before it's taken. - PF2e: daily preparations and Refocus. - 5e: a short rest spends the Hit Point Dice the table rolled (the page rolls nothing), and a long rest gives everything back and removes one level of Exhaustion (SRD 5.2.1). - Hero points refill to 1 once per session, when a session starts being played. - Server route #14. - **Add from the loaded content:** search with Picker, the entry's card, then how many and where. Each row has its own quantity, where it is, invested/equipped, prepared, and Remove. A row whose pack has gone keeps its name and says where it came from. - **Live:** an open sheet picks up the other side's changes within a few seconds (polling). **Checks** - Render-checked at 390×844 and 1440 in both themes. The fixes are in b6e865e6 and a15586c5: Tab stays in dialogs, locks drawn on load, dice count checked, 24 px targets, compact hit points, pips wrap as units. - After merging main (with PR 10): the full backend suite passes on PR 12's branch, which contains this one (6631 passed). Ruff 0.4.4 check and format are clean. - Changelog: `changelog.d/737-lane11-hot-half.added.md`. PR 12 (block, reveal, table) is stacked on this. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge build/lane11-10-editing (1d753aab). Sheet.css: both appended blocks kept.
The hot write and rest routes refuse a non-GM write to a GM-locked path (403,
the lock's label); the page shows it on the save line in the refused-save words
and reads the hot half again. EntriesEditor's head carries the lock like the
other lists. 5e short rest floors the typed total at the number of dice spent.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- ui/Modal: Tab wraps last-to-first inside the dialog (and aria-modal), so a
  keyboard cannot reach the page behind the Rest and Add a condition dialogs.
- A pool, track or the conditions the GM locked draw locked for anyone else
  (lockTest, the editor's own rule): -5/-1/+, pips and temp held, the fields'
  'locked by the GM' chip; Cast and Refocus say why.
- 5e short rest: the dice count is checked before anything is sent (Is at
  most 2. / Is at least 1.), aria-invalid and described; the total and Take
  wait for a valid count.
- ui/Choices radios and a content row's checkboxes are 24px; hot pips keep a
  24px target.
- Hit points as drawn: hero points, dying and wounded on one row of pips,
  temp compact beside the figure, conditions as a chip with its stepper and
  '+ Condition'.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Each pool's label and pips are one nowrap unit; its lock chip wraps under it,
so a locked row is never wider than a narrow card. Pools of points come before
the tracks, as drawn.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into build/lane11-11-hot-half
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 3m18s
CI / Backend lint (ruff) (pull_request) Successful in 1m7s
CI / Bot tests and audit (pull_request) Successful in 4m16s
CI / Feedback site tests (pull_request) Successful in 1m52s
CI / Bot/backend version sync (pull_request) Successful in 58s
CI / Does this change touch the recording path? (pull_request) Successful in 39s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Docker image build (pull_request) Successful in 1m21s
CI / Frontend (shard 1/2) (pull_request) Successful in 20m31s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 10m10s
CI / End-to-end journeys (desktop) (pull_request) Successful in 10m8s
CI / Frontend (shard 2/2) (pull_request) Successful in 12m30s
CI / End-to-end journeys (phone) (pull_request) Successful in 12m21s
CI / Backend migration, tests, and audit (pull_request) Successful in 20m18s
326afa46c6
Reading the sheet again (a reload, or the refetch after a refused save)
restored this device's draft whole, so a player could see a refused value
in a field that had just turned read-only. The reset now drops locked
fields from a player's kept draft, the way adopt already did. The lock
test waits for both the lock and the value; CI's slow shard caught the gap.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into build/lane11-11-hot-half
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 2m19s
CI / Backend lint (ruff) (pull_request) Successful in 1m6s
CI / Bot tests and audit (pull_request) Successful in 4m7s
CI / Feedback site tests (pull_request) Successful in 1m45s
CI / Bot/backend version sync (pull_request) Successful in 53s
CI / Does this change touch the recording path? (pull_request) Successful in 31s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Docker image build (pull_request) Successful in 1m11s
CI / Frontend (shard 2/2) (pull_request) Successful in 14m33s
CI / Frontend (shard 1/2) (pull_request) Successful in 9m29s
CI / End-to-end journeys (phone) (pull_request) Successful in 8m0s
CI / End-to-end journeys (desktop) (pull_request) Successful in 16m31s
CI / Backend migration, tests, and audit (pull_request) Successful in 19m17s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 16m55s
1da5dde484
Sign in to join this conversation.
No description provided.