chore(release): v3.9.1 — Game-Aware Systems follow-ups (#213, #214) #215

Merged
claude-bot merged 2 commits from fix/v3.9.1-game-aware-followups into main 2026-07-19 01:00:02 +00:00
Contributor

Quick patch closing the two v3.9.0 follow-ups flagged during the pillar.

Closes #213. Closes #214.

What

  • #213 — Inline stat editing in draft review. patch_draft/LoreDraftPatch accept an edited current_stats envelope for generate_statblock/convert_stats drafts, validated against the campaign's active schema (_validate_staged_statsValueError→400); ignored for prose-only drafts. WikiDraftReview renders the proposed stat block as an editable, schema-typed form (reusing #140's FieldInput, now exported) with debounced autosave via patchLoreDraft, preserving the convert confidence · source annotations. A GM can now fix a mapped/generated value before approving instead of only approve-as-is / re-run.
  • #214stats through export/import. Campaign export includes the lore-entry stats envelope; import restores it verbatim (self-describing system/schema_version — a destination mismatch is handled by #140's dormant-state UI, not rejected). Fixes silent stat-block loss on export→re-import. Old bundles without stats import cleanly (stats=None); no export bundle-version bump (additive optional key).

Verification (Docker) — all CI gates pre-run this time

  • Backend: 659 tests pass (+5); ruff check + ruff format --check clean (ruff 0.4.4).
  • Frontend: 340 tests pass (+2; the new editable-form matchers confirmed) + production build succeeds; eslint 0 errors.
  • No migration; no bot API change — BOT_CONTRACT_VERSION stays 1.

Bumps APP_VERSION to 3.9.1. Merging cuts v3.9.1.

🤖 Generated with Claude Code

Quick patch closing the two v3.9.0 follow-ups flagged during the pillar. Closes #213. Closes #214. ## What - **#213 — Inline stat editing in draft review.** `patch_draft`/`LoreDraftPatch` accept an edited `current_stats` envelope for `generate_statblock`/`convert_stats` drafts, validated against the campaign's active schema (`_validate_staged_stats` → `ValueError`→400); ignored for prose-only drafts. `WikiDraftReview` renders the proposed stat block as an editable, schema-typed form (reusing #140's `FieldInput`, now exported) with debounced autosave via `patchLoreDraft`, preserving the convert `confidence · source` annotations. A GM can now fix a mapped/generated value before approving instead of only approve-as-is / re-run. - **#214 — `stats` through export/import.** Campaign export includes the lore-entry `stats` envelope; import restores it **verbatim** (self-describing `system`/`schema_version` — a destination mismatch is handled by #140's dormant-state UI, not rejected). Fixes silent stat-block loss on export→re-import. Old bundles without `stats` import cleanly (`stats=None`); **no export bundle-version bump** (additive optional key). ## Verification (Docker) — all CI gates pre-run this time - **Backend: 659 tests pass** (+5); `ruff check` + `ruff format --check` clean (ruff 0.4.4). - **Frontend: 340 tests pass** (+2; the new editable-form matchers confirmed) + production build succeeds; `eslint` 0 errors. - No migration; **no bot API change — `BOT_CONTRACT_VERSION` stays 1.** Bumps `APP_VERSION` to **3.9.1**. Merging cuts v3.9.1. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
#213: patch_draft / LoreDraftPatch accept an edited current_stats envelope for
generate_statblock / convert_stats drafts, validated against the campaign's
active schema (_validate_staged_stats, ValueError -> 400); ignored for prose-only
drafts. WikiDraftReview renders the proposed stat block as an editable,
schema-typed form (reusing #140's FieldInput) with debounced autosave via
patchLoreDraft, preserving the convert confidence/source annotations.

#214: campaign export includes the lore-entry stats envelope, and import restores
it verbatim (self-describing system/schema_version; a destination-system mismatch
is handled by the dormant-state UI). Old bundles without stats import cleanly
(stats=None). No export bundle-version bump (additive optional key).

No migration; no bot API change (BOT_CONTRACT_VERSION stays 1).

Verified in Docker: backend 659 tests, frontend 340 tests + build; ruff
check/format + eslint clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(release): v3.9.1 — Game-Aware Systems follow-ups
All checks were successful
CI / Docker image build (pull_request) Successful in 33s
CI / Backend lint (ruff) (pull_request) Successful in 37s
CI / Frontend tests, audit, and build (pull_request) Successful in 2m38s
CI / Bot tests and audit (pull_request) Successful in 3m37s
CI / Backend migration, tests, and audit (pull_request) Successful in 5m31s
33bcfe1b85
Bump APP_VERSION to 3.9.1 and add the v3.9.1 changelog: inline stat editing in
draft review (#213) and stats through campaign export/import (#214).
BOT_CONTRACT_VERSION stays 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-07-19 00:54:39 +00:00
claude-bot deleted branch fix/v3.9.1-game-aware-followups 2026-07-19 01:00:03 +00:00
Sign in to join this conversation.
No description provided.