Skip to content

v0.46.2

Choose a tag to compare

@yahor-punko yahor-punko released this 22 Aug 10:31
· 5 commits to main since this release

[0.46.2] — 2026-08-22

Added

  • --close-session now prints a post-push CI-verification reminder at every push-adjacent output point (T-689) — a push completing was previously treated as the end of the wave-closure contract, and canonical main sat CI-red across two consecutive pushes because nothing after the push prompted anyone to go check. This project's own recorded precedent for a prose-only human step getting silently skipped is the DR-008 gate-ledger review, itself only closed by a printed reminder (T-668) — the same remedy now applies here. The reminder appears in the interactive confirmed-push path, the --push auto-push path, and appended to the non-interactive git-push reminder, so all three ways a session can end with a push get the same nudge to confirm CI is green on the pushed commit before opening the next wave. Text only — the script still never executes gh or any other external call, preserving both the zero-external-dependency posture and the single human checkpoint the push step already relies on.

Fixed

  • A test executing a generated adopter artifact could silently exercise a different codebase than the one actually under test (T-690) — a spawn that inherits its environment unpinned can fall through a home-directory resolution chain to a machine-shared clone of the published framework rather than the checkout whose HEAD the test is meant to cover, so a broken change could pass locally and only fail — or worse, pass for the wrong reason — once it reached CI. This is exactly how canonical main sat CI-red across two consecutive pushes on 2026-08-21. .claude/rules/scripts.md now codifies a hermetic-test authoring rule: any test executing a generated adopter artifact (a wrapper script, a hook command), or any process whose framework-root resolution consults the home-directory chain, must pin the framework-root environment variable explicitly rather than inherit it. CLAUDE.md's wave-closure contract is extended to match — a wave closes on the push being complete and CI on the pushed commit reading green, not on the push alone.

[0.46.1] — 2026-08-21

Fixed

  • The adopter wrapper generated by buildBashWrapper() (mavp-install.js) was silently missing dispatch entries for five flags the canonical scripts/mavp-operator dispatches (T-685) — --archive-merged, --park-wave, --unpark-wave, --worktree-report, and --prune-worktrees previously rendered the dashboard at exit 0 in every adopter project (T-679's unrecognized-flag gate later turned that into an honest exit-1 refusal, but the flags still didn't work). All five now dispatch via $MAVERICKS/... with matching --help lines, using zero script changes — each target script already resolves its root from MAVERICKS_PROJECT_ROOT, which the adopter wrapper already exports. The dashboard fall-through branch and the MAVERICKS_PROJECT_ROOT export are structurally untouched. A new self-deriving test, scripts/test-wrapper-flag-parity.js, extracts the dispatched-flag token set from both wrappers and asserts set equality (modulo an explicit, currently-empty exception list), so the next canonical-only flag is caught at test time instead of in an adopter project.

[0.46.0] — 2026-08-21

Added

  • mavp-publish-release.js now hard-gates on the mirror's own CI going green at the exact edge tip being promoted (T-680) — the ubuntu × mirror-tree verification cell (the one that historically caught the 0.39.0 and 0.40.0 defects, only after they had already reached the mirror) previously existed nowhere except at promotion time itself, and workflow_dispatch cannot manufacture it (it routes exclusively to the macOS-only job — see .github/workflows/ci.yml). .github/workflows/ci.yml's push trigger now also fires on edge (inert on canonical, since no edge branch exists there; free on the mirror, since it only measures the working-build cadence already in place). The release script queries GET /repos/{owner}/{repo}/actions/runs?head_sha=<sha> via node:https built-ins — read-only, unauthenticated, no gh, no new dependency — for the step-3-resolved origin/edge SHA, and refuses (naming the SHA, the observed state, a recovery action, and the mirror's Actions URL) unless the latest CI-workflow run is completed/success. Fails closed on any API error. Engages only when origin parses as a github.com remote — the local-path fixtures this script's own test suite uses stand down with one named skip line, unconditionally (no operator flag reaches that path). No skip flag, no --force.

Fixed

  • The shipped 0.45.0 T-567 entry and docs/core/ORCHESTRATION_RULES.md both misattributed ownership of the residual hand-typed raw-git integration vector to the T-626 accepted-boundary row in docs/core/GATE_LEDGER.md (T-678) — that row actually covers a different vector: the live-execution vector into the machine-shared ~/.mavericks framework-source clone, undetected between installs. The residual raw-git vector (a hand-typed git cherry-pick/git merge run directly against the shared main checkout instead of through --integrate) now has its own dedicated accepted-boundary row in docs/core/GATE_LEDGER.md's "Accepted boundaries" section, anchored to T-567's 2026-08-05 scope ruling rather than to a deprecated task, with its own reopen trigger and an explicit statement of what holds the boundary today. docs/core/ORCHESTRATION_RULES.md's ownership sentence now points at that new row instead of the T-626 row. The already-tagged ## [0.45.0] section's own copy of the false clause is frozen and left as shipped — this entry is the correction record.
  • Both operator wrappers (scripts/mavp-operator and the adopter wrapper mavp-install.js generates) silently rendered the dashboard at exit 0 for ANY unrecognized flag, instead of refusing (T-679) — an unrecognized argument previously fell through a bare else straight into the dashboard branch, masking typos and any flag newer than the wrapper (observed live 2026-08-21: a pre-T-567 --integrate HEAD call rendered the dashboard and exited 0 instead of failing, which is how the missing dispatch entry stayed invisible). Both wrappers now gate the dashboard branch on exactly zero arguments or --watch (the dashboard's only self-parsed flag) and refuse any other unrecognized argument at exit 1, naming it and pointing at --help. Accepted consequence: the adopter wrapper's dispatch chain has never had entries for --worktree-report, --prune-worktrees, --park-wave, --unpark-wave, or --archive-merged — those five flags now go from silently rendering the dashboard at exit 0 to being explicitly refused at exit 1 in the adopter wrapper. They did not work in the adopter wrapper before this change either; this is an honest failure replacing a silent one, not a regression. Adding the missing dispatch entries for those five flags is a separate, not-yet-scheduled concern.