Skip to content

Commit c4ad0c2

Browse files
committed
fix(spec): name a resolving record for two citations the board no longer serves
`check:issue-citations` went red at 0a1bac8 with eight dangling sites across five files: issue 14919 at six of them and issue 8715 at two. Measured cause, from the gate's own `--probe-cause`: deleted, all eight — not transferred, not mistyped. Probed with a lit control beside each, since both dead numbers sit next to live ones: 8714 404 / 8715 404 / 8716 200, and 14918 404 / 14919 404 / 14920 200. Scattered pairs, not a contiguous band, which is what deletion-by-author looks like. Both were live references when the prose was written. ⛔ No number is guessed and none is swapped for a plausible neighbour. Each site keeps its number in prose and now says it no longer resolves, then names a record that DOES — verified by probe, not inferred: - issue 14919 -> PR #15930, `feat(core)!: retire PluginSecurityScanner`, merged 2026-09-05, whose body opens with a closing line naming that very issue number. Probe: 200. - issue 8715 -> #11825, the half of the pair this tree cites together that still resolves, and the same whole-def disposition shape. Probe: 200. The `#` sigil is what the gate judges (`CITATION_RE`); a bare number in prose is not a citation, so the number survives verbatim and the reference stops dangling. `migrations/registry.ts` is GENERATED and was NOT hand-edited: its three copies come from the two entry files, re-emitted by `gen:migration-registry`. The module docblock feeds a reference page, so `check:generated --fix` regenerated `content/docs/references/kernel/plugin-security-advanced.mdx` through `gen:docs`. ⛔ Nothing else moves: no schema, no key, no registry entry, no changeset level, no authorable row. Comments and the prose they generate, only. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UDXER3sdqfeVYpEWZs5mZx
1 parent 0a1bac8 commit c4ad0c2

5 files changed

Lines changed: 24 additions & 11 deletions

File tree

‎content/docs/references/kernel/plugin-security-advanced.mdx‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ Features:
2020
`KernelSecurityVulnerability`, `PluginSecurityManifest.scanResults` and its
2121
sibling list `.vulnerabilities` — was retired under ADR-0049 enforce-or-remove
2222
(#15932), after the runtime scanner that was its last type-only importer went
23-
the same way (#14919). Nothing on this platform scans a plugin.
23+
the same way. That scanner retirement was issue 14919 — a number DELETED from
24+
the board and no longer resolving; its live record is PR #15930, which landed
25+
the removal. Nothing on this platform scans a plugin.
2426

2527
<Callout type="info">
2628
**Source:** `packages/spec/src/kernel/plugin-security-advanced.zod.ts`

‎packages/spec/src/kernel/plugin-security-advanced.zod.ts‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ import { EvaluatedExpressionInputSchema } from '../shared/expression.zod';
1919
* `KernelSecurityVulnerability`, `PluginSecurityManifest.scanResults` and its
2020
* sibling list `.vulnerabilities` — was retired under ADR-0049 enforce-or-remove
2121
* (#15932), after the runtime scanner that was its last type-only importer went
22-
* the same way (#14919). Nothing on this platform scans a plugin.
22+
* the same way. That scanner retirement was issue 14919 — a number DELETED from
23+
* the board and no longer resolving; its live record is PR #15930, which landed
24+
* the removal. Nothing on this platform scans a plugin.
2325
*/
2426

2527
/**
@@ -588,7 +590,8 @@ export const PluginSecurityManifestSchema = lazySchema(() => z.object({
588590
* Tombstone: the scan-result surface is RETIRED (#15932, ADR-0049
589591
* enforce-or-remove). `KernelSecurityScanResult` and
590592
* `KernelSecurityVulnerability` left this build with it — the last importer
591-
* of either type went with `PluginSecurityScanner` (#14919). Not a bare
593+
* of either type went with `PluginSecurityScanner` (issue 14919, a number
594+
* deleted from the board; live record: PR #15930). Not a bare
592595
* deletion: this shape is not `.strict()`, so zod would strip an authored
593596
* key in silence (ADR-0104).
594597
*/

‎packages/spec/src/migrations/entries/retired-defs/18.kernel__KernelSecurityScanResult.ts‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,18 @@
77
// compliance and a six-number summary — and no layer ever emitted, stored, parsed
88
// or read one. Its only importer of any kind was `PluginSecurityScanner`, a
99
// type-only import from `packages/core/src/security/security-scanner.ts`, and
10-
// #14919 deleted that file; the census after it landed put every remaining
10+
// PR #15930 deleted that file (it closed issue 14919, a number since deleted
11+
// from the board and no longer resolving); the census after it landed put every remaining
1112
// reference inside the declaring module itself, against a lit control (five hits
1213
// for `PluginSecurityManifest` in the same file), so the zero is a reading.
1314
//
1415
// Whole-def retirement, not a tombstone: nothing parses this def, so there is no
1516
// author to hand a prescription to and no `${defKey}:${name}` key leaving a live
1617
// shape. `RETIRED_DEFS_BY_MAJOR[18]` plus the semantic entry
1718
// `plugin-security-scan-result-surface-retired` ARE the declaration — the
18-
// #11825 / #8715 shape. The two authorable carriers that pointed here,
19+
// #11825 shape (its sibling in the pair this tree usually cites, issue 8715, is
20+
// a number deleted from the board; 11825 is the half that still resolves).
21+
// The two authorable carriers that pointed here,
1922
// `PluginSecurityManifest.scanResults` and `.vulnerabilities`, are separately
2023
// tombstoned and registered in `RETIRED_KEYS_BY_MAJOR[18]`.
2124
//

‎packages/spec/src/migrations/entries/retired-keys/18.kernel__PluginSecurityManifest__scanResults.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
// zero authors and zero parsers: no `.parse`/`.safeParse` site existed anywhere
77
// against the scan-result schemas, so a publisher could declare a clean scan on a
88
// plugin manifest, be accepted, and get nothing — the declared-not-enforced shape
9-
// Prime Directive #10 names, one layer out from the runtime scanner #14919
10-
// removed for the same reason.
9+
// Prime Directive #10 names, one layer out from the runtime scanner that PR
10+
// #15930 removed for the same reason (that PR closed issue 14919, a number since
11+
// deleted from the board and no longer resolving).
1112
//
1213
// Tombstoned with `retiredKey()`, not deleted: `PluginSecurityManifestSchema` is a
1314
// plain `z.object`, not `.strict()`, so a bare deletion would strip an authored

‎packages/spec/src/migrations/registry.ts‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14844,8 +14844,9 @@ export const RETIRED_KEYS_BY_MAJOR: Readonly<Record<number, readonly string[]>>
1484414844
// zero authors and zero parsers: no `.parse`/`.safeParse` site existed anywhere
1484514845
// against the scan-result schemas, so a publisher could declare a clean scan on a
1484614846
// plugin manifest, be accepted, and get nothing — the declared-not-enforced shape
14847-
// Prime Directive #10 names, one layer out from the runtime scanner #14919
14848-
// removed for the same reason.
14847+
// Prime Directive #10 names, one layer out from the runtime scanner that PR
14848+
// #15930 removed for the same reason (that PR closed issue 14919, a number since
14849+
// deleted from the board and no longer resolving).
1484914850
//
1485014851
// Tombstoned with `retiredKey()`, not deleted: `PluginSecurityManifestSchema` is a
1485114852
// plain `z.object`, not `.strict()`, so a bare deletion would strip an authored
@@ -17366,15 +17367,18 @@ export const RETIRED_DEFS_BY_MAJOR: Readonly<Record<number, readonly string[]>>
1736617367
// compliance and a six-number summary — and no layer ever emitted, stored, parsed
1736717368
// or read one. Its only importer of any kind was `PluginSecurityScanner`, a
1736817369
// type-only import from `packages/core/src/security/security-scanner.ts`, and
17369-
// #14919 deleted that file; the census after it landed put every remaining
17370+
// PR #15930 deleted that file (it closed issue 14919, a number since deleted
17371+
// from the board and no longer resolving); the census after it landed put every remaining
1737017372
// reference inside the declaring module itself, against a lit control (five hits
1737117373
// for `PluginSecurityManifest` in the same file), so the zero is a reading.
1737217374
//
1737317375
// Whole-def retirement, not a tombstone: nothing parses this def, so there is no
1737417376
// author to hand a prescription to and no `${defKey}:${name}` key leaving a live
1737517377
// shape. `RETIRED_DEFS_BY_MAJOR[18]` plus the semantic entry
1737617378
// `plugin-security-scan-result-surface-retired` ARE the declaration — the
17377-
// #11825 / #8715 shape. The two authorable carriers that pointed here,
17379+
// #11825 shape (its sibling in the pair this tree usually cites, issue 8715, is
17380+
// a number deleted from the board; 11825 is the half that still resolves).
17381+
// The two authorable carriers that pointed here,
1737817382
// `PluginSecurityManifest.scanResults` and `.vulnerabilities`, are separately
1737917383
// tombstoned and registered in `RETIRED_KEYS_BY_MAJOR[18]`.
1738017384
//

0 commit comments

Comments
 (0)