@v0 is both the production pointer and the E2E canary, so a release cannot be smoke-tested before every consumer gets it — and the release checklist requires a human to move two floating tags by hand. copilot-instructions.md records that @v0 went stale for nine releases once.
PR-body metadata carries a schemaVersion that is write-only: the parser has no version handling, and every parse failure is silent. PRs opened by older versions stay open and must keep parsing forever.
Adds release.yml, a v0-next staging tag, a v0 assertion, an action.yml-defaults parity test, marker constants, and normalizeDocsFolder().
Findings covered
10 audit findings land here. F<n> are stable references into the audit; rank is the report ordering (1 = act first of 139).
Plan
Estimate 2-3 days · Wave 2, step T6 · strict dependency order within the wave
release.yml, a v0-next staging tag, the v0 assertion, an action.yml-defaults parity test, marker constants, normalizeDocsFolder() in src/contracts.ts, review reads target-language.
From the technical-debt audit of 2026-07-23 (141 candidates adversarially verified, re-validated against v0.23.0, 139 live). Effort is stopgap / full — t≈0.5h, s≈3.5h, m≈11h, L≈28h. Items marked ½ were partially addressed by v0.22.0/v0.23.0.
@v0is both the production pointer and the E2E canary, so a release cannot be smoke-tested before every consumer gets it — and the release checklist requires a human to move two floating tags by hand.copilot-instructions.mdrecords that@v0went stale for nine releases once.PR-body metadata carries a
schemaVersionthat is write-only: the parser has no version handling, and every parse failure is silent. PRs opened by older versions stay open and must keep parsing forever.Adds
release.yml, av0-nextstaging tag, av0assertion, anaction.yml-defaults parity test, marker constants, andnormalizeDocsFolder().Findings covered
10 audit findings land here.
F<n>are stable references into the audit; rank is the report ordering (1 = act first of 139).F93· rank 8 · low · t/m —docs-folderjoin emitslectures//pv.md; rebase's overlap check finds nothing and silently declines to rebase a conflicting PRF51½ · rank 80 · med · s/s —createTranslationPR's ~130-line API body has no unit test despite being trivially fakeableF94· rank 91 · med · s/s — Nothing couplesaction.yml's declared defaults toinputs.ts; v0.22.0 added a seventh duplicated pairF124½ · rank 95 · med · s/s — Nothing mechanically verifies thev0tag moves on release — and the whole estate hangs off itF138· rank 96 · med · s/s —@v0is both the production pointer and the only thing the E2E harness can exerciseF30· rank 97 · low · s/s — Releasing is a six-step hand ritual, two force-moved tags, the version hand-copied into four placesF125· rank 98 · med · s/s — Deterministic gates are unverified instruments:validateMySThas no test at all, and its docs describe behaviour it lacksF6½ · rank 120 · low · s/s — Review mode ignores thetarget-languageinput it documents as required, deriving language from a repo-name regexF90½ · rank 121 · low · s/s — The same: an explicitly set value is silently discardedF127½ · rank 122 · low · s/s — The same; the silent-failure half is fixed (acore.warningnow fires) — the remnant is docs and the scaffolded workflowPlan
Estimate 2-3 days · Wave 2, step T6 · strict dependency order within the wave
release.yml, av0-nextstaging tag, thev0assertion, anaction.yml-defaults parity test, marker constants,normalizeDocsFolder()insrc/contracts.ts, review readstarget-language.From the technical-debt audit of 2026-07-23 (141 candidates adversarially verified, re-validated against v0.23.0, 139 live). Effort is stopgap / full — t≈0.5h, s≈3.5h, m≈11h, L≈28h. Items marked ½ were partially addressed by v0.22.0/v0.23.0.