Skip to content

Commit 450e030

Browse files
os-litantclaude
andauthored
fix(qa): give every expression declaration its own ratchet key (#15802)
* fix(qa): give every expression declaration its own ratchet key The ADR-0058 D7 expression ledger keyed the ratchet as `file:field`, so two different declarations of one field name in one file collapsed into a single `Set` entry: one ledger row classified both, and the ratchet could not notice it had never asked. 44 declaring positions reduced to 34 keys, with 10 keys carrying two positions each. Four of those collapses joined surfaces that are opposites, not near-duplicates — most sharply `data/field.zod.ts:requiredWhen`, one key over the server-enforced `FieldSchema` transition gate and the `InlineGridColumnSchema` cell whose own describe says nothing on the write path reads it. A declared-but-unwired predicate that says so in its own describe string was invisible to the ledger built to surface exactly that class. Discovery now yields one record per declaring POSITION and keys it `file:Schema.field`, which separates all 44 today. That is a measurement, not a guarantee — two same-named fields in different inline `z.object` blocks under one top-level const would still collide — so the load-bearing half is a new assertion that two positions sharing a key is a hard failure naming both `file:line`s, rather than a silent merge. It holds for any naming scheme. Every `covers` entry is re-pointed, and the four genuinely-different collapses get honest rows: `cel-select-option-visible` (server-enforced on write via rule-validator, with its proof), `cel-inline-grid-cell` (experimental — the objectui evaluator is not in this checkout) and `cel-field-group-section` (fail-closed, which is what separates it from `cel-ui`). Coverage does not shrink: every position covered before is still covered, now by a row that can tell the truth about it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D47qPfEWVPmhguWgBZCi5N * fix(qa): keep tracker ids out of the ledger's runtime strings `check:doc-authoring` caught two ids I had put in string prose rather than in an adjacent comment: one in the new `cel-select-option-visible` enforcement and one in the `cron-declared-unwired` note. A runtime string reaches authors and operators who cannot resolve `#NNNN`; the reader who can resolve it reads the source. The ids move to comments, and the note now says what changed rather than which card changed it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01D47qPfEWVPmhguWgBZCi5N --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 1f1b38d commit 450e030

2 files changed

Lines changed: 213 additions & 70 deletions

File tree

0 commit comments

Comments
 (0)