Repository navigation
v0.15.10
🚀 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