Skip to content

Commit da642cd

Browse files
committed
chore(spec): classify automation/builtin-node-config after merging main
The ledger gate did its job before it merged. `main` landed automation/builtin-node-config.zod.ts (#4045/#4228) — eight new sites, sibling to io-node-config.zod.ts — and merging main turned the gate red on a branch whose own diff touches no schema at all. That is the intended behaviour: a new authorable surface arrived, so somebody has to classify it rather than let it sit in the ratchet's blind spot. Classified `authorable`, same family as io-node-config: the CRUD quartet, `screen` and `map` config contracts. Worth noting on the row — these were written from what the executors actually read rather than from the descriptors' configSchema literals, and `builtin-node-form-zod-ledger.test.ts` reconciles the two bidirectionally, so this row already carries a drift check of its own. Every pre-existing count survived the merge unchanged, so the failure was exactly as narrow as it should have been: one new file, one new row, one section total (automation 81 → 89). Verified after merging: spec suite 7163 green, tsc clean, and the strictness-ledger / liveness / variant-docs / docs gates all green with content/docs/references unchanged. Refs #4001 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0147tNF4Snk7Ry1KGt4a5PY4
1 parent c2398ce commit da642cd

1 file changed

Lines changed: 10 additions & 1 deletion

File tree

docs/audits/2026-07-unknown-key-strictness-ledger.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ tightening (the #4001 "sharing-rule lesson": candidates, not verdicts).
165165
| `external-catalog.zod.ts` | 4 | wire (p) | |
166166
| `field-value.zod.ts` / `seed.zod.ts` / `validation.zod.ts` | 1 ea | mixed (p) | |
167167

168-
### `automation/`81 sites
168+
### `automation/`89 sites
169169

170170
| File | Sites | Class | Note |
171171
|---|---|---|---|
@@ -179,6 +179,7 @@ tightening (the #4001 "sharing-rule lesson": candidates, not verdicts).
179179
| `approval.zod.ts` | 4 | authorable | **strict as of #4001 step 3** — all four authoring schemas (node config / approver / escalation / decision-output). The published JSON schema carries `additionalProperties: false` into the Studio form AND `registerFlow()` config validation (#4027/#4040), so an unknown key in an approval node's `config` is rejected at registration too — verified: `z.toJSONSchema` on the strict lazySchema does not throw (#3746 hazard checked) |
180180
| `node-executor.zod.ts` | 4 | wire | executor contract |
181181
| `io-node-config.zod.ts` | 2 | authorable | `NotifyConfigSchema` / `HttpConfigSchema` (#4045) — the sibling contracts that validate the **open** `config` slot on flow `notify` / `http` nodes. Authored per-node, so the open-slot exemption above does not extend to them; candidate once the executors' own drift is verified |
182+
| `builtin-node-config.zod.ts` | 8 | authorable | Same family (#4045): the CRUD quartet, `screen`, `map`. Written from what the executors read rather than from the descriptors' `configSchema` literals, and reconciled bidirectionally by `builtin-node-form-zod-ledger.test.ts` — so unlike most rows here, this one already has a drift check of its own. Same candidacy note as `io-node-config` |
182183
| `webhook.zod.ts` | 1 | authorable (p) | spec-only (#3461) |
183184

184185
### `security/` — 20 sites
@@ -326,5 +327,13 @@ omission, now classified.
326327
That is the argument for the gate in one paragraph: the people most familiar
327328
with this ledger, editing it in the same week, still left eleven drifts in it.
328329

330+
**And then it worked for real, before it had even merged.** While the gate sat
331+
in review, `main` landed `automation/builtin-node-config.zod.ts` (#4045/#4228) —
332+
eight new sites, sibling to `io-node-config.zod.ts`. Merging `main` turned the
333+
gate red on a branch whose own diff had not touched a single schema, which is
334+
precisely the intended behaviour: the file arrived, so someone had to classify
335+
it. It is now a row. Every existing count survived that merge unchanged, so the
336+
failure was exactly as narrow as it should have been.
337+
329338
Long tail stays gated on a verification pass per shape — never a one-shot
330339
"make all ~453 sites strict" (ADR-0054 ratchet; #4001's own recommendation).

0 commit comments

Comments
 (0)