Context
Operator-greenlit friction item from live economics dialogue (2026-07-24 evening): the swarm's Claude seats consumed 63% of the weekly fable allocation and 53% all-models within ~17h of the flatrate reset. At full-team occupancy, the largest available flatrate drains in ~3 days followed by 4 dark days. The L3 no-hold discipline and its stop hook (.claude/hooks/laneStateStopHook.mjs) currently optimize drive-per-turn under an implicit infinite-budget assumption.
The Problem
The hook's terminal-acceptance model knows lanes, gates, and artifact keys — but no cost signal. Empirical from one session (this ticket's origin): the hook refused multiple terminals late in a very deep session during a live operator conversation about exactly this budget constraint. Marginal continuations of a deep session are not free; under flatrate reality, the same artifact is sometimes cheaper bought by a fresh session (or a rotated peer) tomorrow.
The honest counter-datum, banked in the same session: one of those refusals was RIGHT — it pushed a fully-diagnosed zero-exploration fix (the logger fail-loud) to immediate execution, where deferral would have paid re-hydration cost for nothing. So the fix is cost-AWARENESS, not cost-capitulation: the hook should distinguish "fresh drive available cheaply" from "deep-session marginal continuation," not weaken the anti-idle stance.
The Architectural Reality
.claude/hooks/laneStateStopHook.mjs — the terminal validator (drive-ratchet, artifact keys, clean-terminal acceptance as the hook's external call).
- The Memory Core holds ground truth for session weight (per-session turn counts, tool-call volumes — "MC contains truth", operator directive: measure, don't guess burn).
session-sunset — the sanctioned graceful exit; rotation-by-lane-phase (operator friction item 1) leans on exactly this machinery.
The Fix (direction — implementer refines)
Extend clean-terminal acceptance with a session-weight input: when (a) all named gates are non-self, (b) the drive-ratchet/artifact key is satisfied, AND (c) a burn signal crosses a threshold (candidates: MC-derived turn/tool-call count for the session; an operator-declared budget state the hook can read), the hook accepts the terminal and RECOMMENDS sunset-handoff instead of demanding further continuation. Below the threshold, current behavior unchanged. The signal must be mechanical (no self-declared tiredness — that is the L3 loophole the hook exists to close).
Acceptance Criteria
Out of Scope
Weakening L3 for idle states; per-token accounting; rotation scheduling itself (operator-owned).
Decision Record impact
none — hook-local policy refinement; the L3 principle is unchanged.
Related
§L3_No_Hold_State (CLAUDE.md) · session-sunset skill · the #15851/#15875 sessions as the empirical pair (one refusal wrong-shaped, one right-shaped).
Live latest-open sweep: checked latest 15 open + KB semantic at 2026-07-24T23:17Z; no equivalent found (nearest: byte-budget lints, different axis). Scope originates from an operator dialogue minutes prior — no in-flight peer claims possible.
Origin Session ID: fed0f707-b481-432f-a5d9-587cc0325942
Retrieval Hint: query_raw_memories("stop hook cost aware terminal flatrate burn session weight sunset")
Authored by Clio (@neo-fable-clio, Fable). 📜
Context
Operator-greenlit friction item from live economics dialogue (2026-07-24 evening): the swarm's Claude seats consumed 63% of the weekly fable allocation and 53% all-models within ~17h of the flatrate reset. At full-team occupancy, the largest available flatrate drains in ~3 days followed by 4 dark days. The L3 no-hold discipline and its stop hook (
.claude/hooks/laneStateStopHook.mjs) currently optimize drive-per-turn under an implicit infinite-budget assumption.The Problem
The hook's terminal-acceptance model knows lanes, gates, and artifact keys — but no cost signal. Empirical from one session (this ticket's origin): the hook refused multiple terminals late in a very deep session during a live operator conversation about exactly this budget constraint. Marginal continuations of a deep session are not free; under flatrate reality, the same artifact is sometimes cheaper bought by a fresh session (or a rotated peer) tomorrow.
The honest counter-datum, banked in the same session: one of those refusals was RIGHT — it pushed a fully-diagnosed zero-exploration fix (the logger fail-loud) to immediate execution, where deferral would have paid re-hydration cost for nothing. So the fix is cost-AWARENESS, not cost-capitulation: the hook should distinguish "fresh drive available cheaply" from "deep-session marginal continuation," not weaken the anti-idle stance.
The Architectural Reality
.claude/hooks/laneStateStopHook.mjs— the terminal validator (drive-ratchet, artifact keys, clean-terminal acceptance as the hook's external call).session-sunset— the sanctioned graceful exit; rotation-by-lane-phase (operator friction item 1) leans on exactly this machinery.The Fix (direction — implementer refines)
Extend clean-terminal acceptance with a session-weight input: when (a) all named gates are non-self, (b) the drive-ratchet/artifact key is satisfied, AND (c) a burn signal crosses a threshold (candidates: MC-derived turn/tool-call count for the session; an operator-declared budget state the hook can read), the hook accepts the terminal and RECOMMENDS sunset-handoff instead of demanding further continuation. Below the threshold, current behavior unchanged. The signal must be mechanical (no self-declared tiredness — that is the L3 loophole the hook exists to close).
Acceptance Criteria
Out of Scope
Weakening L3 for idle states; per-token accounting; rotation scheduling itself (operator-owned).
Decision Record impact
none — hook-local policy refinement; the L3 principle is unchanged.
Related
§L3_No_Hold_State(CLAUDE.md) ·session-sunsetskill · the #15851/#15875 sessions as the empirical pair (one refusal wrong-shaped, one right-shaped).Live latest-open sweep: checked latest 15 open + KB semantic at 2026-07-24T23:17Z; no equivalent found (nearest: byte-budget lints, different axis). Scope originates from an operator dialogue minutes prior — no in-flight peer claims possible.
Origin Session ID: fed0f707-b481-432f-a5d9-587cc0325942 Retrieval Hint:
query_raw_memories("stop hook cost aware terminal flatrate burn session weight sunset")Authored by Clio (@neo-fable-clio, Fable). 📜