2026-06-29 14:36:02 -04:00
|
|
|
# TODO
|
|
|
|
|
|
2026-07-04 16:59:52 -04:00
|
|
|
Backlog of bugs + long-term items. Milestones live in REWORK_PLAN.md.
|
2026-06-29 14:36:02 -04:00
|
|
|
|
2026-07-04 22:27:32 -04:00
|
|
|
## Open
|
|
|
|
|
|
2026-07-06 17:10:01 -04:00
|
|
|
|
|
|
|
|
|
2026-07-06 16:39:11 -04:00
|
|
|
### dm list - keep active particpant in view (scroll)
|
2026-07-06 18:48:29 -04:00
|
|
|
not sure good way to do this
|
2026-07-06 16:39:11 -04:00
|
|
|
|
|
|
|
|
|
2026-07-06 23:49:47 -04:00
|
|
|
### npm install warnings cleanup pass
|
|
|
|
|
lots of updates
|
|
|
|
|
|
2026-07-06 16:39:11 -04:00
|
|
|
|
|
|
|
|
|
2026-07-06 10:31:46 -04:00
|
|
|
### 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 + limit` should 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.json` writes 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_ts` and `idx_docs_parent_encounter_ts` exist 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<n` skips 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.
|
|
|
|
|
|
|
|
|
|
|
2026-07-04 22:36:15 -04:00
|
|
|
### 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.
|
2026-07-01 22:25:52 -04:00
|
|
|
|
2026-07-04 22:48:58 -04:00
|
|
|
|
2026-07-06 18:48:29 -04:00
|
|
|
### quality of life fix: 2. UI says "Campaign Characters", field is players --- naming mismatch (separate concern, flag for later)
|
|
|
|
|
|
|
|
|
|
|
2026-07-04 22:48:58 -04:00
|
|
|
## FEAT - parallel campaigns
|
|
|
|
|
|
|
|
|
|
## FEAT - multi user
|
|
|
|
|
|
|
|
|
|
## FEAT - clarify what end encounter does and what initiatives reset means
|
|
|
|
|
|
2026-07-04 16:59:52 -04:00
|
|
|
## Done (history)
|