docs(meta): switch ticket-reference convention #N -> T-N (pql migration phase 3)
Adopts the T-NNN convention (T-N == old #N == pql ticket id) across the active
operational layer: governance/ decision records, .claude/{rules,agents,skills},
CLAUDE.md, DECISIONS.md. 283 references rewritten.
Guarded against false positives (17 correctly skipped, each logged):
- PR references kept (PR #136/#138/... — PRs are a separate #-namespace)
- non-ticket numbers kept (#4122; the "#1 process failure" idiom; "task #3")
- only #N where N is an actual ticket id is rewritten; the 1-4 digit word-bounded
match also excludes 6-digit hex colours in the visual decision records
Git history is NOT rewritten (a commit's #N already equals T-N numerically), and
historical archives (docs/sprints, docs/discussions, docs/workshops) keep their
point-in-time #N. The /pr-process ticket-ID extraction logic moves to T-NNN in the
Phase 4 consumer cutover.
Verified: pql decisions validate ok; sync 357 records / 1057 refs / broken 0 (the
prose edits don't affect decision parsing or the tickets.decision_ref linkage).
Transform committed at tooling/pql-migrate/retag_ticket_refs.py.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,7 @@ You are the CLERK, the institutional guardrail on a game development team buildi
|
||||
|
||||
## Your personality
|
||||
|
||||
Precise, dispassionate, thorough. You are not a reviewer — you don't judge code quality. You are a consistency checker. You say things like "File X contradicts D-142" and "Ticket #890 describes outcome Y but implementation does Z." You do not have opinions about design. You have facts about what was decided and whether the code matches.
|
||||
Precise, dispassionate, thorough. You are not a reviewer — you don't judge code quality. You are a consistency checker. You say things like "File X contradicts D-142" and "Ticket T-890 describes outcome Y but implementation does Z." You do not have opinions about design. You have facts about what was decided and whether the code matches.
|
||||
|
||||
## Your role
|
||||
|
||||
|
||||
@@ -37,14 +37,14 @@ itself didn't change.
|
||||
|
||||
---
|
||||
|
||||
## The meta table stamp (#855, #856)
|
||||
## The meta table stamp (T-855, T-856)
|
||||
|
||||
After every successful non-dry-run, each generator writes a row to the `meta` table:
|
||||
|
||||
```sql
|
||||
CREATE TABLE meta (
|
||||
generator_name TEXT PRIMARY KEY, -- 'import_economics' | 'generate_atlas'
|
||||
schema_version TEXT NOT NULL, -- monotonic semver string (e.g. "1.0.0") — see #888
|
||||
schema_version TEXT NOT NULL, -- monotonic semver string (e.g. "1.0.0") — see T-888
|
||||
schema_sha TEXT, -- SHA-1 of server/data/systems-schema.sql (tamper detection)
|
||||
generator_sha TEXT NOT NULL, -- SHA-1 of the generator source file(s)
|
||||
generated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
@@ -56,7 +56,7 @@ It is defined as the `SCHEMA_VERSION` constant in `tooling/schema_version.py`
|
||||
and must be bumped manually whenever the schema changes in a backwards-incompatible way.
|
||||
Unlike a SHA-1 hash, semver strings are orderable — this enables savegame migration
|
||||
lineage in Phase 5+: a save file can record which schema version it derives from and
|
||||
determine exactly which migrations to apply (#888). The old SHA-1 is preserved in
|
||||
determine exactly which migrations to apply (T-888). The old SHA-1 is preserved in
|
||||
`schema_sha` for tamper detection alongside the semver.
|
||||
|
||||
The `generator_sha` is the SHA-1 of the concatenated bytes of the generator's
|
||||
@@ -96,7 +96,7 @@ fine: the freshness guarantee comes from the stamp, not from bytewise DB equalit
|
||||
|
||||
---
|
||||
|
||||
## Pre-push hook (#857)
|
||||
## Pre-push hook (T-857)
|
||||
|
||||
`.config/hooks/pre-push` (installed via `make install-hooks`) checks that whenever
|
||||
`server/data/systems.db` is in the push, its meta stamp matches the current generator
|
||||
@@ -119,7 +119,7 @@ the `/pr-push` skill's source-file watch list.
|
||||
|
||||
---
|
||||
|
||||
## /pr-push integration (#858)
|
||||
## /pr-push integration (T-858)
|
||||
|
||||
The `/pr-push` skill checks whether any generator source files are modified on the
|
||||
branch. If they are, it automatically runs `make regen-db` and stages the updated
|
||||
@@ -177,7 +177,7 @@ no hand-edit path that survives regen.
|
||||
|
||||
## Savegame migration lineage (Phase 5+)
|
||||
|
||||
`meta.schema_version` now stores a monotonic semver string (#888). When the savegame
|
||||
`meta.schema_version` now stores a monotonic semver string (T-888). When the savegame
|
||||
system is built (Phase 5+), a save file records its `schema_version` string; the
|
||||
loader can determine which migrations to apply by comparing that version to the
|
||||
current one. `meta.schema_sha` retains the old SHA-1 for tamper detection.
|
||||
|
||||
@@ -214,7 +214,7 @@ git merge origin/main --no-edit
|
||||
If merge conflicts, **stop and report** — let the user resolve.
|
||||
If clean, continue.
|
||||
|
||||
### 4a. Regen systems.db if generator sources or data changed (#858)
|
||||
### 4a. Regen systems.db if generator sources or data changed (T-858)
|
||||
|
||||
Check whether any file in the **source-file watch list** was modified on this branch
|
||||
versus `origin/main`. This list covers generator code AND the data files that feed them.
|
||||
|
||||
@@ -62,7 +62,7 @@ unchecked, include a top-level note:
|
||||
|
||||
> **Merge-path smoke not performed.** PR test plan has unchecked manual
|
||||
> smoke box(es): [list]. A reviewer or the team must run the smoke before
|
||||
> merge approval. Sprint 36 bug #872 (New Game hangs on 'connecting')
|
||||
> merge approval. Sprint 36 bug T-872 (New Game hangs on 'connecting')
|
||||
> landed exactly here — do not skip.
|
||||
|
||||
Unchecked merge-path smoke boxes downgrade the verdict from APPROVED to
|
||||
|
||||
Reference in New Issue
Block a user