From 94cf087b0726d65add4d7a59509b640650bc2984 Mon Sep 17 00:00:00 2001 From: Brummel Date: Mon, 18 May 2026 15:52:06 +0200 Subject: [PATCH] =?UTF-8?q?roadmap:=20close=20form-a-scalar-param-mode-car?= =?UTF-8?q?veout=20([=20]->[x])=20=E2=80=94=20M1=20fieldtest=20follow-up?= =?UTF-8?q?=20#1=20done?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/roadmap.md | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index f4a81d5..de8d0dc 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -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 M2–M5 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