Missionself-documenting-repo-01M0287X audited the operator's local
agent-memory file (~/.claude/projects/.../memory/MEMORY.md) — a personal,
gitignored scratchpad of hard-won operational lessons — against the repo's
own doctrine, docs, tests, and gates. The thesis: a lesson an agent had to
learn the hard way and write down by hand is either (a) something the repo
should say for itself (a doc, a gate remedy, a runbook) so the next agent
never has to relearn it, (b) a genuine behavior bug that belongs in the
tracker, or (c) already obsolete because the mechanism it describes has
since changed or been retired.
This manifest is the committed authority for that migration. The
working file the audit was actually run against
(work/memory-gap-filler-analysis.md) is gitignored and does not exist in
this worktree or in CI — a committed test cannot read it. So the six
gap-filler clusters (G1–G6) below, and their resolutions, are the
result, not a pointer to one. The companion test,
tests/docs/test_migration_manifest_complete.py,
parses these tables directly and enforces that every row is resolved and
every home: path exists on disk — it is the enforcement half of this
audit, not just a report of it.
Out of scope (C-004): deleting the resolved entries from the operator's
live MEMORY.md file is a manual, per-operator checklist tracked on
#3448. This mission
produces the resolution map; the operator applies it to their own memory
file at their own pace.
Resolution vocabulary
Each row below carries exactly one resolution token:
Token
Meaning
home:
The lesson now lives at this repo path — a doc, gate remedy, or runbook that says it for itself.
issue:
The lesson describes a genuine behavior bug, filed and tracked at this issue.
retired
The mechanism the memory entry described no longer exists or has been superseded; the memory entry is stale.
not-remedy-bearing
Classified and kept as-is: the referenced gate is real but narrowly scoped and does not carry an enrichable remedy string.
G1 — Gate-fix guidance (WP01, commit family 7488ab819)
retired — superseded by #2671's auto-cover shard registry (tests/_arch_shard_map.py, default_fallback=True); no repo home remains for the manual-registration lesson.
retired — the "two baselines" (gc2b/gc3b) model lived in tests/architectural/test_gate_coverage.py, deleted whole in the test-sanitation pass (177e06269, #3285) along with its baseline file (_gate_coverage_baseline.json) and CLI. The surviving oracle, tests/architectural/test_ci_collection_completeness.py, is explicitly baseline-free by design ("Sanitation removes the legacy orphan-file baseline and its update/check CLI rather than leaving a mutable, unenforced second authority beside this oracle"). The memory describes a mechanism the repo no longer has.
retired — grepped src/, tests/, docs/, packs/: zero hits for mission-gate-artifact or mission_gate_artifact. No such gate exists; the memory names a phantom. The real requirement it was trying to describe — that implement needs an analysis-report artifact — is enforced by expected-artifacts.yaml: packs/built-in/missions/software-dev/expected-artifacts.yaml declares evidence.analysis-report (analysis-report.md) as blocking: true at the implement step. Neither accept nor done carries a comparable blocking-artifact declaration in that manifest, and no contracts/ artifact requirement was located — the memory over-stated the gate surface.
home:docs/development/index.md — the page-inventory rollup is refreshed via scripts/docs/inventory_lockfile.py --write <path> (a path-valued flag), and the retrieval index via scripts/docs/docs_index.py --write (a bare boolean flag) — two separate scripts with two different --write shapes, which is exactly the confusion the original memory entry was guarding against. Also noted: inventory_lockfile.py --write's own help string ("Optional path to write the regenerated lockfile (never docs/)") is stale — its own DEFAULT_INVENTORY_PATH is docs/development/3-2-page-inventory.yaml, i.e. under docs/. Left as a campsite nit, not fixed in this pass.
issue:#3447 (deferred, tracked as a follow-up to automate the 12-agent-copy + codex/vibe snapshot regen), plus a pointer from docs/development/index.md.
home:docs/development/how-to/create-a-doctrine-artifact.md — corrected this run: opposed_by is itself retired (legacy-pack-only, migrated via spec-kitty migrate rewrite-opposed-by); the canonical relation pair is in_tension_with / reconciles_tension. The original memory entry's ticket numbers (#2537/#2538) predate that migration.
Corrections surfaced this run
Running this audit against the live repo (rather than trusting the memory
entries' own text) surfaced four cases where the memory was itself stale —
which is the mission's thesis proven in miniature:
reference_docs_inventory_freshen understated that inventory_lockfile.py
and docs_index.py are two separate scripts with two different --write
argument shapes (path-valued vs. boolean flag).
reference_at_tension_with_ticket pointed at opposed_by, which has
since been retired in favor of in_tension_with / reconciles_tension.
reference_mission_gate_artifacts named a gate (mission-gate-artifact)
that does not exist anywhere in src/, tests/, docs/, or packs/ —
a phantom. The real, narrower requirement it gestured at (analysis-report
required at implement) is enforced by expected-artifacts.yaml, not by
a gate of that name.
reference_gate_coverage_two_baselines described a two-baseline
(gc2b/gc3b) gate-coverage model that was deleted wholesale in the
#3285 test-sanitation pass; its replacement,
test_ci_collection_completeness.py, is deliberately baseline-free.
Each of these is recorded as retired or corrected above rather than
carried forward silently.