# Sprint 38: Depth — CI Tasks **Goal:** Map the generation pipeline from planetary heightmaps to walkable tile environments, formally park character/apartment work behind the full cascade, and close test/infra debt from Sprint 37. **Branch:** `sprint-38/ci` **Agents:** Justine (build/deploy) ## New Tickets | # | Title | Priority | Blocked by | |---|-------|----------|------------| | #887 | Add decisions-orphan-tickets CLI | low | — | | #888 | Switch meta.schema_version to monotonic semver | low | — | Use `tooling/db/ticket show ` for full details. ## Notes **#887 — decisions-orphan-tickets CLI** - `tickets.decision_ref` is free-text — a typo'd D-ID or renumbered decision silently orphans tickets. - Build a CLI tool that scans all tickets with a `decision_ref`, validates each against `decisions/*.md`, and reports orphans. - Output: list of tickets pointing at nonexistent or mismatched D-IDs. **#888 — meta.schema_version to monotonic semver** - Current `meta.schema_version` stores a SHA-1 of `server/data/systems-schema.sql`. Two SHAs can't be ordered — you can't tell which is newer. - Switch to a monotonic semver string (e.g. `1.0.0`, `1.1.0`). This enables future savegame migration lineage: a save file can record its schema version and determine what migrations to apply. - Update `import_economics.py` stamp logic and `tooling/check-systems-db-stamp` validation. ## Dependency Chain ``` #887 (orphan-tickets CLI) → standalone #888 (schema_version semver) → standalone ``` ## PR Workflow When ready to submit, create a PR with `tea` CLI: ```bash tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "chore(ci): sprint 38 ci" --description "body" --base main --head sprint-38/ci ```