Skip to content

Releases

v0.16.2

Choose a tag to compare

@AwsomeFox AwsomeFox released this 10 Aug 22:21
1bd5cfe

Here's a summary of the GitHub release notes:


🚀 Key Highlights

  • Enhanced Encounter Management: New capabilities to place, move, label, and delete map objects, along with a dedicated AI driver dock tab.
  • Improved Character Customization: Added character-level damage resistances/vulnerabilities/immunities and a configurable character stat strip.
  • Discussions Enhancements: Introduced watch/mute/read-state features and first-post audience controls for discussions.

✨ New Features & Improvements

  • Discussions: Watch, mute, and manage read-states, plus control first-post audience.
  • Encounters: Full control over map objects (place, move, label, delete, click-to-place, drag/resize) and a dedicated AI driver dock tab.
  • Dice: Added roll kind for grouped and color-coded logging.
  • Characters: Implemented character-level damage resistances, vulnerabilities, and immunities. Introduced adapter-declared character stat strips.
  • Inventory: Added item weight and a client-side search box.
  • Character Sheet: Added a search box to the Skills card.

🐛 Bug Fixes & Maintenance

  • Storylines: Fixed column flow issue preventing flex-basis from turning into element height.
  • Encounters: Declared PF2e damage-type vocabulary and expanded category defenses.
  • Inventory: Ensured the compendium picker's Add button remains within the card.
  • Dashboard: Made handout metadata fields visible.

Full Changelog

What's Changed

  • Discussions: watch/mute/read-state + first-post audience (#829) by @AwsomeFox in #2170
  • test(web): golden coverage for the VTT cockpit header (issue #1688, step 1 of the spacing decision) by @AwsomeFox in #2166
  • feat(encounters): place, move, label, and delete map objects (set pieces) by @AwsomeFox in #2174
  • fix(storylines): stop column flow turning flex-basis into element height by @AwsomeFox in #2176
  • fix(encounters): declare PF2e damage-type vocabulary + expand category defenses by @AwsomeFox in #2177
  • feat(dice): add roll kind so the shared log can be grouped/colour-coded by @AwsomeFox in #2182
  • fix(inventory): keep the compendium picker's Add button inside the card by @AwsomeFox in #2185
  • feat(encounters): give the AI driver dock its own cockpit tab by @AwsomeFox in #2181
  • fix(dashboard): make the handout metadata fields visible by @AwsomeFox in #2190
  • Add search box to character sheet Skills card (#2154) by @AwsomeFox in #2186
  • feat(characters): character-level damage resistances/vulnerabilities/immunities (#2156) by @AwsomeFox in #2184
  • feat: adapter-declared character stat strip (#2159) by @AwsomeFox in #2187
  • Map objects: click-to-place, canvas drag/resize (#2175) by @AwsomeFox in #2191
  • feat(inventory): add item weight and a client-side inventory search box by @AwsomeFox in #2179

Full Changelog: v0.16.1...v0.16.2


Container image

docker pull ghcr.io/awsomefox/campfire:0.16.2

v0.16.1

Choose a tag to compare

@AwsomeFox AwsomeFox released this 10 Aug 15:46
985bc7d

Here's a summary of the GitHub release notes:


🚀 Key Highlights

  • AI-Generated Portraits: Create character and NPC portraits using AI.
  • Encounters as Live-Play Home: Encounters is now the central live-play experience for Drivers.
  • Browser Push Notifications: Opt-in to receive browser push notifications.
  • Personalized Navigation: Role-safe bookmarks and optional recent history for easier navigation.

✨ New Features & Improvements

  • Encounter Enhancements:
    • Add controllerUserId to combatants for player-controlled summons, companions, and mounts.
    • Implement creature mechanics for rolls within encounters.
    • Link directly from combatant cards to full character sheets.
  • Audit Trail Improvements:
    • Add structured timeline event details.
    • Include inventory item history payloads.
  • Roll System Updates: Introduce shared identity and visibility context for rolls.
  • Campaign Customization: Allow custom condition definitions for campaigns.
  • Performance: Optimize BattleMap rendering by keeping dragPos out of its render path.

🐛 Bug Fixes & Maintenance

  • Encounter Fixes:
    • Correctly close reorder in-flight-gate CAS window.
    • Restrict hidden status notifications.
    • Narrow HP cache writers off encounter-level turn fields.
    • Fix reorder resync latch's clearing signal.
  • Web Interface & Design:
    • Define the missing --color-warning token in the design system.
    • Repair VTT cockpit and character sheet layout fidelity.
  • Inventory Correction: Ensure equipping a weapon derives a correct attack across all systems.
  • CI/CD & Testing:
    • Serialize local test runs across concurrent agent sessions.
    • Increase server-tests timeout.
    • Add various behavioral and render-containment guards for testing.

Full Changelog

What's Changed

  • fix(encounters): close the reorder in-flight-gate CAS window at the response (issue #2116) by @AwsomeFox in #2131
  • feat(encounters): add controllerUserId to combatants for player-controlled summons, companions, and mounts by @AwsomeFox in #2034
  • fix(encounters): restrict hidden status notifications by @AwsomeFox in #2136
  • feat(audit): add structured timeline event details by @AwsomeFox in #2139
  • test(encounters): add a behavioural memo-boundary guard for GridOverlay by @AwsomeFox in #2142
  • feat(ai): generate character/NPC portraits with AI by @AwsomeFox in #2114
  • feat(web): make Encounters the Driver live-play home by @AwsomeFox in #2137
  • Add opt-in browser push notifications by @AwsomeFox in #2122
  • feat(audit): add inventory item history payloads by @AwsomeFox in #2148
  • feat(encounters): roll creature mechanics by @AwsomeFox in #2138
  • feat(rolls): add shared identity and visibility context by @AwsomeFox in #2146
  • feat(campaigns): add custom condition definitions by @AwsomeFox in #2145
  • perf(encounters): keep dragPos out of BattleMap's own render path by @AwsomeFox in #2149
  • build: serialize local test runs across concurrent agent sessions by @AwsomeFox in #2147
  • fix(encounters): narrow HP cache writers off encounter-level turn fields by @AwsomeFox in #2141
  • fix(encounters): key the reorder resync latch's clearing signal on dataUpdateCount, not dataUpdatedAt (issue #2140) by @AwsomeFox in #2143
  • ci: give server-tests real headroom over its 10m timeout by @AwsomeFox in #2152
  • fix(design-system): define the referenced-but-undefined --color-warning token by @AwsomeFox in #2164
  • fix(inventory): equipping a weapon derives a correct attack, in every system by @AwsomeFox in #2151
  • feat(encounters): link from the combatant card to the full character sheet by @AwsomeFox in #2153
  • test(campaigns): cover weaponProficiencies through a handoff-profile import round trip by @AwsomeFox in #2173
  • test(encounters): stage-4 render-containment probes for issue #1917 by @AwsomeFox in #2165
  • fix(web): repair VTT cockpit and character sheet layout fidelity by @AwsomeFox in #2171
  • Personal navigation: role-safe bookmarks + optional recent history (#840) by @AwsomeFox in #2172

Full Changelog: v0.16.0...v0.16.1


Container image

docker pull ghcr.io/awsomefox/campfire:0.16.1

v0.16.0

Choose a tag to compare

@AwsomeFox AwsomeFox released this 09 Aug 16:58
5c04f3b

🚀 Key Highlights

  • Major encounter-system updates: the run page was rebuilt as a VTT cockpit, the character sheet as the design template’s play surface, and the campaign dashboard as the command deck.
  • Expanded rules and combat support, including new encounter mechanics, rule pack support, and broader equipment/rules imports.
  • Significant quality-of-life upgrades for accessibility, audio/haptics, and dice presentation.

✨ New Features & Improvements

  • Encounter management now supports limited-use and recharge monster abilities, DM-only manual initiative reordering, and honoring hasInitiativeRoll across the encounter lifecycle.
  • Campaigns can now record durable lifecycle-status provenance, and support co-DM rewrites for story arcs and beats.
  • Rules content now imports Open5e mundane weapons and armor, supports primary and supplemental rule packs, and renders AoN-published stats for PF2e/SF2e entries.
  • Inventory can derive an equipped item’s action and make it editable.
  • Accessibility adds a keyboard path to the map ping intent menu.
  • Audio and haptics now include opt-in synthesized dice and turn cues, plus physical 3D dice from the design project.
  • Performance improvements reduce encounter rendering cost through memo boundaries, GridOverlay containment, and cache bounds.
  • Design/workflow updates include importing the Campfire component library into Claude Design.

🐛 Bug Fixes & Maintenance

  • Fixed multiple i18n issues, including namespace/catalog lookup problems, translation-key routing, and JSX text extraction false positives.
  • Fixed several encounter bugs around turn order, replay, empty encounters, hidden encounters, death saves, HP persistence, and template HP visibility.
  • Fixed campaign rule-system selection so importer-only rule packs cannot be chosen as the campaign’s ruleSystem.
  • Prevented a silent server crash when an SSE client disconnects.
  • Updated better-sqlite3 to the Node-API line for dependency compatibility.
  • Added and refined tests, including the two-connection EncounterOpRaceMarker harness and paired combatant-resource validation coverage.

Full Changelog

What's Changed

  • fix(i18n): stop a same-keyed resource from another adapter overwriting its name (#2068) by @AwsomeFox in #2071
  • fix(i18n): reach the catalog from two components that asked for an unregistered namespace (#2066) by @AwsomeFox in #2072
  • docs(decisions): record target shape for the four reusable-content systems by @AwsomeFox in #2060
  • perf(encounters): memo boundaries and an extracted GridOverlay for render containment by @AwsomeFox in #2078
  • Two-connection EncounterOpRaceMarker test harness (#2032) by @AwsomeFox in #2049
  • feat(a11y): keyboard path to the map ping intent menu by @AwsomeFox in #2055
  • feat(encounters): track limited-use and recharge monster abilities by @AwsomeFox in #2062
  • feat(encounters): DM-only manual initiative reorder by @AwsomeFox in #2074
  • Table audio and haptics: opt-in synthesized dice and turn cues (#1920) by @AwsomeFox in #2050
  • fix(i18n): route ping log and announcements through translated sentence keys by @AwsomeFox in #2051
  • feat(campaigns): record durable lifecycle-status provenance (#846) by @AwsomeFox in #2082
  • perf(encounters): make the GridOverlay memo actually hold, and bound the ref-callback cache by @AwsomeFox in #2083
  • fix(encounters): persist a homebrew monster's HP through save-to-library and re-add by @AwsomeFox in #2086
  • fix(deps): move better-sqlite3 to the Node-API line (13.x) by @AwsomeFox in #2089
  • feat(rules): import Open5e mundane weapons and armor (#2096) by @AwsomeFox in #2098
  • chore(design-sync): import the Campfire component library into Claude Design by @AwsomeFox in #2101
  • fix(rules): import and render the stats AoN publishes for PF2e/SF2e entries by @AwsomeFox in #2103
  • fix(encounters): narrow manualOrder to the DM's actual intent, and fix three reorder defects by @AwsomeFox in #2095
  • fix(encounters): refuse to advance an empty running encounter by @AwsomeFox in #2104
  • fix(i18n): stop extractJsxTextNodes false-positive on => fn<T>( generics by @AwsomeFox in #2108
  • fix(encounters): hide template HP on live combatants by @AwsomeFox in #2099
  • fix(encounters): re-derive combatant projection on role-match initiative replay (#1962) by @AwsomeFox in #2005
  • fix(campaigns): stop an importer-only rule pack from being selected as a campaign's ruleSystem by @AwsomeFox in #2085
  • fix(encounters): let the DM roll death saves in a hidden encounter by @AwsomeFox in #2109
  • Unify combatant resource validation across character and statblock branches by @AwsomeFox in #2113
  • fix(encounters): reland the tie-order and reorder-gate fixes dropped before #2074 merged by @AwsomeFox in #2088
  • feat(characters): rebuild the character sheet as the design template's play surface by @AwsomeFox in #2115
  • feat(encounters): rebuild the run page as the VTT cockpit by @AwsomeFox in #2117
  • feat(inventory): derive an equipped item's action, and make it editable (#2097) by @AwsomeFox in #2100
  • fix(encounters): close the next-turn CAS race that dropped turn-beat frames by @AwsomeFox in #2105
  • feat(dashboard): rebuild the campaign dashboard as the design's command deck by @AwsomeFox in #2127
  • fix(i18n): stop extractJsxTextNodes false-positives on comparison and generic-type shapes by @AwsomeFox in #2129
  • fix(events): prevent silent server crash on SSE client disconnect (#2126) by @AwsomeFox in #2133
  • feat(encounters): honour hasInitiativeRoll across the encounter lifecycle by @AwsomeFox in #2128
  • feat(dice): physical 3D dice roll from the Campfire design project by @AwsomeFox in #2125
  • Support co-DM rewrites for story arcs and beats by @AwsomeFox in #2110
  • Support primary and supplemental rule packs by @AwsomeFox in #2121
  • refactor(encounters): unify adjustCombatantResource's per-branch invariants and pair its tests by @AwsomeFox in #2087
  • fix(encounters): add undoTurn empty-roster guard to match next-turn/end-turn by @AwsomeFox in #2132

Full Changelog: v0.15.12...v0.16.0


Container image

docker pull ghcr.io/awsomefox/campfire:0.16.0

v0.15.12

Choose a tag to compare

@AwsomeFox AwsomeFox released this 07 Aug 17:52
e8c3493

🚀 Key Highlights

  • Major updates focus on encounter/combat flow, AI/DM tooling, and campaign management.
  • The release adds more real-time, player-facing combat UX: turn changes, HP feedback, initiative updates, monster visibility, and action targeting.
  • Several new capabilities improve content authoring and campaign governance, including campaign-scoped rules search, markdown editing, export/history, and shared-instance controls.

✨ New Features & Improvements

  • Encounters/combat: initiative strip with per-combatant colors, live HP feedback, token state badges, duplicate combatants, AoE templates, turn-change beats, turn timers, and quick-roll buttons for attacks/damage.
  • Player/GM UX: ended encounter summaries, lifecycle guidance, battle-map extraction, combat panels/rows refactors, persistent/attributable map pings, and colorblind-safe combat indicators.
  • Characters/equipment: Advantage/Disadvantage/Crit context menu, equip/unequip actions, D&D Beyond import improvements for attacks/spells/slots, movement speed support, and richer spellbook wiring.
  • Rules/campaigns: campaign-scoped rules search, quick-lookup panel, DM rules authoring improvements, campaign library UI updates, and shared-instance governance for campaign creation/storage.
  • AI/DM workflows: improved stream handling, clearer AI driver comprehension, grounded prompts, consent provenance, and better support for homebrew rule systems.
  • Other product surfaces: Markdown editor for prose fields, player display scene control, expanded notifications, campaign history export, and proposal editor improvements.

🐛 Bug Fixes & Maintenance

  • Fixed multiple combat loop and turn-action issues, including player turn actions, end-turn idempotency, replay correctness, and resource tracker wiring.
  • Resolved UI/behavior bugs across web and encounter screens, such as preserving dice context, handling detailed 400 errors, fixing PWA update buttons, scroll behavior, and route focus.
  • Corrected data integrity/import issues, including D&D Beyond speed and damage type imports, statblock clobbering, and restored form draft normalization.
  • Addressed AI/MCP/test reliability issues, including iteration caps, stream connections, structured conditions, retry handling, and flaky e2e/test assertions.
  • Included accessibility, localization, and maintenance updates such as live-combat localization, improved accessibility focus handling, performance cleanup, refactors, and test hardening.

Full Changelog

What's Changed

  • fix(ai-dm): human control, pause body validation, undo lever, and CAS handling (#1501) by @AwsomeFox in #1870
  • fix(ai): resolve AI test integrity issues, iteration cap, and harness echo-pass (#1500) by @AwsomeFox in #1873
  • fix(encounters): render ended summary and lifecycle orientation (#1470) by @AwsomeFox in #1876
  • fix(encounters): prevent native image drag and improve fog discoverability (#1309) by @AwsomeFox in #1874
  • feat(web): surface check requests campaign-wide outside encounters by @AwsomeFox in #1871
  • feat(web): render ended encounter summary tallies and lifecycle guidance by @AwsomeFox in #1872
  • fix(rules): DM rules content authoring, license gate & campaign library UI (#1504) by @AwsomeFox in #1878
  • feat(encounters): initiative strip with per-combatant colour identity (#1512) by @AwsomeFox in #1875
  • feat(characters): add Advantage/Disadvantage/Crit roll context menu by @AwsomeFox in #1867
  • feat: make map pings attributable, perceivable, and persistent by @AwsomeFox in #1882
  • fix(co-dm): ground prompts in campaign ruleset (#766) by @AwsomeFox in #1881
  • fix(mcp): document structured conditions in update_combatant (#1447) by @AwsomeFox in #1883
  • feat: Add MarkdownEditor for prose fields by @AwsomeFox in #1880
  • feat: Player Display SSE scene control (fixes #1458) by @AwsomeFox in #1887
  • feat(notifications): expand live play and campaign event coverage (#1322) by @AwsomeFox in #1886
  • feat(encounters): encounter aftermath mutations for XP, loot, quest, storyline, and timeline (#1448) by @AwsomeFox in #1895
  • feat(encounters): add inline quick-roll buttons for attack and damage rolls by @AwsomeFox in #1861
  • feat: export complete player-authored campaign history by @AwsomeFox in #1885
  • feat(ai-dm): unify stream connections to fix issue 880 by @AwsomeFox in #1888
  • fix(encounters): enable player turn actions (#1457) by @AwsomeFox in #1890
  • fix(web): preserve detailed 400 error messages and fix PWA update banner buttons by @AwsomeFox in #1892
  • test(encounters): turn loop and error path tests (#1465) by @AwsomeFox in #1893
  • feat(sessions): DM-private session prep notes (#883) by @AwsomeFox in #1894
  • fix(test): correct encounter turn-loop expectations to match server contract by @AwsomeFox in #1948
  • fix(e2e): stabilize map-ping-tap coordinate assertions by @AwsomeFox in #1955
  • feat(equipment): equip/unequip UI and equipped-item actions in /turn and encounter card (Fixes #1901) by @AwsomeFox in #1951
  • fix(a11y): re-attempt route focus when a late h1 arrives by @AwsomeFox in #1957
  • fix(encounters): wire ResourceTrackerPanel rest/pips to the real engine by @AwsomeFox in #1947
  • feat(characters): carry attacks, spells, and spell slots through D&D Beyond import by @AwsomeFox in #1950
  • fix(encounters): wire the in-combat Spellbook to real spells and slots by @AwsomeFox in #1952
  • feat(encounters): server-authoritative per-combatant initiative rolls + bulk dice-log evidence (Fixes #1904) by @AwsomeFox in #1953
  • fix(cast): observe X-Card safety holds on cast-token Player Display by @AwsomeFox in #1949
  • fix(i18n): localize live-combat surface (#1464) by @AwsomeFox in #1889
  • chore(git): ignore Claude Code backlog worker worktrees by @AwsomeFox in #1961
  • fix(characters): carry DDB feature damage types instead of resolving untyped by @AwsomeFox in #1959
  • refactor(web): extract encounter battle map by @AwsomeFox in #1966
  • feat(rules): campaign-scoped rules search and entries (#1898) by @AwsomeFox in #1945
  • refactor(web): extract encounter combatant row by @AwsomeFox in #1968
  • feat(encounters): add token state badges by @AwsomeFox in #1964
  • refactor(web): extract encounter combat panels by @AwsomeFox in #1969
  • fix(mcp): replay end-turn retries by @AwsomeFox in #1970
  • refactor(web): extract DM lifecycle header by @AwsomeFox in #1972
  • feat(web): add encounter turn-change beats by @AwsomeFox in #1963
  • fix(web): preserve dice tray roll context by @AwsomeFox in #1973
  • feat(encounters): add live HP feedback by @AwsomeFox in #1965
  • feat(encounters): in-tracker rules quick-lookup panel (#1929) by @AwsomeFox in #1976
  • feat(campaign-library): preserve roster on encounter templates by @AwsomeFox in #1978
  • feat(web): preserve and infer resolvable specs in sheet action editor by @AwsomeFox in #1977
  • feat(characters): add movement speed to Character/Combatant, stop hardcoding 30 ft by @AwsomeFox in #1980
  • feat(encounters): duplicate combatants by @AwsomeFox in #1975
  • Stop presenting 5e math as system-correct: resolver + generator honesty by @AwsomeFox in #1981
  • feat(encounters): shared gating-reason affordance for disabled combat controls by @AwsomeFox in #1988
  • Define campaign danger level scope and add contextual help by @AwsomeFox in #1989
  • Document and close the encounter-event AI-consent boundary by @AwsomeFox in #1991
  • test(encounter): add turn loop, error paths, mobile, rulesets, and death save E2E specs (#1465) by @AwsomeFox in #1879
  • Expose adjustCombatantResource over REST and MCP; fix whole-statblock clobber by @AwsomeFox in https://github.com/AwsomeFox/campfire/pul...
Read more

v0.15.11

Choose a tag to compare

@AwsomeFox AwsomeFox released this 01 Aug 11:28
6cb986d

🚀 Key Highlights

  • This release focuses on a major encounters/combat UI expansion, adding faster turn management, clearer combat state, and more in-fight controls.[1]
  • It also includes broader web and design-system cleanup, plus AI-driver and CI reliability work.[1]

✨ New Features & Improvements

  • Added UI controls for objective delete, comment restore, proposal payload editing, and story beat revisions.[1]
  • Introduced a tabbed action economy panel for the turn workspace and encounters flow.[1]
  • Added encounter tools including quick-roll inline buttons, a sticky in-combat vitals header, an in-combat spellbook panel with slot tracking and cast buttons, an icon-rich combat actions bar, a limited-use resource tracker, and default encounter name / party bulk-add / quick fight support.[1]
  • Improved mobile and web UX by making Encounters a standing mobile tab and preserving More access during fights.[1]
  • Refactored the web StatusMenuButton to use the design-system component, and codemodded bare .card usage to explicit .[1]

🐛 Bug Fixes & Maintenance

  • Fixed AI-driver issues including a Pause 400 error, DM undo of AI actions, and a concurrency bug where the AI could silently win edits.[1]
  • Stabilized CI by raising the coverage timeout and fixing the mobile QR viewport test.[1]
  • Corrected combat/encounter behavior for exact damage input, one-tap conditions, wake lock handling, gridUnit-aware movement, initiative breakdown, and group selector display.[1]
  • Fixed campaign/session tracking by separating latestSessionNumber from recap count.[1]

Full Changelog

What's Changed

Full Changelog: v0.15.10...v0.15.11


Container image

docker pull ghcr.io/awsomefox/campfire:0.15.11

v0.15.10

Choose a tag to compare

@AwsomeFox AwsomeFox released this 01 Aug 00:21
8bf8c65

🚀 Key Highlights

  • This release focuses on accessibility, AI driver reliability, and web/server polish across the app.
  • It also adds several user-facing workflow improvements in inventory, character sheets, sessions, and quests.
  • Overall, the update strengthens stability, consistency, and rules-system support.

✨ New Features & Improvements

  • AI encounter panel now surfaces tool confirmations for clearer live-play feedback.
  • Inventory add flows now include a From Compendium option.
  • Character sheet accessibility has been improved, including better touch targets and contrast handling.
  • Session prep now supports notes, recap pre-fill, and RSVP seeding.
  • Web UI consistency was improved across dialogs, headers, roster cards, tokens, and page-title typography.
  • Quests can now be edited after creation, including title, reward, giver, and parent.
  • AI Driver received live-play tools, turn-state control, and turn-change triggers.

🐛 Bug Fixes & Maintenance

  • Fixed multiple a11y issues, including WCAG target-size coverage and smaller interactive controls.
  • Improved server lifecycle handling, including death state, concentration breaks, and encounter-end reconciliation.
  • Hardened AI Driver behavior with step caps, truncation handling, allowlists, and better turn-loop safety.
  • Fixed inbox sweep reliability, including race recovery, background execution, and pagination title resolution.
  • Improved export/scribe job limits to avoid unbounded scans and overly large logs.
  • Tightened tests and coverage, including adapter parity, E2E stability, UI icon contracts, and server coverage baselines.
  • Fixed additional rules and character logic, including rule-system adapter delegation and non-5e bestiary support.

Full Changelog

What's Changed

  • fix(a11y): enable target-size rule, scan chrome contrast, enforce incomplete policy (#1778) by @AwsomeFox in #1804
  • feat(ai-dm): surface tool confirmations in the encounter panel (#1494) by @AwsomeFox in #1802
  • fix(server): derive character lifecycle status from deathState on create by @AwsomeFox in #1807
  • feat(inventory): add From Compendium affordance to inventory add flows (#1782) by @AwsomeFox in #1805
  • feat(ai-driver): cap cumulative AI Driver economy grants per aftermath window (#1781) by @AwsomeFox in #1810
  • Fixes #1456 — encounter runner touch targets, single end-turn path, panel focus/announce by @AwsomeFox in #1800
  • fix(ai-driver): convert guardDriverLivePlayArgs to allowlist (#1792) by @AwsomeFox in #1798
  • fix(web): consolidate dialogs, page headers, roster cards, and tokens (#1783) by @AwsomeFox in #1809
  • feat(web): improve character sheet accessibility (fixes #1488) by @AwsomeFox in #1799
  • fix(ai-driver): honor finishReason truncation, enforce the step cap, and harden the eval harness (#1500) by @AwsomeFox in #1811
  • fix(web): preserve session deep links in CatchUpPanel and SessionLog by @AwsomeFox in #1814
  • fix(server): concentration breaks when caster drops, dies, removed, or recasts (#1452) by @AwsomeFox in #1801
  • test(adapters): update Linux parity snapshot and assert exact adapter behavior (#1508) by @AwsomeFox in #1817
  • fix(ai-driver): add live-play tools, turn state control, and turn change triggers (#1498) by @AwsomeFox in #1815
  • fix(characters): delegate character sheet checks and rest logic to rule-system adapter by @AwsomeFox in #1816
  • fix(rules): distinguish drifted 13th Age statblocks from prose headings (#1522) by @AwsomeFox in #1822
  • fix(scribe): replace unbounded priorSucceeded scan with bounded deduplication queries (#1530) by @AwsomeFox in #1823
  • fix(export): bound campaign export AI scribe job log to recent runs and proposal rows (#1529) by @AwsomeFox in #1821
  • Consolidate web app formatting and add ESLint rule banning bare toLocaleString (Fixes #1531) by @AwsomeFox in #1824
  • Defer seed() evaluation in browser e2e specs (Fixes #1753) by @AwsomeFox in #1825
  • Inbox sweep: distinguish race-recovered proposals from fresh proposals (Fixes #1724) by @AwsomeFox in #1827
  • Hide owner-only interactive controls during character print (Fixes #1761) by @AwsomeFox in #1826
  • Preserve explicit non-active lifecycle status during encounter-end reconciliation (Fixes #1758) by @AwsomeFox in #1828
  • test(ui-icons): assert canonical 4-value scale contract (Fixes #1715) by @AwsomeFox in #1830
  • fix(web): resolve inbox sweep titles beyond first page (Fixes #1718) by @AwsomeFox in #1831
  • Unify page-title typography across PageHeader and PageTitle (Fixes #1714) by @AwsomeFox in #1832
  • Fix sub-24px WCAG interactive controls with density=xs (Fixes #1722) by @AwsomeFox in #1833
  • test(e2e): guard and unroute proxy route.fetch handlers by @AwsomeFox in #1835
  • fix(web): ensure .cf-target-24 and .cf-target-44 take precedence over control aliases (Fixes #1698) by @AwsomeFox in #1834
  • fix(server): route death saves, proficiency, and crit/fumble through the rule-system adapter (#1503) by @AwsomeFox in #1812
  • fix(server): support non-5e bestiary play (Starforged null HP, PF2e actions, OSR hit dice) (#1506) by @AwsomeFox in #1836
  • fix(inbox-sweep): background the sweep so client can recover results after timeout (#1716) by @AwsomeFox in #1820
  • fix(ai-driver): harden turn loop against pre-loop throws and add scene/history to prompts (#1497) by @AwsomeFox in #1819
  • fix(web): thread ruleSystem adapter into optimistic HP lifecycle (Fixes #1829) by @AwsomeFox in #1838
  • test(server): raise the all-source unit coverage baseline by @AwsomeFox in #1837
  • fix(quests): allow editing title, reward, giver, and parent after creation by @AwsomeFox in #1842
  • feat(web): session prep notes, scheduled session recap pre-fill, and RSVP seeding by @AwsomeFox in #1845

Full Changelog: v0.15.9...v0.15.10


Container image

docker pull ghcr.io/awsomefox/campfire:0.15.10

v0.15.9

Choose a tag to compare

@AwsomeFox AwsomeFox released this 30 Jul 20:55
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

v0.15.8

Choose a tag to compare

@AwsomeFox AwsomeFox released this 30 Jul 02:00
07d7358

🚀 Key Highlights

  • Major focus on AI Driver, campaign management, and gameplay reliability improvements.
  • Added stronger safety, consent, moderation, and audit workflows across sessions and AI-assisted play.
  • Expanded support for encounters, maps, character sheets, and print-friendly outputs.

✨ New Features & Improvements

  • Introduced server-wide AI seat defaults, AI session lifecycle phases, and step-level retry/fallback for the AI Driver.
  • Added collaborative handoff mode, DM-facing tool confirmation queue, and bounded conversation history for AI play.
  • Improved campaign and session workflows with organized-play scheduling, admin campaign catalog controls, and guest DM handoff protections.
  • Enhanced content and rules handling with campaign module lineage/rollback, linked compendium inventory acquisition, and structured condition/resource support.
  • Added print-ready reference sheets, print-friendly character sheets and recaps, and encounter activity rail updates.

🐛 Bug Fixes & Maintenance

  • Fixed issues in combat, conditions, damage resolution, concentration checks, and rest/recovery flows.
  • Resolved AI state and security bugs, including transcript caching, consent controls, grant revocation, SSE frame leakage, and race conditions.
  • Improved backups, exports, search, audits, diagnostics, and storage reliability.
  • Addressed multiple test, CI, and e2e flakiness issues to improve release confidence and stability.

Full Changelog

What's Changed

  • fix: One-shot campaign onboarding checklist for new DMs (#507) by @AwsomeFox in #1427
  • fix: Audit retention — no silent history deletion (#502) by @AwsomeFox in #1429
  • fix: Open Legend native character sheets and attribute preservation (#540) by @AwsomeFox in #1433
  • fix: Open Legend exploding action dice in roller, log, MCP, AI (#541) by @AwsomeFox in #1435
  • fix: Guest DM handoff with protected ownership and scoped grants (#545) by @AwsomeFox in #1439
  • fix: FTS5-backed campaign search for scalable queries (#533) by @AwsomeFox in #1430
  • fix: Backup scheduler retention, free-space protection, alerts (#505) by @AwsomeFox in #1425
  • fix: Explain None/homebrew ruleset consequences before create (#508) by @AwsomeFox in #1428
  • fix: Maps onboarding for world, handout, and encounter maps (#520) by @AwsomeFox in #1434
  • fix: 13th Age level initiative and escalation die in combat (#542) by @AwsomeFox in #1436
  • fix: Structured encounter conditions with duration and concentration (#423) by @AwsomeFox in #1440
  • test(web): add missing Linux snapshot baseline for ui-icons unit spec by @AwsomeFox in #1467
  • fix: Compendium facets from active ruleset with Rules/Reference (#544) by @AwsomeFox in #1437
  • fix: Atomically reserve AI token budget before provider calls (#563) by @AwsomeFox in #1444
  • fix: Explain Campfire jargon at first use (#518) by @AwsomeFox in #1431
  • fix: Server-redacted cast sessions for Player Display (#547) by @AwsomeFox in #1438
  • feat: Durable responsive map derivatives instead of decoding originals (#604) by @AwsomeFox in #1515
  • test: nightly live rule-source smoke covering every importer (#568) by @AwsomeFox in #1517
  • test(web): PWA install/offline e2e coverage and CI wiring (#569) by @AwsomeFox in #1519
  • fix: AI readiness prerequisites before promoting AI actions (#519) by @AwsomeFox in #1432
  • fix: Rule pack updates apply upstream corrections to existing slugs (#500) by @AwsomeFox in #1441
  • fix: Cancel scheduled sessions without deleting RSVP history (#504) by @AwsomeFox in #1426
  • fix: Idempotent combat mutations so a lost response cannot double-apply (#580) by @AwsomeFox in #1525
  • fix: Persist AI Driver control state across restarts (#559) by @AwsomeFox in #1442
  • feat: Preserve abuse evidence and add a protected incident workflow (#601) by @AwsomeFox in #1514
  • feat: Authoritative multi-player AI Table transcript (#572) by @AwsomeFox in #1524
  • fix: AI consent controls and durable generation provenance (#501) by @AwsomeFox in #1443
  • feat: Separate backups from redacted adventure distribution packages (#586) by @AwsomeFox in #1536
  • feat: Ground AI Driver rules and canon claims in authorized retrieval (#577) by @AwsomeFox in #1537
  • feat: Campaign module identity, lineage, updates, overlays, and rollback (#585) by @AwsomeFox in #1523
  • ci: type-check the server test tree and the web e2e tree in lint (#1535) by @AwsomeFox in #1542
  • test: assert documented success statuses match what routes actually return (#1538) by @AwsomeFox in #1540
  • fix: Player damage on own character no longer 403s off-turn; fix two e2e flake root causes (#1478) by @AwsomeFox in #1544
  • fix: Namespace AI transcript cache by user and purge it on identity changes (#573) by @AwsomeFox in #1543
  • feat: Read-only Viewer, interactive-guest capability, block, mute, and direct silence (#597) by @AwsomeFox in #1549
  • perf: replace count-by-loading with SQL aggregates in the campaign summary (#602) by @AwsomeFox in #1550
  • fix: audit and revoke AI Driver grants that cannot survive a restart (#1042) by @AwsomeFox in #1551
  • feat: give the AI Driver bounded conversation history (#1038) by @AwsomeFox in #1553
  • fix: moderation-blocked AI map prompts no longer consume the rate-limit slot by @AwsomeFox in #1554
  • test: stop the pseudonymizer test failing when its random tail contains the id by @AwsomeFox in #1564
  • test: scope getByRole('status') queries so they cannot match a loading skeleton by @AwsomeFox in #1565
  • test: wait for the transcript mount tail-pin before scrolling away (#590) by @AwsomeFox in #1563
  • test: scope the combatant Remove locator so it cannot match the map's remove control by @AwsomeFox in #1559
  • feat: let the AI Driver reshape encounters, with visibility and ownership contained (#1022) by @AwsomeFox in #1557
  • test: dismiss the AI-disclosure popover by viewport point, not by a page element by @AwsomeFox in #1569
  • feat: server-wide AI seat defaults that campaigns inherit live (#1070) by @AwsomeFox in #1568
  • fix: role-project every AI driver SSE frame so a new frame type cannot leak by default (#1552) by @AwsomeFox in #1572
  • feat: DM-facing tool confirmation queue on the AI Table (#1558) by @AwsomeFox in #1573
  • fix: make spell-slot overspend an error and give the AI Driver the tool to spend them (#1039) by @AwsomeFox in #1570
  • fix: stop a cleared condition coming back on its own, via one owner of both condition columns by @AwsomeFox in #1575
  • feat: declare inspiration and hero points as rule-system resources, and fix a lost-update race in resource spending (#1073) by @AwsomeFox in #1577
  • feat: structured condition instances on the character sheet, with an explicit combat boundary (#1047) by @AwsomeFox in #1582
  • fix: actually run the 157 web unit specs, and fix the 10 failures that had accumulated (#1574) by @AwsomeFox in #1583
  • feat: collaborative handoff mode for the AI Driver — narrate freely, defer mechanics (#1051) by @AwsomeFox in #1567
  • feat: atomic short rest and long rest, reconciling two divergent recovery paths (#1041) by @AwsomeFox in #1566
  • feat: Participant X-Card — an immediate safety hold across encounters and AI play (#599) by @AwsomeFox in #1547
  • feat: structured tone, pacing and play-style presets for the AI seat (#1049) by @AwsomeFox in #1560
  • feat: Organized-play scheduling — rooms, series, assigned DMs, and cross-campaign conflicts (#588) by @AwsomeFox in #1539
  • fix: Encounters: damage application ignores damage type, ...
Read more

v0.15.7

Choose a tag to compare

@AwsomeFox AwsomeFox released this 26 Jul 01:52
f3cff77

🚀 Key Highlights

  • This release focuses heavily on encounters, VTT usability, AI safety, and accessibility.
  • Major workflow upgrades include player turn actions, aftermath/recap handling, encounter search/sort, and catch-up views.
  • Several important security and reliability fixes were shipped alongside new features.

✨ New Features & Improvements

  • Encounters: added death saves as a logged turn action, combat log provenance, player end turn/ready-delay/reactions MVP, manual and compendium combatant actions, aftermath workflow for loot/XP/recap, list filtering/search/sorting, and SSE stale-state indicators with guarded actions.
  • VTT: added token scaling from grid footprints, hex snapping distance/footprints, fog editor undo/erase and region editing, keyboard operability for map elements, and a battle map render on Player Display cast view.
  • Web/Admin/Search: added a “since you were last here” catch-up view, paginated audit log UI, dry-run bulk roster import, full session recap indexing, and embedded inventory on character sheets.
  • Comments/Members/Entities: added entity comments across supported surfaces, discoverable membership and player data rights, and portrait URL support for NPCs, factions, and locations.
  • AI: added confirm-policy controls for destructive live-play tools and docked AI driver controls in the encounter page.

🐛 Bug Fixes & Maintenance

  • Fixed AI driver behavior on provider failure and stop events, and blocked campaign-level provider SSRF.
  • Improved web stability with bounded read timeouts, stale cache fallback, safer handling of invalid shared recap links, and prevention of the dashboard getting stuck on skeletons.
  • Tightened accessibility with better contrast tokens, normalized heading hierarchy, accessible loading states, and improved tab/label handling.
  • Fixed import/reference stability, notification history pagination, concurrent catch-up races, and atomic backup restore with rollback.
  • Added maintenance and test updates, including e2e stability fixes, OIDC coverage reporting, and documentation cleanup.

Full Changelog

What's Changed

Full Changelog: v0.15.6...v0.15.7


Container image

docker pull ghcr.io/awsomefox/campfire:0.15.7

v0.15.6

Choose a tag to compare

@AwsomeFox AwsomeFox released this 25 Jul 13:24
3d26e70

🚀 Key Highlights

  • This release focuses on AI-driven campaign management, with new individual player modeling for the AI DM, proactive AI suggestions, and persistent campaign narration language.
  • It also expands encounter and combat tools with AoE damage application, condition tracking, resource handling, battle map controls, and better combat turn behavior.
  • Several major workflow and UX upgrades landed across storylines, character creation, navigation, handouts, notes, and notifications.

✨ New Features & Improvements

  • AI DM enhancements: individual player modeling, proactive suggestions, and saved narration language.
  • Storylines: markdown authoring for arcs/beats, reordering in the UI, and editable branch labels/target beats after creation.
  • Encounters: legendary/lair action tracking, inline spell slots and character resources, AoE damage to all tokens, and battle map zoom/pan/fit/reset controls.
  • Characters: guided creation, draft incomplete sheets, and separate Play vs. Build/Profile tabs.
  • Navigation & UI: reorganized campaign nav into task groups, standardized breadcrumbs/return links, improved icon picker UX, and updated visual identity.
  • Content and collaboration: paginated comments, paginated session history, better notification history, and full-size handout preview/download/print/PDF support.
  • Preferences & localization: 12h/24h time format preference plus RTL direction and bidi isolation support.

🐛 Bug Fixes & Maintenance

  • Fixed several data integrity and import/export issues, including preserving schedules, attendance, note anchors, and completing campaign clone previews.
  • Improved combat flow by skipping dead/downed combatants, scrolling active combatants into view, and fixing turn advancement behavior.
  • Fixed storyline and quest issues, including AI draft beats creating the wrong content type and restoring AI quest drafting from the Quests list.
  • Added visibility, audit, and approval safeguards for notes, maps, proposals, secret reveals, and timeline deletions.
  • Addressed pagination, loading, and performance work across history paths, timeline, comments, sessions, and encounter polling.
  • Included smaller maintenance updates such as localization completeness fixes, MCP tool parity/tests, request correlation IDs, and a PF1e importer default URL fix.

Full Changelog

What's Changed

Full Changelog: v0.15.5...v0.15.6


Container image

docker pull ghcr.io/awsomefox/campfire:0.1...
Read more