roadmap: close form-a-scalar-param-mode-carveout ([ ]->[x]) — M1 fieldtest follow-up #1 done

This commit is contained in:
2026-05-18 15:52:06 +02:00
parent 7d7f04e1a4
commit 94cf087b07
+23 -22
View File
@@ -164,29 +164,30 @@ work progresses.
`docs/journals/2026-05-18-iter-embedding-abi-m1.1.md`;
`docs/journals/2026-05-18-audit-embedding-abi-m1.md`
- [ ] **\[todo\]** form_a.md scalar-parameter mode carve-out — docs-
honesty tidy (M1 fieldtest friction + spec_gap, shared root).
`crates/ailang-core/specs/form_a.md` "Schema invariants" item 1 +
the Pitfalls bullet state an *unconditional* "every `(fn …)` param
MUST be wrapped in `(own T)`/`(borrow T)`; implicit mode is
rejected" — but scalars require **bare** `(con Int)` (`(own (con
Int))` `use-after-consume`, `(borrow …)`
`consume-while-borrowed`; bare checks `ok`). The doc the LLM reads
first actively misdirects M1's headline export task into a
body-pointing linearity diagnostic that never names the real cause.
Pre-existing form_a.md defect M1 made acute (the export task is the
first where a careful fresh author follows the mode prose for a new
program). Fix: state the scalar-parameter carve-out symmetrically
with the existing return-type carve-out (form_a.md item 1 +
Pitfalls), and mirror the canonical bare-scalar export-param
spelling in DESIGN.md §"Embedding ABI (M1)". Behaviour is settled
(no language/checker change) → a docs-honesty tidy in the
`docs-honesty-lint` class (anti-regression presence/absence pin),
not a brainstorm milestone. P1 — it undermines the clause-1
authoring ergonomics of the surface the rest of the M2M5 arc
extends, so it precedes M2.
- [x] **\[todo\]** form_a.md scalar-parameter mode carve-out — docs-
honesty tidy (M1 fieldtest friction + spec_gap#1, shared root)
CLOSED 2026-05-18. `crates/ailang-core/specs/form_a.md` stated an
*unconditional* "every `(fn …)` param MUST carry an `(own/borrow)`
mode" rule in **four** places that contradicts shipped checker
behaviour (scalars take **and require** bare `(con Int)`; a mode on
a scalar trips body-pointing `use-after-consume` /
`consume-while-borrowed`). All four sites rewritten symmetric to
the pre-existing return-type carve-out; the already-correct
few-shot annotation left verbatim by design; DESIGN.md §"Embedding
ABI (M1)" gained the bare-scalar export-param rule + a
corpus-grounded `step` Form-A snippet; RED-first anti-regrowth pin
via `ailang_core::FORM_A_SPEC` + `norm()` (4 ABSENT + 4 PRESENT
form_a + 1 PRESENT DESIGN). Zero language/checker/codegen change;
Boss-verified docs_honesty_pin 5/0, spec_drift 8/8 (not a lockstep
partner), ailang-core 112/0, workspace 622→623 (+1 = the pin), zero
`crates/**/src/**` diff. Pure docs+pin tidy — no audit/fieldtest
gate (the pin IS the regression coverage). plan
`docs/plans/form-a-scalar-param-mode-carveout.md` (`4c266a6`) → iter
`7d7f04e`. Stays here briefly for context; remove once stale (full
record in `docs/journals/INDEX.md`).
- context: `docs/specs/2026-05-18-fieldtest-embedding-abi-m1.md`
findings [friction] + [spec_gap]#1.
findings [friction] + [spec_gap]#1;
`docs/journals/2026-05-18-iter-form-a-scalar-param-mode-carveout.md`.
- [ ] **\[feature\]** `ail emit-ir --emit=staticlib` — restore the
Decision-5 IR-readability affordance for kernels (M1 fieldtest