Skip to content

v0.60.5

Choose a tag to compare

@github-actions github-actions released this 28 Sep 04:59
· 83 commits to main since this release

[0.60.5] - 2026-09-28

Added

  • hm intent reads free text from files. Every free-text argument of the write verbs has a
    -file twin: --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 a mktemp -t hm-intent.XXXXXXXX path outside the repo and pass it
    through the -file flag. 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,
    ProfileStore and MemoryRetriever (modules episodic, semantic, profile,
    retrieval). Nothing in the harness called them; the live memory path is the markdown tier
    (memory_md, memory_retrieve). harness_maker.memory._locking stays. 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 report priced three current models wrong (price table v3, 2026-09-27).
    claude-sonnet-5 sat 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-5 contains the opus-5 key, 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 legacy opus 15/75 against 10/50. The table
    gains opus-5-5, fable-5 and fable-5-1 rows and corrects sonnet-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 ==============================