AC (Armor Class) optional field across all participant entry points: - shared: ac field on makeParticipant + buildMonsterParticipant + buildCharacterParticipant, defaults null - CharacterManager: defaultAc state + add form field + inline edit field + display in character list - Monster add form: AC field - EditParticipantModal: AC field next to Initiative - ParticipantManager (DM list): AC badge on name row (sky-blue, stylized, large value, small label) for at-a-glance reading - Player display: no AC (DM only) Layout polish: - Add participants form: 12-col grid, 5 fields single row (Init Mod, Initiative, AC, Max HP, HP Formula), shrunk from oversized fields - Character add form: 12-col grid, name grows (col-span-6), Init Mod/AC/HP small right-aligned, order matches add participants - Character inline edit: labels added (Name/HP/Init Mod/AC), name flex-grows - HP Formula: label trimmed (example moved to placeholder 'e.g. 2d6+9'), Reroll button in edit modal - ParticipantManager init input shrunk (w-8, centered) Tests: 6 new AC builder tests (turn.ac.test.js). Existing test labels updated for renamed fields.
3.4 KiB
3.4 KiB
TODO
Backlog of bugs + long-term items. Milestones live in REWORK_PLAN.md.
Open
fullscreen and dont lock on main app dm view and the no-game-player view
also better vert tab layout - labelt friendly
x needs AC for players dude
and quick entry hp
hp do not carry from encounter to ecnounter!!! ^feature to add back to campaign character after encounter? maybe campaign toggle in charc section (choosing each end is DM overload will be missed forgotten done wront)
hp wont go over max and no temp hp support
dm list - keep active particpant in view (scroll)
not sure good way to do this
npm install warnings cleanup pass
lots of updates
monsters per campaign and npcs
or/and ....copy from encoubnter?
TEST GAP: current branch changes need focused coverage
- Storage
where()contract: firebase + server adapters should honor[where('encounterPath','==',x), orderBy('ts','desc'), limit(n)]. - Server SQL query test:
where + orderBy + limitshould return latest logs for one encounter only. - Undo/redo stack order: undo A3 then A2, redo must replay A2 first, then A3.
- Combat controls should not subscribe to logs while mounted; undo/redo should query logs only on click.
- Unified CLI smoke:
node scripts/combat.js verify <fixture.json>returns CLEAN on known-good log. - Unified CLI replay smoke:
node scripts/combat.js replay ... --out tmp/x.jsonwrites JSON array and auto-verifies. - Ctrl-C replay behavior: SIGINT during replay should end encounter, clear active display, write partial log, run verify.
- SQLite schema/index test:
idx_docs_parent_tsandidx_docs_parent_encounter_tsexist for server DB.
confirm warnings treated as error = fail in all tests, build pipeline, linters, everything. again.
BUG: addParticipants (batch add) does not slot by initiative
- shared/turn.js addParticipants appends
[...existing, ...new], no slotIndexForInit. - Violates INIT doc: "Add = insert into slot by initiative."
- Single addParticipant slots correct. Batch (add-all-chars) appends.
- Pre-start batch add = wrong order. Post-start worse.
BUG: nextTurn throws on solo combatant
- nextActiveAfter loop
for step=1; step<nskips when n=1 → {nextId:null}. - nextTurn throws "Could not determine next participant."
- Solo active combat cannot pass turn.
BUG: reorderParticipants cross-pointer drag = silent no-op
- Cross-pointer drag returns encounter unchanged, no log, no toast.
- DM drags across current turn → nothing happens, no feedback.
BUG: addParticipant undo missing currentTurnParticipantId when started
- undo saves participants + conditional turnOrderIds, no currentTurnParticipantId.
- Pointer can misalign on undo if added near pointer region.
BUG: computeTurnOrderAfterRemoval isActive uses find() not boolean
isActive = id => updatedParticipants.find(p => p.id === id && p.isActive)- Returns participant obj (truthy) not boolean. Works by accident, fragile.
FEAT: clarify "Is NPC" in add-participant
- Ambiguous label. May expand work based on what NPC means here (ally? monster? display-only? skip in turn order?). Clarify intent before UX changes.