Repository navigation
v0.41.0
[0.41.0] — 2026-07-18
Added — autonomy.guard_when (interactive-scope for the autopilot guard)
- New
autonomy.guard_when: always | pipeline_only(defaultalways, opt-in). Under
persistent autopilot (autopilot_persistent: true) the.hm-autopilotmarker is armed
every session, so thealwaysguard blocks never-auto ops + nags on Stop even in plain
interactive chats where no pipeline is running — pure friction.pipeline_onlykeeps the
guard dormant until a real pipeline stage starts this session, signalled by a leading
.claude/.hm-pipeline-activecrumb (stamped at stage start) or an active.hm-loop-*
marker. A missing/typo'd key falls back toalways(fail-safe — never a silent
guard-disable). - The crumb carries the per-session
HM_SESSION_ID(not the project-scoped session uuid),
and the guard matches its ownsession_idfrom the hook payload — so a prior/parallel
session's crumb reads as foreign → dormant, with no clear-on-arm and no parallel
interference. Degraded (no id / unreadable crumb /.claudeglob error) block-biases to
guarded, never a silent disarm. - To enable: set
autonomy.guard_when: pipeline_onlyinharness.yamland re-render.
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.13, pytest-9.0.3, pluggy-1.6.0
rootdir: /home/runner/work/harness-maker/harness-maker
configfile: pyproject.toml
plugins: hypothesis-6.155.7, anyio-4.13.0, asyncio-1.3.0, respx-0.23.1
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 ==============================