plan: boehm-retirement.1 — atomic single-iter execution layout
Decomposes the Boehm-retirement spec (50dc478) into 10 bite-sized
tasks. Task 1 ships the RED milestone-pin first (TDD); Task 2 is
the compile-gated atomic core (drops `AllocStrategy::Gc` variant +
the `Default` derive + threads every caller in codegen + main.rs in
one cohesive task, so the workspace-build gate at the end is
satisfiable). Tasks 3-9 cover the scrub work that cascades off the
core (e2e suite, doc-comments, bench harness, design ledger,
honesty-pin inversion, example fixtures + agent prompts, IR
snapshots). Task 10 is the acceptance gate.
Plan-recon (DONE_WITH_CONCERNS) surfaced 9 spec gaps; the plan
absorbs all 9:
- `runtime_alloc_fn` → actual identifier `fn_name` (no rename)
- 5 checked-in IR snapshots (`hello.ll`, `list.ll`, `max3.ll`,
`sum.ll`, `ws_main.ll`) regenerate via `UPDATE_SNAPSHOTS=1`
- `design/contracts/scope-boundaries.md:67,114-127` Boehm block
+ `examples/gc_stress.ail.json` dead-reference
- `design/contracts/memory-model.md:232` "pre-Boehm era" phrase
- `bench/check.py:91,94` `implicit @ gc` arm label map
- `crates/ailang-codegen/src/match_lower.rs:40,113`
`@GC_malloc` doc-comments
- `skills/implement/agents/ailang-implementer.md:95,185` Decision
10/Boehm references
- `AllocStrategy`'s `Default` derive (no callers — strip)
- e2e.rs spec line numbers refer to gc-call lines, not test-fn
header lines
Plan self-review caught a planner-grade defect that recon had
not flagged: `bench/check.py:62` hardcodes `"gc(s)" in line` as
the throughput-table header sentinel and `:72` hardcodes the
9-column count — both must shift in lockstep with the
`bench/run.sh` 9→6 column compaction; without the pair-edit,
`parse_throughput_table` silently returns an empty dict and the
"green" check pins nothing. Task 5 now carries Steps 4a-4c (header
+ count + field-set) as a coherent unit, plus the explicit pin in
the rationale.
Net delta on landing: 1 new test, ~30 modified files, 5
regenerated IR snapshots, 1 deleted fixture. Workspace passing-
test count shifts by `-3` (4 deletions − 1 new). The iter commit
will close Gitea #4 via the trailer.
refs #4
This commit is contained in: