Skip to content

v0.15.9

Choose a tag to compare

@AwsomeFox AwsomeFox released this 30 Jul 20:55
· 257 commits to main since this release
28c2d38

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 scheduledAt on 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_at columns 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