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:
2026-06-06 12:41:52 +02:00
co-authored by Claude Opus 4.8
parent 83bb18b385
commit aefbb4bd88
18 changed files with 314 additions and 223 deletions
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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.
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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