Repository navigation
v0.60.5
[0.60.5] - 2026-09-28
Added
hm intentreads free text from files. Every free-text argument of the write verbs has a
-filetwin:--claim-file,--text-file(question add/observe/resolve),
--evidence-file(metric record),--note-file(close),--title-file,
--statement-file,--scope-file,--out-of-scope-file,--declined-file(new). A file
is read as UTF-8; a single value keeps its content minus trailing newlines, a list takes one
item per non-empty line, and an empty value or list is refused. Each argument takes exactly one
form (at most one when optional), and every refusal happens before anything is written. The
inline flags are unchanged.
Changed
- Rendered intent writes carry paths, not text. wrapup Step 5.7, spec Step 4.9, the
intent-layer skill and project-knowledge's hand-off now tell the agent to write each value
with the Write tool to amktemp -t hm-intent.XXXXXXXXpath outside the repo and pass it
through the-fileflag. This closes the prompt-only quote-breakout residual accepted in
sdlc-three-loops-gap. The recipes need this release of the CLI; a harness rendered from it
fails against an older plugin cache. - One boundary between
[wiki:fact]and intent questions, rendered in both the
project-knowledge and intent-layer skills: a claim that bears on an intent's metric or
decision is an intent question; any other domain fact is a[wiki:fact]; each claim lives
in one place and links to the other. project-knowledge now routes such a claim to
intent-layer before its wiki write. Applies to new claims only. - Measurement note: this lands 2026-09-27, inside the pre-registered
wiki_fact_entries_28d
window (2026-09-19..10-17), and moves intent-bearing claims out of[wiki:fact]. The
thresholds are unchanged; read the 10-17 count against this landing date.
Removed
- The JSONL memory tier in
harness_maker.memory—EpisodicStore,SemanticStore,
ProfileStoreandMemoryRetriever(modulesepisodic,semantic,profile,
retrieval). Nothing in the harness called them; the live memory path is the markdown tier
(memory_md,memory_retrieve).harness_maker.memory._lockingstays. The
.claude/memory/{semantic,episodic,profile}/gitignore and churn entries stay too, so a
project that still has those directories sees no new dirt.
Fixed
hm economics reportpriced three current models wrong (price table v3, 2026-09-27).
claude-sonnet-5sat at the 4.x rate of 3/15 against a published 2/10, which overstated
every Sonnet-run reviewer by 1.5x.claude-opus-5-5contains theopus-5key, so it
resolved to 5/25 against a published 4/20 and left no family-priced trace.claude-fable-5-1
matched no key at all and fell back to the legacyopus15/75 against 10/50. The table
gainsopus-5-5,fable-5andfable-5-1rows and correctssonnet-5, including the
lower cache-read multipliers (0.05x on Opus 5.5, 0.025x on Fable 5.1). Reports are
recomputed from raw transcripts, so re-running one reprices its historical window.
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.14, pytest-9.0.3, pluggy-1.6.0
rootdir: /home/runner/work/harness-maker/harness-maker
configfile: pyproject.toml
plugins: asyncio-1.3.0, respx-0.23.1, anyio-4.13.0, 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 4.87s ==============================