Repository navigation
v0.15.9
Key Highlights
- This release focuses on stability, correctness, and workflow reliability across encounters, search, VTT, web UI, and imports.
- It also adds a meaningful inventory upgrade: players can now equip/unequip items and use equipped gear as actions.
- Several changes improve turn lifecycle, undo behavior, and combat/encounter consistency for smoother gameplay.
New Features & Improvements
- Inventory: equip/unequip items and expose equipped gear as usable actions.
- Encounters: added an Undo turn button in the Encounter runner UI.
- Search: improved mobile access, truncation reporting, accented-content normalization, and parity between FTS and fallback search.
- Web UI: confirmation dialogs now use the shared Dialog primitive; nav labels and page titles were cleaned up for localization.
- Rules/performance: identical rule-pack re-imports are now short-circuited to reduce unnecessary work.
- VTT: geometry handling was improved for ruler rounding, AoE footprint, and grid reveal behavior.
- AI driver / encounter runner: added refactoring and optimization work to improve long-term maintainability.
Bug Fixes & Maintenance
- Fixed imported rows disappearing by validating
scheduledAton import. - Improved encounter behavior: sync-blocked controls are now disabled instead of unmounted, double-submit on apply-action is prevented, hidden encounter start now emits SSE events, and undo-turn restores condition/effect ticks.
- Corrected combat and turn state issues, including combatant lifecycle, recoverable removal, death-save roll authority, and turn-lifecycle correctness.
- Fixed web HP rollback behavior and dialog routing issues.
- Resolved database boot issues by ensuring
deleted_atcolumns exist on startup. - Addressed access/privacy gaps, including retained account attribution privacy and tighter archive/viewer access rules.
- Cleaned up tests and CI, including flaky E2E shards, hardcoded date assertions, Playwright timeout isolation, and typecheck documentation gaps.
Full Changelog
What's Changed
- fix(import): validate schedule scheduledAt so imported rows never vanish (#1521) by @AwsomeFox in #1762
- fix(encounters): CombatantRow disables sync-blocked controls instead of unmounting them by @AwsomeFox in #1770
- Fix encounter aftermath XP guidance by @AwsomeFox in #1756
- fix(search): mobile-reachable entry, truncation reporting, FTS/fallback parity (#1481) by @AwsomeFox in #1764
- perf(rules): short-circuit identical rule-pack re-imports (#1518) by @AwsomeFox in #1763
- fix: use one authoritative death-save d20 by @AwsomeFox in #1759
- fix(tests): resolve test integrity flaws and hardcoded date assertions (#1484) by @AwsomeFox in #1765
- fix(web): compose optimistic HP rollbacks by @AwsomeFox in #1769
- test(e2e): triage the e2e-web shard-1/2 flake rotation and fix the last live one by @AwsomeFox in #1775
- ci: type hand-rolled service doubles and document the typecheck gap (#1527) by @AwsomeFox in #1773
- fix(web): define --cf-layer-modal and give reduced-motion.spec.ts real DOM by @AwsomeFox in #1777
- ci: isolate Playwright dependency setup timeout by @AwsomeFox in #1779
- fix(db): ensure deleted_at columns exist on openDatabase boot by @AwsomeFox in #1772
- fix(ai-driver): fix permanent-aftermath drift and add the missing add_inventory_item guard by @AwsomeFox in #1774
- VTT geometry bugs: ruler rounding, AoE footprint, grid reveal by @AwsomeFox in #1788
- fix(web): route ConfirmDialog/ConfirmDestructiveDialog through the shared Dialog primitive by @AwsomeFox in #1790
- fix(search): support accented content normalization and fix cursor pagination (#1493) by @AwsomeFox in #1766
- fix(encounter): prevent double-submit on apply-action (#1474) by @AwsomeFox in #1767
- Watch main's own check-runs and guard against duplicate imports by @AwsomeFox in #1786
- fix(encounter): emit SSE events when starting hidden encounter (#1475) by @AwsomeFox in #1768
- fix(vtt): ensure grid-default normalization retry fires on colliding patch (#1614) by @AwsomeFox in #1771
- Fix combatant lifecycle and recoverable removal by @AwsomeFox in #1760
- Fix retained account attribution privacy by @AwsomeFox in #1780
- Issue #870: preserve/reset dependent spatial state on map replace/remove by @AwsomeFox in #1787
- fix(encounters): restore condition and effect ticks on undoTurn by @AwsomeFox in #1789
- fix(access): rename misleading requireMember write gate, narrow viewers, close archive gaps (#1480) by @AwsomeFox in #1794
- feat(inventory): equip/unequip items and surface equipped gear as usable actions by @AwsomeFox in #1791
- Fix #1463: Add Undo turn button to Encounter runner UI by @AwsomeFox in #1797
- [persona-audit] Session-zero safety charter is prompt-only — no server-side enforcement or violation backstop by @AwsomeFox in #1796
- Optimization and refactoring of encounter runner by @AwsomeFox in #1793
- Fix #1459: Turn-lifecycle correctness by @AwsomeFox in #1795
- fix(web): i18n hardcoded nav labels and page titles by @AwsomeFox in #1803
Full Changelog: v0.15.8...v0.15.9
Container image
docker pull ghcr.io/awsomefox/campfire:0.15.9