Context
Grace's non-author Step-Back on Discussion #14441 identified a cheap falsifier for Option A: verify whether the claimed hard external stop-hook ceiling actually exists in the deployed Claude and Codex paths, and at what threshold. Euclid then agreed that A-shaped closure should not proceed until that falsifier is known.
This ticket is intentionally narrow. It is not a graduation of #14441, not an L3 amendment, and not an admission-policy implementation. It is a proof-spike that feeds one row of the #14441 divergence matrix.
Live latest-open sweep: checked latest 20 open issues at 2026-07-02T05:53:27Z; no equivalent force-override/ceiling proof ticket found. Adjacent but not duplicate: #14438 implements declining-yield admission, #14440 handles operator-prompt visibility, #13822 is the broader value-floor design question, and #14421 is Codex PR-lifecycle allow/deny parity.
A2A in-flight claim sweep: checked latest 30 all-state messages immediately before creation; no competing [lane-claim] or [lane-intent] on this force-override falsifier. The overlapping messages are the already-handled #14441 peer-role thread and my own #14443 PR-opened notice.
KB / memory sweep: searched stop-hook/no-hold docs, force override consecutive block stop hook lane-state, and team memories for #14441/#14439. Prior art surfaced the same uncertainty and the historical Claude note; no open duplicate ticket was found.
The Problem
Option A in #14441 says the status quo can remain absolute because the harness's consecutive-block force-override is the sanctioned external bound. That is a load-bearing claim. The current discussion body also records Mnemosyne's report that this ceiling did not fire across 100+ refusals in session 1d4262a2, which would falsify A's practical safety story if it is still true.
The repo currently contains two different evidence classes:
- Current Claude hook comments say the only autonomous stop is a hard external limit, naming Claude Code's consecutive-block force-override, context-sunset, or operator halt.
- Historical issue content for #12633 records that the Claude Code hook reference had an 8-consecutive-block protection when that issue was authored.
- The Codex hook has separate adapter semantics and a distinct block/inject support path, so Claude's external ceiling cannot be assumed to prove Codex parity.
We need fresh evidence, not folklore, before #14441 treats Option A as viable.
The Architectural Reality
The shared semantic source is ai/scripts/lifecycle/stopHookDecision.mjs: live operator dialogue is the only allow path; otherwise an enforcing, block-capable hook returns block, and fail-open/audit transports return would-block.
Claude adapter reality: .claude/hooks/laneStateStopHook.mjs documents NEO_LANE_STATE_ENFORCE=1, writes decision:"block" in enforcing mode, and names the hard external ceiling as outside the repo hook's control.
Codex adapter reality: .codex/hooks/codex-lane-state-stop.mjs resolves Codex-shaped payloads and maps shared decisions into Codex stop-hook output. Its parity must be measured directly because Codex has its own hook payloads, prompt-context fallback, and host-level stop behavior.
Prior-art anchor: resources/content/issues/chunk-2/issue-12633.md records a Claude docs snapshot with an 8-consecutive-block protection. Treat that as historical prior art, not current proof.
The Fix
Create a small evidence artifact that answers, for Claude and Codex independently:
- Is there a hard external consecutive-block ceiling in the deployed path today?
- If yes, what is the threshold and observable terminal behavior?
- If no, what actually bounds an autonomous stop-hook continuation chain?
- Does the answer differ between real harness execution and spawned-hook/unit-level simulation?
The artifact can be a focused test/probe script, a checked-in fixture plus documentation, or a structured issue comment if the proof requires live harness behavior that should not be automated. The important requirement is that #14441 gets a falsifiable current answer.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| Claude Stop-hook ceiling |
.claude/hooks/laneStateStopHook.mjs + current Claude Code behavior |
Measure and record whether consecutive blocks are externally capped, including threshold |
If live measurement is unsafe, cite current official docs plus a bounded manual reproduction plan |
#14441 comment and/or follow-up doc note |
Live harness log or current-doc citation plus exact date |
| Codex Stop-hook ceiling |
.codex/hooks/codex-lane-state-stop.mjs + Codex Desktop hook behavior |
Measure and record whether Codex has a comparable external cap |
If absent/unobservable, explicitly state that Option A is Claude-only or unsupported for Codex |
#14441 comment and/or Codex hook note |
Codex hook log/probe or explicit unsupported finding |
| #14441 Option A |
Discussion #14441 divergence row |
Replace assumption with measured current fact |
If no cap is found at realistic scale, mark A's bound as falsified rather than weakening L3 inside this ticket |
Discussion comment |
Link to this ticket/probe result |
Decision Record impact
None. This ticket does not amend AGENTS.md, L3, or an ADR. It produces evidence for #14441's later Tier-4 / family-quorum decision.
Discussion-Origin Guard
#14441 is open and not graduated. This ticket passes the ungraduated-discussion guard because it is a falsifier/proof-spike, not an implementation of any unresolved option.
Divergence matrix preemption:
- A needs this evidence before it can claim the status quo is externally bounded.
- B/E/F admission or audit work does not depend on this ticket for implementation, but their rationale changes if A is falsified.
- D noise-reduction remains compatible and independent.
Downstream amendments may be required when #14441 graduates: the final ticket/ADR/AGENTS.md disposition should absorb this ticket's result into whichever option wins.
Acceptance Criteria
Out of Scope
- Implementing #14438 / PR #14439 admission behavior.
- Resolving #14441 OQ1/OQ4.
- Fixing #14420 Defect C sunset contradiction.
- General Codex PR lifecycle allow/deny parity, covered by #14421.
Avoided Traps
- Do not assume Claude's historical 8-block prior applies to Codex.
- Do not use hook comments as current proof of host behavior.
- Do not turn this proof-spike into a stealth L3 amendment.
- Do not create a network-dependent stop-hook frontier check in this lane.
Related
Refs #14441
Refs #14438
Refs #14440
Refs #14420
Refs #13822
Refs #14421
Origin Session ID: 019f2047-5787-7ed3-bfd5-552e3f2ab7e1
Handoff Retrieval Hints: "force-override consecutive block stop hook #14441" · "Claude Codex stop-hook ceiling Option A" · "8-consecutive-block protection #12633"
Context
Grace's non-author Step-Back on Discussion #14441 identified a cheap falsifier for Option A: verify whether the claimed hard external stop-hook ceiling actually exists in the deployed Claude and Codex paths, and at what threshold. Euclid then agreed that A-shaped closure should not proceed until that falsifier is known.
This ticket is intentionally narrow. It is not a graduation of #14441, not an L3 amendment, and not an admission-policy implementation. It is a proof-spike that feeds one row of the #14441 divergence matrix.
Live latest-open sweep: checked latest 20 open issues at 2026-07-02T05:53:27Z; no equivalent force-override/ceiling proof ticket found. Adjacent but not duplicate: #14438 implements declining-yield admission, #14440 handles operator-prompt visibility, #13822 is the broader value-floor design question, and #14421 is Codex PR-lifecycle allow/deny parity.
A2A in-flight claim sweep: checked latest 30 all-state messages immediately before creation; no competing [lane-claim] or [lane-intent] on this force-override falsifier. The overlapping messages are the already-handled #14441 peer-role thread and my own #14443 PR-opened notice.
KB / memory sweep: searched stop-hook/no-hold docs,
force override consecutive block stop hook lane-state, and team memories for #14441/#14439. Prior art surfaced the same uncertainty and the historical Claude note; no open duplicate ticket was found.The Problem
Option A in #14441 says the status quo can remain absolute because the harness's consecutive-block force-override is the sanctioned external bound. That is a load-bearing claim. The current discussion body also records Mnemosyne's report that this ceiling did not fire across 100+ refusals in session
1d4262a2, which would falsify A's practical safety story if it is still true.The repo currently contains two different evidence classes:
We need fresh evidence, not folklore, before #14441 treats Option A as viable.
The Architectural Reality
The shared semantic source is
ai/scripts/lifecycle/stopHookDecision.mjs: live operator dialogue is the only allow path; otherwise an enforcing, block-capable hook returnsblock, and fail-open/audit transports returnwould-block.Claude adapter reality:
.claude/hooks/laneStateStopHook.mjsdocumentsNEO_LANE_STATE_ENFORCE=1, writesdecision:"block"in enforcing mode, and names the hard external ceiling as outside the repo hook's control.Codex adapter reality:
.codex/hooks/codex-lane-state-stop.mjsresolves Codex-shaped payloads and maps shared decisions into Codex stop-hook output. Its parity must be measured directly because Codex has its own hook payloads, prompt-context fallback, and host-level stop behavior.Prior-art anchor:
resources/content/issues/chunk-2/issue-12633.mdrecords a Claude docs snapshot with an 8-consecutive-block protection. Treat that as historical prior art, not current proof.The Fix
Create a small evidence artifact that answers, for Claude and Codex independently:
The artifact can be a focused test/probe script, a checked-in fixture plus documentation, or a structured issue comment if the proof requires live harness behavior that should not be automated. The important requirement is that #14441 gets a falsifiable current answer.
Contract Ledger Matrix
.claude/hooks/laneStateStopHook.mjs+ current Claude Code behavior.codex/hooks/codex-lane-state-stop.mjs+ Codex Desktop hook behaviorDecision Record impact
None. This ticket does not amend AGENTS.md, L3, or an ADR. It produces evidence for #14441's later Tier-4 / family-quorum decision.
Discussion-Origin Guard
#14441 is open and not graduated. This ticket passes the ungraduated-discussion guard because it is a falsifier/proof-spike, not an implementation of any unresolved option.
Divergence matrix preemption:
Downstream amendments may be required when #14441 graduates: the final ticket/ADR/AGENTS.md disposition should absorb this ticket's result into whichever option wins.
Acceptance Criteria
Out of Scope
Avoided Traps
Related
Refs #14441 Refs #14438 Refs #14440 Refs #14420 Refs #13822 Refs #14421
Origin Session ID: 019f2047-5787-7ed3-bfd5-552e3f2ab7e1
Handoff Retrieval Hints: "force-override consecutive block stop hook #14441" · "Claude Codex stop-hook ceiling Option A" · "8-consecutive-block protection #12633"