Skip to content

Commit 1cc7895

Browse files
committed
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
1 parent c99449a commit 1cc7895

2 files changed

Lines changed: 213 additions & 70 deletions

File tree

0 commit comments

Comments
 (0)