feat(FEAT-3): initiative first-class field (add + inline edit)
Add form: optional initiative field (monster + character). Empty = roll d20+mod (current behavior). Filled = use value, skip roll. 'blank=roll' hint + 'auto' placeholder for clarity. Inline edit: ALL participants. Number input in participant row. Blur or Enter commits. Capped 2 digits (max 99). Auto-select on focus for quick overwrite. Styled to match other fields (border-stone-700, rounded-md, shadow-sm, w-10). handleAddParticipant: manualInit detects set value. lastRollDetails adapts display (manual flag shows 'Set initiative' vs 'Rolled d20'). Campaign card date: Clock icon + 'Created:' prefix, own row, muted stone-300 opacity-70. Was crammed inline with character/encounter counts. Tests: InitiativeField.test.js (2 tests - set value + empty=roll). RED first (field missing), then green after impl. App + Participant characterization still green (18 total). Note: inline init edit does NOT re-sort. Known followup — displays + list order must reflect changed initiative. Tracked separately.
This commit is contained in:
@@ -5,6 +5,12 @@ REWORK_PLAN.md.
|
||||
|
||||
## Feature backlog
|
||||
|
||||
### CRITICAL BUG - storage
|
||||
- docker for sql is not using persistant storage...
|
||||
|
||||
### feat - campaign section rollup
|
||||
|
||||
|
||||
### FEAT-M6: Transactional undo (moved from REWORK_PLAN)
|
||||
- Every mutating action writes event: `(type, payload, undo_payload, undone, ts)`.
|
||||
- Undo = apply `undo_payload` in same SQLite tx, flip `undone`. Transactional,
|
||||
@@ -17,7 +23,7 @@ REWORK_PLAN.md.
|
||||
## Architecture: 1-list turn order model (DONE)
|
||||
- Single source: turnOrderIds === participants.map(id). No re-sort after
|
||||
startEncounter. nextTurn skips inactive (predicate), inactive stay in slot.
|
||||
- Drag (reorder) overrides initiative — cross-init allowed, DM choice.
|
||||
- Drag (reorder) overrides initiative --- cross-init allowed, DM choice.
|
||||
- startEncounter sorts ALL participants by init once, then frozen.
|
||||
- addParticipant splices by init pos. remove/toggle/reorder sync list.
|
||||
- Display renders participants[] directly (no sortParticipantsByInitiative).
|
||||
@@ -31,7 +37,7 @@ REWORK_PLAN.md.
|
||||
- Separate design + RED. Own work item.
|
||||
- Related: tie-break = drag order (current, works). Expose clearly.
|
||||
|
||||
### FEAT-1: Dead participants stay in turn order — DONE
|
||||
### FEAT-1: Dead participants stay in turn order --- DONE
|
||||
- Fixed: `applyHpChange` no longer flips `isActive` or touches `turnOrderIds`
|
||||
on death/revive. Dead stay in rotation, `nextTurn` visits them, PCs get
|
||||
death-save turn. `isActive` = DM toggle only.
|
||||
@@ -40,7 +46,7 @@ REWORK_PLAN.md.
|
||||
|
||||
### FEAT-2: upgrade app internal logs to be parseable
|
||||
- Goal: combat logs in Firestore store enough structured state to run
|
||||
skip/rotation analysis on ANY historic round — not just replay stdout.
|
||||
skip/rotation analysis on ANY historic round --- not just replay stdout.
|
||||
- Current logs: `{timestamp, message, encounterName, undo}`. Parser must
|
||||
guess roster from message strings. Brittle.
|
||||
- Upgrade: add structured fields at turn-state mutation log sites in
|
||||
@@ -104,12 +110,12 @@ REWORK_PLAN.md.
|
||||
- Test: render App + DisplayView, toggle hide-HP, assert display still shows
|
||||
encounter (not paused).
|
||||
|
||||
### BUG-5: mid-round addParticipant/revive corrupts rotation — FIXED
|
||||
### BUG-5: mid-round addParticipant/revive corrupts rotation --- FIXED
|
||||
- Fixed (commit `494327f`). Slot-array turn order + DRY advance core
|
||||
`nextActiveAfter`. Both nextTurn + computeTurnOrderAfterRemoval delegate.
|
||||
- 500-round replay: 0 skips, 0 double-acts.
|
||||
|
||||
### BUG-6: reorderParticipants doesn't update turnOrderIds — FIXED
|
||||
### BUG-6: reorderParticipants doesn't update turnOrderIds --- FIXED
|
||||
- Fixed structurally by 1-list model (commit 5d3a060). turnOrderIds =
|
||||
participants.map(id) always. reorder cross-init allowed (DM override).
|
||||
Display === rotation by construction.
|
||||
@@ -181,8 +187,8 @@ REWORK_PLAN.md.
|
||||
- [ ] BUG-4: fix setDoc→updateDoc for all 5 activeDisplay sites
|
||||
- [x] BUG-5: fixed (1-list model, 500 rounds clean)
|
||||
- [x] BUG-6: fixed structurally (1-list model)
|
||||
- [x] BUG-12: fixed — campaign selection follows activeDisplay
|
||||
- [x] BUG-15: fixed — DisplayView no longer re-sorts (drag order preserved)
|
||||
- [x] BUG-12: fixed --- campaign selection follows activeDisplay
|
||||
- [x] BUG-15: fixed --- DisplayView no longer re-sorts (drag order preserved)
|
||||
- [x] BUG-8: ws adapter reconnect (implemented + GREEN)
|
||||
- [ ] BUG-10: deact+reactivate double-act
|
||||
- [ ] BUG-11: FE Combat.scenario crash
|
||||
|
||||
Reference in New Issue
Block a user