spec: correct it.3 corpus-migration scope (it.2-surfaced premise defect)

The original spec premise "21 .ail fixtures / 34 (tail-app …) sites"
under-counted the corpus's non-structural-recursion surface. it.2
proved the true it.3 migration set is three classes: the ~20
tail-app-marked fixtures + ~18 no-ADT-candidate counter-recursion
fixtures (deferred via it.2's no-candidate skip) + the 2 RC fixtures
it.2 joined to the transitional grandfather. it.3 removes the
tail==false grandfather AND the no-ADT-candidate skip together.
No design decision (D1-D4) changes — factual scope-widening only,
traceable to 2026-05-15-iter-it.2.md §Concerns. Not relitigating
the complete, green it.2 (feedback: spec_over_plan_patches — fix
the spec where it governs, not the plan around it).
This commit is contained in:
2026-05-15 15:32:31 +02:00
parent a4be1e58a3
commit 20181786a3
+39 -10
View File
@@ -83,10 +83,29 @@ Iteration order:
`tail` fields, the two keywords, the `musttail` lowering,
`verify_tail_positions`'s old role, `TailCallNotInTailPosition`,
Decision 8; rework the codegen block-termination invariant so the
seam is solely `recur`'s; migrate all 21 `.ail` fixtures / 34
`(tail-app …)` sites. Destructive; last; depends on it.1 (loop
occupies the seam) and it.2 (the structural fixtures are *proven*
total before their redundant tail marker is stripped).
seam is solely `recur`'s; migrate the full corpus non-structural-
recursion set (scope-corrected — see note). Destructive; last;
depends on it.1 (loop occupies the seam) and it.2 (the structural
fixtures are *proven* total before their redundant tail marker is
stripped).
> **Scope correction (it.2-surfaced).** The original estimate
> "21 `.ail` fixtures / 34 `(tail-app …)` sites" under-counted the
> corpus's non-structural-recursion surface. The true it.3
> migration set is three classes: (1) the ~20 `tail-app`-marked
> fixtures; (2) the ~18 *no-ADT-candidate counter-recursion*
> fixtures (e.g. `build_tree(depth: Int)` in
> `bench_latency_explicit.ail`) that it.2 deferred via the
> no-candidate skip; (3) the two RC-regression fixtures
> (`rc_pin_recurse_implicit.ail`, `rc_let_alias_implicit_param.ail`)
> that it.2 joined to the transitional `tail-app` grandfather.
> it.3 removes the `tail==false` grandfather AND the no-ADT-
> candidate skip together — after it.3 every non-structural
> recursion is `loop`/`recur`. See
> `docs/journals/2026-05-15-iter-it.2.md` §Concerns §1/§2 for the
> discovery; the per-fixture enumeration is the it.3 plan's recon
> job (drive it off a corpus `cargo build`/`ail check` sweep, not
> this estimate).
First-iteration planner scope: **it.1** in full.
@@ -171,9 +190,14 @@ lower + escape → e2e example.
is precisely the author's explicit "this is intended iteration, not
accidental unbounded recursion" assertion — its original Decision-8
purpose — so grandfathering it keeps the it.1/it.2-additive vs
it.3-destructive split honest: the 21 corpus fixtures still
type-check through it.2 unchanged. it.3 removes the `tail` field
**and** this exemption in the same destructive step, by which point
it.3-destructive split honest: the corpus still type-checks
through it.2 unchanged. (it.2 discovered the grandfather needs two
cooperating exemptions, not one — the `tail==false` marker check
*and* a no-ADT-candidate skip for counter-recursions that have no
structural position to verify; see the Scope-correction note under
Architecture/it.3.) it.3 removes the `tail` field, the
`tail==false` grandfather, **and** the no-ADT-candidate skip in
the same destructive step, by which point
every previously-exempt site has been migrated to `loop` or to a
now-checked structural plain call.
- **`Diverge` effect (first implementation; Decision 3 was a
@@ -212,7 +236,9 @@ lower + escape → e2e example.
`recur`'s (and the ordinary fall-through `ret`). This is the only
non-mechanical part of it.3 and the reason it.1 ships the new seam
first.
- **Corpus migration (21 fixtures / 34 sites).**
- **Corpus migration (full non-structural set — see the
Scope-correction note; ~20 tail-app + ~18 no-ADT-candidate +
the 2 RC fixtures, exact set is the it.3 plan's recon job).**
Accumulator-shaped recursions
(`bench_compute_collatz`, `bench_compute_intsum`,
`bench_latency_explicit`/`_implicit`, `bench_list_sum*`,
@@ -426,8 +452,11 @@ Architecture. Recording it here so a future reader does not
`musttail` lowering / `verify_tail_positions`' tail-app role /
`TailCallNotInTailPosition` / Decision 8 all removed;
`design_schema_drift.rs` green with `loop`/`recur` anchors and no
`tail` anchors; all 21 migrated fixtures `ail check` clean and
`ail run` to byte-identical pre-migration stdout; milestone-close
`tail` anchors; every fixture in the full non-structural-recursion
migration set (Scope-correction note) `ail check` clean and
`ail run` to byte-identical pre-migration stdout; no `tail==false`
grandfather or no-ADT-candidate skip remains in the checker;
milestone-close
`audit` clean (bench baseline pristine or regression ratified);
`cargo test --workspace` green.
- Milestone: the language has exactly two iteration forms; the only