Tickets: - ci (7): #854, #855, #856, #857, #858, #859, #723 - server (9): #853, #860, #862, #863, #874, #877, #878, #789, #847 - client (6): #866, #869, #870, #872, #873, #875 - copy (3): #861, #865, #876 Themes: asset pipeline discipline, PROTOCOL_VERSION removal (D-192), D-167 HeritageRoot purge, D-032 smuggler/detective enum audit, New Game regression fix + merge-path test coverage, copy wiki residue purge, bookmark save-state, generator quality patches. Debt surfaced from Q/D-record sweep: Q-095 Commission name, D-167 and D-032 residue, plus spring-cleaning pulls from stale backlog (#789, #847, #723, #862). #868 cancelled (superseded by #874 + #875).
5.2 KiB
Sprint 37: Sweep — CI Tasks
Goal: Spring-clean accumulated debt: asset pipeline discipline, PROTOCOL_VERSION removal, D-167/D-032 dead-code purge, New Game regression fix, copy wiki residue, bookmark save-state, and generator quality patches.
Branch: sprint-37/ci
Agents: Gestalt (systems), Hoshe (QA)
New Tickets
| # | Title | Priority | Blocked by |
|---|---|---|---|
| #854 | Generator-driven asset pipeline — regeneration discipline and versioning (epic) | high | — |
| #855 | systems.db regeneration with versioning awareness | high | #854 |
| #856 | Stamp systems.db with generator metadata (meta table) | high | #855 |
| #857 | Pre-push git hook for systems.db consistency | high | #856 |
| #858 | Extend /pr-push with rebase + regen + stage | high | #856 |
| #859 | Document the source-canonical rule (.claude/rules/asset-pipeline.md + DEVOPS) | medium | #856 |
| #723 | Add decision-to-ticket coverage report | medium | — |
Use tooling/db/ticket show <id> for full details.
Key Decisions
No domain decisions gate this sprint's work. The asset pipeline epic creates new process conventions documented in .claude/rules/asset-pipeline.md (deliverable of #859).
Notes
#854 — Generator-driven asset pipeline (epic wrapper)
- This epic establishes the mental model:
server/data/systems.dbis a read-only canonical snapshot, deterministically produced from source files (markers.json, *.toml, generator code). Direct DB edits are forbidden except when mirrored back to source. - Children: #855 → #856 → #857 and #858 (parallel after #856) → #859 (docs, after #856).
- Driver: Sprint 36 had a binary conflict risk between two branches both committing systems.db changes. This epic prevents the class of problem going forward and establishes the versioning primitives the future savegame system will need.
- #854 itself has no code deliverable — it is the parent epic for tracking purposes. Work happens in children.
#855 — systems.db regeneration with versioning awareness
- Every generator (
import_economics.py,generate_atlas.py,generate_brands) must be updated to accept a--stampflag (or equivalent) that writes metadata to the DB after generation. - The regeneration step should be idempotent: running it twice on the same sources produces identical output.
- Unblocks #856, #857, #858, #859.
#856 — Stamp systems.db with generator metadata (meta table)
- Add a
metatable todb/schema.sql: columnsschema_version,generator_sha,generated_at. - Each generator writes its own row on completion.
- The stamp is what lets a future savegame DB record which canonical snapshot it derives from (migration lineage).
- Blocked by #855 (generators must be updated before stamping is meaningful).
#857 — Pre-push git hook for systems.db consistency
- Hook fires on
git pushand verifies: ifsystems.dbis staged, itsmeta.generator_shamatches the current HEAD SHA of the generator source files. - If not, rejects the push with a message: "systems.db is stale — run
make regen-dbbefore pushing." - Install via
make install-hooks. Document in #859.
#858 — Extend /pr-push with rebase + regen + stage
- The
/pr-pushskill runs before PR creation. Extend it to: (1) rebase on main, (2) runmake regen-dbif any generator source was modified in the branch, (3) stage the updatedsystems.db. - This prevents the class of binary conflict where two branches both modify generator sources and commit separate DB snapshots.
- Parallel to #857 after #856 is done.
#859 — Document the source-canonical rule
- Deliverables:
.claude/rules/asset-pipeline.md— canonical rules file covering: what systems.db is, how to make a DB change, why direct edits are forbidden, the meta table stamp, the pre-push hook, why /pr-push regenerates.CLAUDE.mdhook — one-line reference under a new### Asset pipelinesubsection pointing at the rules file.docs/DEVOPS.md— short section on the pipeline: meta table,make install-hooks, regenerate-before-push workflow.
- Blocked by #856 (meta table must exist before documenting it).
#723 — Decision-to-ticket coverage report
- No schema change needed —
tickets.decision_refalready exists. - Deliverables:
make decisions-coverage— shows each D-record with its implementing ticket(s).make decisions-orphan— shows D-records with no implementing tickets (verify existing target works).tooling/db/decision show D-159— includes linked ticket IDs in output.
- The reverse link (decision → tickets) is a
SELECTquery, not a new column. Avoids fragile two-way sync. - Standalone, parallel to the asset pipeline chain.
Dependency Chain
#854 (epic) → no code
#855 (regen awareness) → #856 (meta table) → #857 (pre-push hook)
→ #858 (pr-push extension)
→ #859 (documentation)
#723 → standalone, parallel to all above
PR Workflow
tea pr create --repo jpmschweitzer/settled-reach --login schweitz \
--title "ci: sprint 37 — asset pipeline discipline, decision coverage report" \
--description "body" \
--base main --head sprint-37/ci