audit + close: boehm-retirement CLEAN milestone close (no drift, bench 0/0/0, no tidy)

Single-iter milestone closing Gitea #4. Architect (drift review)
and the three bench-regression scripts all green.

Architect: CLEAN.

The architect walked design/INDEX.md and the relevant contracts
(memory-model, language-constraints, embedding-abi, honesty-rule,
frozen-value-layout, str-abi), read git log 7a42989..HEAD
--format=full for the three milestone commits, and inspected the
full diff. Specific scrutiny items reported clean:

  - All four by-design Boehm-grep exceptions are doing distinct
    load-bearing work, none is residual drift hiding behind a
    justification:
      (a) `crates/ailang-core/tests/docs_honesty_pin.rs` lines
          73-80 — the four absence-pins name the Boehm-zombie
          strings as scan targets; the pin cannot exist without
          naming what it forbids;
      (b) `crates/ail/tests/boehm_retirement_pin.rs` — the
          milestone-pin must literally invoke `--alloc=gc` to
          assert its CLI rejection;
      (c) `crates/ail/tests/embed_staticlib_alloc_guard.rs:3-5`
          — file-level doc-comment historical anchor explaining
          why the test's gc-arm went away (the rejection moved
          upstream to CLI parsing);
      (d) `design/contracts/embedding-abi.md:44-45` — contract
          historical clause naming the Boehm-retirement iter,
          which is the honesty-rule-compliant form for "this
          used to be a staticlib-guard rejection, see the
          milestone".

  - The 1.3× reframe in `design/models/rc-uniqueness.md` (the
    sentence in `## Memory model` plus the closure-chain ±15%
    block) is internally consistent: the regression gate is a
    *quantitative band*, scoped to the linear/tree/poly-ADT
    corpus with closure-chain on its own ±15% band. The
    RC-as-canonical commitment in `design/contracts/memory-model.md`
    is unchanged; no contract surface was softened.

  - No `ratifying-test` link in `design/INDEX.md` was orphaned
    by the test churn. All 21 referenced files exist; `e2e.rs`
    still exercises the Str-path, Eq/Ord, and the
    staticlib-bump-rejection substring pin that the
    `embedding-abi` and `str-abi` rows depend on.

  - Architect sweeps 1-5 all exit 0; the four-string absence-pin
    (`transitional Boehm`, `parity oracle`, `GC_malloc`, `libgc`)
    is the durable invariant that catches any future
    Boehm-narrative regrowth in the ledger.

Architect recommendation: carry on as planned.

Bench: 0/0/0.

  - bench/check.py exit 0 — 36 metrics, 0 regressed (throughput
    + latency). RC-over-bump ratios stable: bench_list_sum 2.74,
    bench_tree_walk 2.52, bench_closure_chain 4.23 (within the
    ±15% closure-chain band), bench_hof_pipeline 2.74,
    bench_compute_collatz 1.00, bench_list_sum_explicit 2.96.
    Latency: explicit @ rc median 217 µs / p99 245 µs;
    implicit @ rc median 306 µs / p99 477 µs.
  - bench/compile_check.py exit 0 — 24 metrics, 0 regressed.
    All `check_ms.*` (~2 ms) and `build_O0_ms.*` (~100 ms)
    workloads within tolerance vs. the baseline frozen by the
    prior milestone close.
  - bench/cross_lang.py exit 0 — 25 metrics, 0 regressed.
    RC-over-C ratios: bench_list_sum 1.48×, bench_tree_walk
    2.62×, bench_compute_collatz 0.98×, bench_list_sum_explicit
    1.30× — all within tolerance against the C reference
    corpus.

No baseline updates needed; no `--update-baseline` invoked. The
baseline regenerated *during* the iter (via the post-retirement
bench/run.sh column-shape change) was the source-of-truth here,
and the freshly-captured run matches it within self-comparison
range. The closing-audit bench is the steady-state confirmation.

Pipeline this milestone followed:

  brainstorm (one-question-at-a-time Q&A, three design forks
              resolved: bump survives, differential tests deleted,
              1.3× reframed; grounding-check PASS over the
              spec's seven load-bearing assumptions)
  -> planner (recon DONE_WITH_CONCERNS; nine open questions
              absorbed inline; self-review caught a
              bench/check.py header-sentinel + col-count
              planner-defect that was paired into Task 5)
  -> implement (DONE 10/10; orchestrator end-report flagged five
                concerns all absorbed into iter commit body:
                clap-allowlist corollary, iter17a witness update,
                baseline write_new_baseline gc-fallback,
                spec §6 grep wording-vs-reality drift, bench
                per-run variance ±1-5%)
  -> audit (CLEAN, no tidy, no [low]-priority forward-fix)

Closing Gitea #4. The `closes #4` trailer lives on the iter
commit `14a91f0` and fires on push.

Spec: docs/specs/2026-05-20-boehm-retirement.md
Plan: docs/plans/boehm-retirement.1.md
This commit is contained in:
2026-05-20 20:57:01 +02:00
parent 14a91f0ae5
commit 86dd7d7b60

Diff Content Not Available