Repository navigation
v0.61.0
[0.61.0] - 2026-10-02
Added
- World model follow-ups: a briefing digest instead of ledger greps.
hm world_model digest
is a read-only, at most 1.5 KB JSON briefing (newest tasks first, capped at 5) with an
artifact-derivednext_stage(approved SPEC, then REVIEW exists, then REVIEW APPROVED, then a
fresh verify marker, then wrapup; a spanendis a turn end, not stage completion) and an
other_sessionflag. It reads the autopilot marker file directly (neverautopilot.status,
which migrates and GCs), matches slugs exactly (a siblingdemo-twonever leaks intodemo) and
checks artifacts only for the shown tasks under a 5 s deadline. The router briefs via!
injection with a fallback (Codex: one bash line) and resumes fromnext_stage;/hm:help
lists the router; the always-loaded## World modelpointer is shorter (at most 200 chars at the
max name/handle). Interactive name/handle messages follow the locale;--add/--remove
skill:world-model|<handle>are refused (the router is not a modular skill);commands/make.md
forwards--world-model-name/--world-model-handleon every dispatch; U+FFFE / U+FFFF are
rejected in names. - Named world model.
harness.yamlgainsworld_model: {name, handle}(defaultMaker/
maker, validated at load; a missing handle is derived from the name, an absent key equals the
explicit default). One router skill renders atskills/<handle>/SKILL.md(and
.agents/skills/<handle>/for Codex) from a fixed template and only routes to existing surfaces
(stages,intent-layer,project-knowledge, read-only status); its stage lookup reads the
ledger from the git base root so it works inside a task worktree. The name is asked right after
locale in the interview,commands/make.md,--ciand/hm:configure; a short## World model
pointer is added to every always-loaded variant. Reserved names,hm-*, bad grammar and length
are rejected; a handle that equals a user-owned skill dir is kept and named in a warning. Renaming
sweeps the pristine old router and keeps edited files. hm review_churn attributestampscaused_bydeterministically. It diffs the round's
fix commit (git diff -U0), maps each finding's line to the new-side hunks, and stamps only
findings whosecaused_byis unset. Round label convention: REVIEW round N <-> churn ref
r{N}. Carried ids come from the same-run persisted payload store; a malformed file is left
untouched. A fix-defect-rate report reads the stamped values.hm observability.verification_cache runowns gate execution and the marker. It runs the
CI-derived commands, writes awriter: runmarker (withcommands_sha256) only when every
gate passes and the key is stable, and/hm:verifyand/hm:wrapuptrust only that marker
for skip. Gates run in their own process group with cleanup on interrupt and a bounded reap;
the stage recipe runs it in the background because the suite exceeds a foreground host cap.- CLAUDE.md character budget beside the line budget (Side 16,000 / Production 40,000
characters, also AGENTS.md), folded into the existing readiness signal. Over-budget sections
moved verbatim todocs/reference/*.md, which the documentation contract treats as
historical snapshots.
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 50 items
tests/integration/test_boundary_codex_toml.py ............ [ 24%]
tests/integration/test_boundary_cursor_mdc.py ....... [ 38%]
tests/integration/test_boundary_harness_yaml.py ........ [ 54%]
tests/integration/test_boundary_hooks_json.py ......... [ 72%]
tests/integration/test_boundary_meta.py ....... [ 86%]
tests/integration/test_boundary_settings_json.py ....... [100%]
============================== 50 passed in 3.77s ==============================