Spec amendment after plan-recon flagged four missed touch-points
in the brainstorm grounding-check loop:
1. `design/contracts/data-model.md:142-147` — fenced JSON-block in
the canonical data-model contract. The data-model contract IS
the canonical-schema doc (INDEX.md row, ratifying test
`tests/design_schema_drift.rs`); leaving it on camelCase after
`ast.rs` ships kebab is a direct Honesty-Rule violation.
2. Three rustdoc strings in production source that describe the
present-state schema vocabulary: `ast.rs:8`, `parse.rs:81`,
`check/lib.rs:1707`. Each enumerates the rename targets in
prose; left unchanged they would describe a state that no
longer exists.
3. Better home for the new schema-shape pin: `design_schema_drift.rs`
(not `schema_coverage.rs`). That file already operates as the
data-model-contract ratifying test, already builds Term::Lam
exemplars at L121-129, and uses `anchor_in_jsonc_block` to walk
data-model.md fenced blocks — the proposed extension slots
directly into the existing pin family.
4. Experiment-tree files (`experiments/2026-05-12-.../master/spec.md`,
`rendered/*.md`, `runs/**`) carry old tags. Per Honesty-Rule
analogy with docs/plans/* — these are frozen historical
artefacts of the 2026-05-12 cross-model-authoring experiment
and are NOT migrated. The experiment's `master/examples/*.ail.json`
fixture IS migrated (live JSON the workspace loader can
deserialise); surrounding prose is not.
Plus an editorial fix: the fixture-occurrence count parenthetical
corrected from "3" to "2" — each fixture has one `paramTypes` +
one `retType`, one per line.
Spec re-dispatched through `ailang-grounding-check` (Step 7.5
re-PASS). All 9 load-bearing claims ratified, with 2 negative-grep
"no test pins this" ratifications openly flagged in the agent
report as a Boss-override-eligible shape. Acceptance criteria
renumbered to 7 (was 6).
Touch-point count now: 2 serde-renames + 1 workspace.rs literal +
2 .ail.json fixtures + 1 data-model.md fenced block + 3 rustdoc
strings = 9 files, all small edits. No hash-pin refresh required.
Brainstorm output. Single-iteration milestone: rename the two
camelCase JSON tags on `Term::Lam` — the only camelCase outliers
in the AST schema — to kebab-case, matching the convention every
other compound-key tag (`reuse-as`, etc.) already follows.
Scope is verified-tiny: ast.rs (2 serde-rename strings) +
workspace.rs in-source test JSON-literal + 2 `.ail.json` fixtures.
None of the five hash-pinned `.ail` modules contains a lambda,
so the milestone refreshes zero hash pins. Form-A is untouched —
the surface uses `(params (typed ...))` / `(ret ...)`, never the
camelCase tags.
Feature-acceptance gate: passes weakly-but-honestly. Clause 1 is
indirect (schema-internal consistency reduces the LLM author's
"compound-tag-is-kebab" generalisation failure rate); there is no
empirical preference measurement for this axis. Clause 2 holds
(one fewer special case to memorise). Clause 3 vacuous (no
semantic surface touched).
Grounding-check (Step 7.5) PASS: all four load-bearing claims
ratified by currently-green tests — round_trip.rs (Form-A
invariance), hash_pin.rs (no lambda in pinned modules),
workspace.rs in-source ct1_validator test (exhaustive call-site
list), design_schema_drift.rs (kebab convention pin).
Not bundled with #27 (arith-rename) per the spec preamble: #27
carries its own four open brainstorm questions and is a separate
milestone; each gets one re-pin wave with its own rationale, no
churn savings from bundling.