v0.12.0 — Knuth’s Beaver — cut record (2026-06-12)¶
The release-chat record of the v0.12.0 cut: what gated it, what was verified, what shipped with a known issue, and the follow-ups. Written post-tag per the documentation cadence (release_process); also the copy-and-adapt playbook for the next minor cut.
Anatomy¶
Step |
Commit |
|---|---|
Cut verification (gauge-refusal gates, re-pins, baseline 4→1) |
|
Release commit ( |
|
Reference-output regeneration (first since v0.5.0) |
|
Tag |
→ |
Absorb merge ( |
|
|
|
Post-release bump to |
|
The commit-msg version guard (.githooks/commit-msg) validated
version==tag at the release commit — armed via
git config core.hooksPath .githooks on the cutting clone (it is OFF by
default on fresh clones; arm it before every cut).
Cut verification (fresh core, release-gate venv)¶
Run on a fresh _vibeqc_core built at the freeze tip in a throwaway
venv (release-gate-build-recipe); the shared .venv .so was stale
again (selected-CI/xc commits post-rebuild).
known_reds 4 → 1. Three dispositioned at the cut:
test_bipole_gradient/test_dft_plus_u: the Phase-4a/4b Γ gauge default-flip post-dated the 2026-06-10 triage; the analytic BIPOLE UHF gradient silently disagreed with the driver FD by 5.3 Ha/bohr. Fixed by completing the corrected-gauge refusal across UHF/RKS/UKS (mirroring RHF) + pinning every Γ analytic-vs-FD/CPHF test to the legacy gauge on BOTH the SCF and the FD reference (6af56d91).test_eigs_preflight: re-pinned to the physical value — the86c39851gauge restoration recovers the isolated-molecule limit (−1.1167 Ha;run_rhfcross-check −1.1167143).
Shipped known issue (the 1 remaining tracked red): the analytic EWALD Γ gradient (
compute_gradient_periodic_rhf_gamma, including ASE periodic forces on the EWALD route) differentiates the pre-restoration assembly — 0.1927 Ha/bohr vs the agreeing driver-FDmolecular-limit 0.1486 on a dilute H₂ box. FD periodic gradients are correct. Documented in the
[v0.12.0]CHANGELOG; the gauge migration of the analytic kernel is the periodic-SCF chat’s next milestone.
Restoration proofs green on the fresh build:
test_audit_20260531_gauge_consistency+test_audit_20260530_periodic12/12 (the b4a6faba gauge cluster restoration86c39851+ multi-k GDF compcell completion3f1e8d89).Also green: D4 (66+2xf incl. the strict-xfail native-parity un-gating bar), CPCM 34/34 (post-
38dfffa2factor-2 fix, FD-exact), B3LYP convention 11, compiled-submodule registration, release version guard, dft_plus_u 72/72.
In flight at tag time¶
mars
c70866f8d904(bipole-phase4b-validation, the round of record for66ac0252) was still running. The identical suites passed locally; if the deployment round reds, use thePatch-candidate: v0.12.xtrailer flow.BIPOLE Phase 3 (multi-k corrected gauge,
6aa34bc2+5d6d4a17) landed ~4 h after the freeze line — deliberately NOT in v0.12.0 (un-verified by the cut gate; its own Phase-5 re-pin sweep pending). Rides the next release.
Lessons → follow-ups¶
Reference-output regen had been skipped since v0.5.0 — every release through v0.11.4 shipped
Release v0.5.0 "Wilson's Otter"banners in the bundled examples. v0.12.0 regenerated all of them (d071593b).regenerate_doc_examples.pytraps (both hit at this cut): (a) run from a worktree, its interpreter fallback silently picks the MAIN repo’s.venv→ stale-SHA dirty banners — always pass--python <cut-venv>; (b) the editable install’s reported version is baked at pip-install time — re-pip install -eafter the version bump or the banners read.dev0. Script-hardening chip filed (assert runtime version == pyproject before running jobs). Landed post-cut: the script now runs a version preflight that refuses any job interpreter whosevibeqc.__version__≠ pyproject[project] version(regression-tested intests/test_regenerate_doc_examples_preflight.py; flow in release_process.md step 3).Banner “Release vX.Y.Z” rendering requires exact-tag-at-HEAD (
build_info.is_release), which is structurally impossible for outputs committed before the tag — v0.12.0’s bundle readsdev 0.12.0 "Knuth's Beaver" (HEAD @ 055cb2d). Acceptable; a regen-script release-mode (banner override or post-tag regen flow) is part of the same chip. Landed post-cut: the banner override won —--release-bannerruns jobs withVIBEQC_BANNER_FORCE_RELEASE=1(rendering-only;.systemmanifests keep truthfulis_release/SHA provenance). The post-tag-regen alternative was rejected becausereleaseff’s to the tag, so every tagged tree would permanently carry the previous release’s bundle.Audit-flag staleness cuts both ways: composites-3c was stale (fixed v0.10.5), d4-native + cpcm-gradient were real. Always check the audit note’s RESOLUTION section +
git log -Sbefore reproducing — and before spawning chats.Slow-lane reds can hide behind triage timing: the Γ gauge default-flip landed after the full triage, so
test_bipole_gradient’s slow lane was unjudged until the cut verification. The cut MUST re-run the slow lane of any file whose defaults flipped since the last triage.
Phase E¶
Drop-box dirs .release-status/{v0.10.x,v0.11.0,v0.12.0}/ deleted
post-tag (key numbers extracted into the CHANGELOG entries and this
record). .release-status/audit-2026-05-31/ retained —
scripts/test_gate/gate_verdict.py references it and its notes carry
the d4/cpcm/composites resolution trail.