Repository navigation
v0.65.0
[0.65.0] - 2026-10-17
Overhaul phase 2, first batch: Maker drives the pipeline, every choice is a card, and execute's REVIEW
marks it finished. First release published since 0.62.0 (0.63.0 and 0.64.0 were never tagged).
Added
-
hm review_effect: measure what the one review catches and misses (SPEC-review-effect-measurement).
wrapup_landrecords onereviewrow per landed task into<base>/.claude/observability/review_effect.jsonl,
parsed from the REVIEW## Findingstable. This is best-effort, and a ledger fault never changes the land.
The verbs are:escape-candidates/escape: attribute post-merge fixes to the task that shipped the defect. Run them
from/hm:metricsStep 1.4.seed/score: a seeded-defect recall audit.report: rawk/n [lo, hi]with exact Clopper-Pearson intervals.
The execute Step 6 registry entry now carries this
measure_cmd(remeasure_on: model_release).
docs/reference/review-effect.mdholds the audit procedure and the pre-registered decision rule. -
Maker advances the pipeline itself (SPEC-maker-advance). After a full-pipeline Start or Resume,
Maker's new Advance rule enters/hm:executeafter spec and/hm:wrapupafter execute, same slug, in the
same session. It stops and reports when a person is owed: an unanswered ask, a SPEC that is not
approved, a failinghm check, anunresolvedfinding, or queued asks. It never pushes. There is no
marker and no hook. The spec and execute hand-off lines say so, and an exempt SPEC can now land locally
with no human touch (IRR-001). -
Every user choice in an hm render goes through the question tool (SPEC-choice-cards). A choice an hm
command or Maker asks is a closed-option card (AskUserQuestion/request_user_input), recommendation
first except for approvals and equal options; without the tool, the same options as a numbered list, and
the stage waits. Thirteen prose-only choice sites were converted, stale CursorAskQuestionmentions are
gone, and/hm:specexempts only atauto_full(IRR-001).
Fixed
-
Rendered texts no longer describe retired machinery (SPEC-retired-text). Agent, skill, command, hook
and Maker texts that still named autoloop, autopilot or the executor now say what runs in 0.64.0; Maker's
autopilot grant and step are gone (IRR-001). -
The bench test's decoy proxy no longer breaks CI (SPEC-bench-decoy-proxy).
test_bench_light_lane
set a deadHTTPS_PROXYthat the runner's ownuv run --withprobe used to reach pypi, so every CI run
on main failed quality-gate; the decoy is nowHTTP_PROXY, which https traffic ignores. -
A Resume after an interrupted execute no longer skips the fixes (SPEC-review-after-fixes). execute now
writeswork-docs/REVIEW-<slug>-<date>.mdonly after its fix loop, listing every round's findings with
their final dispositions. A REVIEW on disk therefore means execute finished, and the digest's
next_stage: wrapupis true only then. An execute re-entered after Bind (no REVIEW, every testable AC
pending_test: false, at least one testable AC) runs Steps 0-2, reruns Bind's gate and goes to Step 4 instead of
redoing RED on implemented code. -
The world-model digest no longer names retired stages (SPEC-maker-advance AC-006, IRR-002). Any REVIEW
now meansnext_stage: wrapup;reviewandverifywere retired in 0.64.0.
Boundary tests (advisory)
Layer 1 of PLAN-test-fidelity-gap. Pure parser checks; advisory only.
Status: ✅ PASS
============================= test session starts ==============================
platform linux -- Python 3.12.15, pytest-9.0.3, pluggy-1.6.0
rootdir: /home/runner/work/harness-maker/harness-maker
configfile: pyproject.toml
plugins: asyncio-1.3.0, anyio-4.14.2, respx-0.23.1, hypothesis-6.155.7, xdist-3.8.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collected 38 items
tests/integration/test_boundary_bench_resume.py s [ 2%]
tests/integration/test_boundary_codex_toml.py ............ [ 34%]
tests/integration/test_boundary_harness_yaml.py ........ [ 55%]
tests/integration/test_boundary_hooks_json.py .... [ 65%]
tests/integration/test_boundary_meta.py ...... [ 81%]
tests/integration/test_boundary_settings_json.py ....... [100%]
======================== 37 passed, 1 skipped in 3.71s =========================