Lane 11 PR 8: content packs can carry sheet definitions (pack format v2) (#737) #977

Merged
claude-bot merged 7 commits from build/lane11-8-packs into main 2026-09-30 20:11:05 +00:00
Collaborator

Part of #737 (lane 11, character sheets), PR 8 of the build contract (docs/design/lane11-build-contract.md). Builds on PR 7 (#974, merged).

What's new

  • Pack format v2: a .qbpack manifest can list sheet_definitions (sheets/*.json, plus sheets/fixtures/*.json).
  • Checked on import: each definition in an administrator's pack is validated (unknown names come back with a did-you-mean) and its fixtures are run. It's activated only if it passes. A broken definition is refused while the pack's content still imports. The per-definition report comes back in the import response.
  • Who may bring one (D251): administrators' (instance) packs only. A GM's campaign pack keeps its content, and its definitions are ignored with a note.
  • Lifecycle: disabling or removing a pack deprecates its definitions, and sheets on them stay readable. Export writes definitions back.
  • Route #21: GET /api/admin/sheet-definitions lists every definition.
  • Migration 11c3d4e5f6a7: game_systems.created_by_pack_id, so a pack's system.json may update a game system that same pack introduced. It follows 11b2c3d4e5f6 (PR 7), and the one-head pin moves with it.

Checks

  • After merging main (with PR 7): tests/sheets, the content-pack import and URL-fetch suites, reference search and task-session hygiene: 736 passed.
  • The full backend suite (6631 passed) also ran on PR 12's branch, which contains this one.
  • Ruff 0.4.4 check and format are clean.
  • Changelog: changelog.d/737-lane11-pack-definitions.added.md.

🤖 Generated with Claude Code

Part of #737 (lane 11, character sheets), PR 8 of the build contract (`docs/design/lane11-build-contract.md`). Builds on PR 7 (#974, merged). **What's new** - **Pack format v2:** a `.qbpack` manifest can list `sheet_definitions` (`sheets/*.json`, plus `sheets/fixtures/*.json`). - **Checked on import:** each definition in an administrator's pack is validated (unknown names come back with a did-you-mean) and its fixtures are run. It's activated only if it passes. A broken definition is refused while the pack's content still imports. The per-definition report comes back in the import response. - **Who may bring one (D251):** administrators' (instance) packs only. A GM's campaign pack keeps its content, and its definitions are ignored with a note. - **Lifecycle:** disabling or removing a pack deprecates its definitions, and sheets on them stay readable. Export writes definitions back. - **Route #21:** `GET /api/admin/sheet-definitions` lists every definition. - **Migration `11c3d4e5f6a7`:** `game_systems.created_by_pack_id`, so a pack's `system.json` may update a game system that same pack introduced. It follows `11b2c3d4e5f6` (PR 7), and the one-head pin moves with it. **Checks** - After merging main (with PR 7): `tests/sheets`, the content-pack import and URL-fetch suites, reference search and task-session hygiene: 736 passed. - The full backend suite (6631 passed) also ran on PR 12's branch, which contains this one. - Ruff 0.4.4 check and format are clean. - Changelog: `changelog.d/737-lane11-pack-definitions.added.md`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	webapp/backend/app/reference/import_service.py
Merge remote-tracking branch 'origin/main' into build/lane11-8-packs
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 2m18s
CI / Backend lint (ruff) (pull_request) Successful in 1m10s
CI / Bot/backend version sync (pull_request) Successful in 59s
CI / Bot tests and audit (pull_request) Successful in 4m19s
CI / Docker image build (pull_request) Successful in 46s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Does this change touch the recording path? (pull_request) Successful in 37s
CI / Feedback site tests (pull_request) Successful in 1m53s
CI / Frontend (shard 2/2) (pull_request) Successful in 6m49s
CI / End-to-end journeys (phone) (pull_request) Successful in 7m35s
CI / End-to-end journeys (desktop) (pull_request) Successful in 7m48s
CI / Backend migration, tests, and audit (pull_request) Successful in 17m47s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 17m2s
CI / Frontend (shard 1/2) (pull_request) Successful in 19m20s
5ddccef03a
Merge remote-tracking branch 'origin/main' into build/lane11-8-packs
All checks were successful
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m12s
CI / Backend lint (ruff) (pull_request) Successful in 34s
CI / Feedback site tests (pull_request) Successful in 51s
CI / Bot/backend version sync (pull_request) Successful in 28s
CI / Docker image build (pull_request) Successful in 23s
CI / Does this change touch the recording path? (pull_request) Successful in 37s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Bot tests and audit (pull_request) Successful in 3m54s
CI / Frontend (shard 2/2) (pull_request) Successful in 6m50s
CI / Frontend (shard 1/2) (pull_request) Successful in 8m47s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 7m34s
CI / End-to-end journeys (phone) (pull_request) Successful in 7m13s
CI / End-to-end journeys (desktop) (pull_request) Successful in 7m56s
CI / Backend migration, tests, and audit (pull_request) Successful in 18m25s
e60bdc8bb1
Sign in to join this conversation.
No description provided.