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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user