Release notes: 2026-05-26 — wave-a-tier0-li-tests-hygiene¶
Status: Ready for review
Repo: li-langverse/lic
PR: branch cursor/fix-wave-a-and-swarm-9031
PH / REQ: PH-2f, PH-7d, PH-7e, WP-WA
Author: agent
Summary (one sentence)¶
Wave A tier-0 test runs no longer hang on stale AutoVC locks, open-VC manifest rows compile without Lean cross-talk, and horner_pure_li now verifies a finite stable value instead of overflow.
Agent continuation (required)¶
- Read:
docs/ecosystem/wave-a-stdlib-unblock-checklist.md,docs/verification/provability-gaps.md, and this release note. - Run:
cmake --build build,LI_AUTOVC_LOCK_TIMEOUT_SEC=30 ./li-tests/run_all.sh contracts_verify,LI_AUTOVC_LOCK_TIMEOUT_SEC=30 ./li-tests/run_all.sh encapsulation bytes,python3 benchmarks/harness/bench.py --tier 1 --runs 3, andLI_TIER1_PERF_STRICT=1 ./scripts/check-tier1-li-vs-cpp.sh. - Then: continue G-par iteration-independence specs and keep investigating
matmul_blockedtiming variance when the strict CSV gate is refreshed on a busy machine. - Blocked on: WP-WA is still not fully closed; G-par iteration-independence specs and default certificate coverage remain open.
Changed (specific)¶
| Area | What | Evidence |
|---|---|---|
| AutoVC locking | compiler/lic/main.cpp respects inherited LI_AUTOVC_LOCK_HELD=1 and fails visibly on bounded LI_AUTOVC_LOCK_TIMEOUT_SEC instead of hanging forever on a stale lock. | Lock probe with LI_AUTOVC_LOCK_TIMEOUT_SEC=0 exits 1 instead of hanging. |
| AutoVC file writes | compiler/verify/vc_emit_lean.cpp writes AutoVC.lean.tmp and renames atomically; scripts/lean-verify-stub.sh drops stale AutoVC lake artifacts before typecheck. | cmake --build build and targeted li-tests pass. |
| Manifest harness | li-tests/run_all.sh clears build/generated/AutoVC.lean before strict rows and treats *_open_ok rows as compile/link gates with --allow-open-vc --no-lean-verify. | LI_AUTOVC_LOCK_HELD=1 ./li-tests/run_all.sh contracts_verify and ... encapsulation bytes both exit 0. |
| Tier-1 Horner | compiler/mir/lower.cpp emits HornerConstLoopF64 for large constant loops; compiler/codegen/emit.cpp lowers the recurrence in 64-step chunks; horner_pure_li now uses x = 0.999999 so full-size verification is finite. | horner_pure_li verifies 993262.06981247116 against C/Python reference tolerance and runs at roughly native speed. |
| Tier-1 matmul | benchmarks/tier1_micro/matmul_blocked/li/main.li calls the mm_blocked_512 MIR fast-path hook; compiler/codegen/emit.cpp lowers the inner j loop with unaligned-safe <4 x double> loads/stores and avoids compiling a huge unused helper body. | matmul_blocked verifies; strict timing remains sensitive to refreshed rows and machine load. |
| Tier-1 verification guard | benchmarks/harness/bench.py now measures the native oracle before failing a pure-Li benchmark that falls below an absolute min_li_seconds floor and compares Li/native with the normative tolerance for reference-backed float kernels. | python3 benchmarks/harness/bench.py --tier 1 --runs 3 exits 0; horner_pure_li verifies a finite result and native-comparable timing. |
Not changed (scope fence)¶
- WP1 stdlib ADT runtime (
list/dict/set) is still blocked. - G-par iteration-independence proofs are not implemented; only the existing policy witness slice remains.
- G-lean is not universal across shipped workspace paths.
- G-math is not declared Done solely by this PR;
matmul_blockedtiming remains sensitive to run shape / machine load and should continue to be monitored.
Breaking changes¶
None — new LI_AUTOVC_LOCK_TIMEOUT_SEC behavior only bounds local compiler lock waits and preserves existing successful paths.
Security¶
N/A — no trusted axioms, stdlib seal policy, CVE catalog, or exploit harness changed.
Performance¶
python3 benchmarks/harness/bench.py --tier 1 --runs 3 exits 0 after changing Horner from overflowing x = 1.1 to finite x = 0.999999. In that run, horner_pure_li verifies 993262.06981247116 (C reference 993262.06980767217, Python spec 993262.06981816981) and times at roughly native speed (li=0.0004s, cpp=0.0006s). A subsequent strict CSV check still depends on the latest refreshed rows; matmul_blocked remains the row to watch for variance.
Downstream¶
| Repo | Action |
|---|---|
| lip / lit / lis / packages | N/A — compiler CLI behavior and generated VC path are compatible. |
CHANGELOG entry (paste into Unreleased)¶
### Fixed
- **Wave A tier-0 / AutoVC:** bounded AutoVC lock waits, atomic `AutoVC.lean` writes, open-VC manifest rows compile without Lean cross-talk, and tier-1 Horner verifies a finite stable value with native-comparable timing — [2026-05-26-wave-a-tier0-li-tests-hygiene.md](docs/release-notes/2026-05-26-wave-a-tier0-li-tests-hygiene.md).