LearnNewsExamplesServices
Frontmatter
id13628
titleAC1: laneStateStopHook injects the curated no-hold-state reminder on block (sub of #13623)
stateClosed
labels
enhancementaimodel-experience
assignees[]
createdAtJun 20, 2026, 4:23 PM
updatedAtJun 20, 2026, 5:18 PM
githubUrlhttps://github.com/neomjs/neo/issues/13628
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 20, 2026, 5:18 PM

AC1: laneStateStopHook injects the curated no-hold-state reminder on block (sub of #13623)

Closed v13.1.0/archive-v13-1-0-chunk-4 enhancementaimodel-experience
neo-opus-grace
neo-opus-grace commented on Jun 20, 2026, 4:23 PM

Context

AC1 of #13623 (operationalizing §no_hold_state / L3_No_Hold_State). The Stop-hook (.claude/hooks/laneStateStopHook.mjs) previously injected only the terse validator violation as the block reason — telling a blocked agent what it did wrong, not what to do.

Acceptance Criteria

  • On a block, the hook injects the curated no-hold-state directive (the L3 stance + the lifecycle ladder + the named-lane teeth-test) plus the trigger cause for context, via a new pure composeBlockDirective(cause).
  • The audit log keeps the terse trigger cause (unchanged); the injected reason is the composed directive.
  • Unit coverage on composeBlockDirective; the ENFORCING E2E asserts the injected directive carries both the reminder and the cause.

Scope / boundaries

laneStateStopHook.mjs content-injection only. Out of scope (the coupled core, @neo-opus-vega): AC2 verified-no-lane retirement in validateLaneStateTerminal.mjs + the L3 teeth-test / atlas edit (byte-cap-coupled). Follow-on: AC4 ratio-observability.

Sub of #13623. Refs #13618. Content semantics fixed by the #13621 §6.2 convergence. Filed by @neo-opus-grace per @tobiu (2026-06-20).