Repository navigation
Commit f77b806
spec(lint): honour the
Fixes #19568
Clause-②: yes
## The reading, first — and it is neither of the two arms the card
offered
The card asks which group `datasource` belongs to: **A** (wire the rule)
or **D** (retire the declaration). Measured against the ruling's own
group criteria, it is **neither — it is group C**, the ledger-driven
arm, which that same ruling folds into group A's card. Both offered arms
are refuted, and the second refutation is the one that decided the shape
of this PR.
**Group D is refuted by its own criterion.** That arm is for a
declaration where 「no stack collection exists to create into, so the
declaration is a promise nothing can keep」.
`ObjectStackDefinitionSchema.datasources` is a first-class stack
collection (`packages/spec/src/stack.zod.ts:275`), the type has a live
runtime create path (ADR-0015 Addendum, `origin: 'runtime'`), and
`RUNTIME_CREATE_ALLOWED_TYPES` in
`packages/metadata-protocol/src/protocol.ts` is derived straight from
the registry entry, so `PUT /api/v1/meta/datasource/NAME` really does
mint one. Retiring the flag would withdraw a capability the platform
ships.
**The `skill` hold-out is refuted, and this is the precedent the
dispatch asked me to test against.** `skill` stayed out of the sibling
landing #19542 because `validateAiToolReferences` reads a skill's tool
references against `stack.tools` and `stack.actions` — collections the
runtime door's snapshot does not carry — so the door produced that
rule's `unresolved` finding while the same rule over the whole stack
produced none. Wiring it would have shipped a false advisory into
Studio; the hold-out is written up on card #19527. `datasource`'s only
candidate rule reaches into no collection at all:
`lintLivenessProperties` judges each written item's own top-level keys
against that type's liveness ledger, so the door's verdict and the
whole-stack verdict are the same value by construction. That is asserted
in this PR as a comparison, not argued: the same written datasource
judged once in the shape a per-write snapshot has and once with every
collection the door omits present and populated, with an anti-vacuity
leg so two empty lists cannot pass for agreement.
⇒ **wiring is honest here, and it lands as the `email_template` /
`mapping` shape: dispatched and silent.**
## Evidence, re-measured on `origin/main` `1f69917c5c` (after PR #19517
landed), not adopted from the card
| leg | reading |
| --- | --- |
| registry entries parsed with a multi-line-aware scanner | 27 entries ·
**22** carry `allowRuntimeCreate: true` |
| of those 22, entries written MULTI-LINE | **1** — `datasource`, at
`metadata-plugin.zod.ts:930`. The card's mechanism holds at this commit.
|
| `allowRuntimeCreate: true` types named by **no** live `runtimeTypes`
declaration in `packages/lint/src` | **6** — `datasource`,
`external_catalog`, `translation`, `doc`, `tool`, `skill` |
| lit control, same scan | declarations naming `object`: **12** |
| dark control, same scan | declarations naming `zzznotatype`: **0** |
| candidate rules naming `datasource` anywhere in `packages/lint/src` |
**1** — `lint-liveness-properties.ts:502`, the row `{ type:
'datasource', key: 'datasources' }`, carried since #4487 |
| `packages/spec/liveness/datasource.json` | 12 props, **0**
`authorWarn` rows (the three textual hits are prose inside notes) |
| lit control, same instrument | `object.json` warns on
`externalSharingModel` |
Of the six, `datasource` was the only one with no carrier: the others
are the ruling's group B readings, its group D retirement, and the
#19527 hold-out.
## What landed
- `lintLivenessProperties` declares `datasource` in `runtimeTypes`,
beside `email_template` and `mapping`.
- `TYPE_TO_STACK_KEY` gains `datasource: 'datasources'` — ⛔ not a
mapping ahead of its rule: that rule has read `stack.datasources` since
#4487.
- `runtime-gate.datasource-writes.test.ts` carries the reading in
executable form.
- The registry entry itself now says where its `allowRuntimeCreate:
true` is honoured, that the honouring rule is silent by ledger, and that
the entry's multi-line shape is what hid it from a line-wise census.
**datasource runtime-create declaration at the publish door — the reading says group C, dispatched and silent (#19596)1 parent 0e658fb commit f77b806
6 files changed
Lines changed: 457 additions & 3 deletions
File tree
- .changeset
- packages
- lint/src
- spec/src/kernel
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1414 | 1414 | | |
1415 | 1415 | | |
1416 | 1416 | | |
| 1417 | + | |
| 1418 | + | |
| 1419 | + | |
| 1420 | + | |
| 1421 | + | |
| 1422 | + | |
| 1423 | + | |
| 1424 | + | |
| 1425 | + | |
| 1426 | + | |
| 1427 | + | |
| 1428 | + | |
| 1429 | + | |
| 1430 | + | |
| 1431 | + | |
| 1432 | + | |
| 1433 | + | |
| 1434 | + | |
| 1435 | + | |
| 1436 | + | |
| 1437 | + | |
| 1438 | + | |
1417 | 1439 | | |
1418 | | - | |
| 1440 | + | |
1419 | 1441 | | |
1420 | 1442 | | |
1421 | 1443 | | |
| |||
0 commit comments