c9355d7d58
The Term::Loop arm of write_term rendered binders as bare
`name = init;` statements inside the `loop { … }` body block, which
reads as C/Rust re-init-every-iteration semantics — a projection
lying about a body the prose surface exists to let the reader trust.
Rewrite to a parenthesised init-list on the keyword line,
`loop(acc = 0, i = 1) { … }`, positionally isomorphic to the
unchanged Term::Recur arm. Projection-only: loop/recur AST, Form-A,
JSON-AST, typecheck, codegen, and the Form-A↔JSON round-trip
invariant untouched. RED-first via two new committed
examples/*.prose.txt byte-equality snapshots + two snapshot_loop_*
tests; full ailang-prose suite 10/0; both ail-prose CLI byte-matches
green. Single-iteration milestone, brainstorm→plan→implement.
Spec: docs/specs/2026-05-18-prose-loop-binders.md
Plan: docs/plans/prose-loop-binders.1.md
13 lines
274 B
JSON
13 lines
274 B
JSON
{
|
|
"iter_id": "prose-loop-binders.1",
|
|
"date": "2026-05-18",
|
|
"mode": "standard",
|
|
"outcome": "DONE",
|
|
"tasks_total": 2,
|
|
"tasks_completed": 2,
|
|
"reloops_per_task": { "1": 0, "2": 0 },
|
|
"review_loops_spec": 0,
|
|
"review_loops_quality": 0,
|
|
"blocked_reason": null
|
|
}
|