|
| 1 | +--- |
| 2 | +"@objectstack/spec": patch |
| 3 | +--- |
| 4 | + |
| 5 | +chore(spec): re-anchor the `manifest`, `datasource`, `permission`, `dataset` and `webhook` liveness ledgers to consuming symbols (#13003) |
| 6 | + |
| 7 | +Adoption batch 2 of the symbol-anchor citation grammar landed by #12516, following |
| 8 | +batch 1's `action` / `object` pass. The `liveness/` ledgers ship inside this |
| 9 | +package's npm tarball (they are named in `files`), so this is a published-data |
| 10 | +change even though no runtime behaviour moves and no schema key changes. |
| 11 | + |
| 12 | +One hundred and five `path:NNN` evidence citations across |
| 13 | +`liveness/manifest.json` (34), `datasource.json` (28), `permission.json` (25) and |
| 14 | +`dataset.json` (18) are now written `path#symbol`, each re-closed by reading the |
| 15 | +code on the current tree rather than by shifting a line number. A symbol moves |
| 16 | +with its consumer, so the pointer survives the in-file drift that rots a line, |
| 17 | +and goes red when the consumer is renamed or deleted — a direction a stale line |
| 18 | +can never produce. Every entry touched is stamped `verifiedAt: 2026-08-28`, which |
| 19 | +dates `datasource.json`, `dataset.json` and `webhook.json` for the first time. |
| 20 | + |
| 21 | +What the re-closure found, which is again the reason the migration is not |
| 22 | +mechanical: 88 of the 105 citations were pointing at the wrong place already, |
| 23 | +every one of them IN RANGE and so invisible to all three existing checks. They |
| 24 | +had drifted onto docblocks, blank lines, a `variant: 'secondary'` UI action, a |
| 25 | +`return m.aggregate` belonging to a different key, and — for `datasource.ssl` — |
| 26 | +a contiguous run of five wrong pointers into a docblock about an unrelated |
| 27 | +environment variable. Two prose claims were falsified outright and are withdrawn: |
| 28 | +`external.validation`'s note credited `checkOnBoot` with gating the boot sweep |
| 29 | +(nothing reads that key anywhere; the sweep is unconditional), and |
| 30 | +`objects.viewAllRecords` cited a reader named `hasViewAllData` that no longer |
| 31 | +exists in the tree. |
| 32 | + |
| 33 | +`webhook.json` is the batch's separate case. All eleven of its `live` entries |
| 34 | +cited bare FILENAMES with line numbers (`auto-enqueuer.ts:266`), which the |
| 35 | +evidence scanner cannot parse as citations at all — so that ledger contributed |
| 36 | +zero resolvable paths and was never actually asked about by any check. Rewriting |
| 37 | +them as repo-rooted anchors made them askable, and the key-mention check |
| 38 | +immediately found a real answer: the dispatcher reads the remapped `active` |
| 39 | +column and never the authored `isActive`, so that call site now lives in the |
| 40 | +entry's note rather than in its evidence. |
| 41 | + |
| 42 | +`tool.json` is deliberately unchanged: every one of its citations points into |
| 43 | +`packages/services/service-ai`, the closed cloud runtime, which is absent from |
| 44 | +this checkout — there is no code here to re-close it against. |
0 commit comments