{ "_note": "Harness-24 (S121, 2026-07-15, wave adap-6-broadcast W2) session counter for lead-self-audit cadence. THIS FILE HOLDS STATE ONLY - every cadence NUMBER lives in .claude/agent-memory/memory-budget.json -> h24_cadence (single-source, H24 section 2(3)). Never copy the digits here.", "_why_content_based_not_blind_increment": "Owner-decisions-15-07-2026 Q2, trap found by lane E: the Stop-hook .claude/hooks/wal-flush.ps1 auto-commits on EVERY turn-boundary. A blind counter++ would therefore tick many times per real session and the cadence would be meaningless. So a tick is CONTENT-ADDRESSED: it is keyed on the repo HEAD sha at tick time. Ticking twice on the same HEAD is a NO-OP, which is what makes running /session-start twice in a row safe (acceptance: 2x /session-start on the same HEAD => +1, not +2).", "_why_this_path": "Deliberately .claude/governance/ and NOT .claude/agent-memory/. The hook covers exactly four paths (.claude/WAL.md, agent-memory/, workflows/runs/, sessions/ - the 4th added S146 together with the session-model logic-session folder); .claude/governance/ is OUTSIDE all four, so this file is never swept into a 'wal:' commit as a side effect. Compare .claude/agent-memory/.mfe-state.json, which IS inside the hook's reach - a counter must not live there. RE-VERIFIED at S146 when the 4th path landed: the claim is about the DIRECTORY, and .claude/sessions/ != .claude/governance/, so widening the hook did NOT invalidate it - only the count changed. Any future widening of wal-flush.ps1 MUST re-check this sentence, not just bump the number.", "_contract": { "tick": "tick(session, head): if head == last_ticked_head OR session == last_ticked_session -> NO-OP (idempotent per HEAD AND per session-label). The Stop-hook wal-flush.ps1 moves HEAD mid-session (auto-commit every turn-boundary), so the head-clause alone would let a single real session tick more than once; the session-label clause pins ONE session-label to exactly +1, not +2. This closes the +2/cycle trap: a /pause commit changes HEAD, but the same session-label still NO-OPs. Else counter = counter + 1, last_ticked_session = session, last_ticked_head = head, last_ticked_at = date.", "fail_loud_on_regress": "Two triggers, two verdicts (contract v2 - hub template 58e28bae C-1, adopted S141). (1) counter REGRESSION: an incoming counter LOWER than the stored counter => FAIL-LOUD, report to owner, DO NOT silently reset (a backwards counter means the file was rolled back or hand-edited; a silent reset would hide the cadence gap). (2) last_ticked_head NOT reachable from HEAD => classify BEFORE alarming: if the object still EXISTS in the repo (git cat-file -t
= commit) AND the counter did not regress, this is SQUASH-BENIGN - the tick pointed at a wal:/session commit that the closeout squash lifted out of history; append ONE trace entry to history[] with event-class squash-benign and CONTINUE (no owner alarm; the intact prior session-label corroborates - a benign squash keeps it, tamper does not). Only if the object is MISSING (cat-file fails) OR the counter regressed => FAIL-LOUD as before (anti-tamper layer unchanged). Rationale: every closeout squashes the session wal: commits, so the head captured at the previous tick routinely becomes unreachable-but-present - expected drift, not tampering (3 historical false-FAIL-LOUD cases S127/S133/S139 all reclassify to squash-benign under this contract).", "overdue": "OVERDUE(light) when (counter - last_audit.light_at_counter) >= h24_cadence.light_every. Same shape for deep_every. Skipping sessions does NOT lose the debt - the gap is measured from the counter, not from wall-clock, so a missed session surfaces as OVERDUE rather than vanishing.", "jump": "jump_on_class_repeat (h24_cadence): if ONE flag class from lead_self_audit.flag_classes repeats N times, pull the next audit forward regardless of the counter.", "writer": "Lead is single-writer. Wired at /session-start (W3 owns the ritual; W2 owns this file + its shape)." }, "_tick_invariant_note": "Tick invariant (hub dede7ec5 Delta-1, verbatim): moi LAN-CHOT +1; mot cap dung-noi tang DUNG +1, khong +2, khong +0. SE form = tick-at-entry-gate idempotent-per-label (hub Delta-2 recovery-gate +1 = permitted form) - NET +1/session-label EQUIV hub +1/cap on CLOSED pairs; an OPEN pair is transiently +0 until its entry gate fires (hub blessed, 9a35405b block-1 phep dung-noi). Guard song-con = label-convention (session-start 2.1.8: new conversation = new S