LearnNewsExamplesServices
Frontmatter
id13575
titleLint lane-state terminals for fresh gate evidence
stateClosed
labels
enhancementaiarchitecturemodel-experience
assigneesneo-opus-ada
createdAtJun 20, 2026, 2:26 AM
updatedAtJun 20, 2026, 7:09 AM
githubUrlhttps://github.com/neomjs/neo/issues/13575
authorneo-gpt
commentsCount0
parentIssue10777
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 20, 2026, 7:09 AM

Lint lane-state terminals for fresh gate evidence

Closed v13.1.0/archive-v13-1-0-chunk-4 enhancementaiarchitecturemodel-experience
neo-gpt
neo-gpt commented on Jun 20, 2026, 2:26 AM

Context

Operator feedback on 2026-06-20 surfaced the same #10777 failure class in two active peers: a wake/FYI message was correctly classified as low-action, but the turn then ended without asking the second question: "do I have an active lane, or did I verify that no lane exists?"

Fresh anchors:

  • Vega ended reactive on stale gates: PR #13568 was already merged and follow-up #13570 was open/assigned.
  • Ada independently reported the same failure: #13561 and #13567 were cited as "at the merge gate" even though both had already merged.
  • Ada's #10777 peer-role comment (IC_kwDODSospM8AAAABG3UdYg) converges on the two-phase wakeDisposition / laneContinuation split and adds three refinements: awaiting-own-PR is not active-lane, named gates need same-turn checkedAt, and verified-no-lane needs a full backlog survey.

Release classification: boardless (Agent OS stability follow-up; not release-blocking unless the operator explicitly boards it).

Duplicate sweep: live latest-open sweep at 2026-06-20T00:25Z found #10777 as the source family and #12612/#12633/#11829 as broader wake-driver enforcement work, but no narrow terminal-evidence lint ticket. A2A recency sweep at 2026-06-20T00:25Z found Ada's #10777 peer-role comment and no competing lane-claim for this exact leaf.

The Problem

The current substrate says the right thing, but agents can still launder idling through disciplined-sounding terminal prose:

  • wakeDisposition=awareness|stale answers only whether to engage the message; it does not answer whether the turn has an active lane.
  • awaiting-own-PR on merge/review/CI is a background watch, not active-lane.
  • A terminal that names an issue or PR gate can be stale unless it cites same-turn live evidence.
  • verified-no-lane can collapse into an own-PR or own-epic slice instead of a named full-backlog survey.

This has recurred despite #13197, the current /post-review-pickup wording, and multiple memories. More prose alone is losing to rationalization.

The Architectural Reality

The source-of-authority family is #10777. The operative substrate already includes:

  • .agents/skills/post-review-pickup/references/post-review-pickup-workflow.md: lifecycle cycle, lane-state: boundary, PR-state freshness gate, and no generic idle terminal.
  • .agents/skills/peer-role/references/peer-role-mode.md: stale-wake silent-mark-read anti-pattern.
  • ai/daemons/wake/wakeLaneDirective.mjs: narrowed hard never-idle directive after #13197.

This ticket is deliberately smaller than #12633. #12633 is the deferred external liveness enforcement layer that independently computes claimable work through deployment-aware state. This ticket only validates the evidence shape of an agent-authored turn-terminal claim so stale gate names and own-slice verified-no-lane claims are mechanically rejected.

The Fix

Add a focused terminal-evidence lint/check on the existing Agent OS lint/tooling surface chosen during implementation intake. The checker should validate machine-readable or conventionally structured lane-state / turn-terminal text in lifecycle artifacts (final responses, A2A lifecycle handoffs, or the selected persisted turn-boundary surface) without becoming a contribution counter.

Rules to encode:

  1. wakeDisposition=awareness|stale|suppressed is not a turn terminal unless paired with laneContinuation.
  2. laneContinuation=active-lane explicitly excludes awaiting-own-PR states: own PR waiting on merge, review, or CI resolves to next-lane unless the author has concrete work on that PR.
  3. Any terminal that names a PR or issue gate must cite a same-turn checkedAt for each named artifact.
  4. verified-no-lane must cite a named full-backlog survey artifact (list_issues, gh issue list, or equivalent) with checkedAt and a considered-lanes summary. Own-PR-only or own-epic-only surveys fail.
  5. Valid next-lane, blocker-routed, and active implementation/review states must pass without requiring backlog survey noise.

If implementation modifies .agents/skills/**, follow Progressive Disclosure: keep always-loaded/router deltas minimal, move rule body into the relevant payload or lint docs, and include the /turn-memory-pre-flight load-effect audit in the PR body.

Contract Ledger Matrix

Target Surface Source of Authority Proposed Behavior Fallback / Edge Case Evidence
Turn-terminal lint/check #10777 latest body + Ada peer-role comment IC_kwDODSospM8AAAABG3UdYg Reject stale or under-evidenced lane-state terminal claims If a lifecycle artifact is not parseable, warn/fail with a targeted message naming the missing shape Unit fixtures for valid next-lane, stale gate, own-PR watch, and verified-no-lane cases
checkedAt gate evidence /post-review-pickup PR-state freshness gate Any named PR/issue gate must include same-turn live-check evidence Awareness/no-op messages with an already active lane do not need backlog proof Fixture with #13568 stale gate class fails without checkedAt
verified-no-lane evidence #10777 Turn-terminal boundary AC Must include a full backlog survey artifact, not only own PRs If backlog tooling is unavailable, terminal must route a blocker and choose another lane where possible Fixture with own-PR-only survey fails; named backlog survey passes
Relationship to #12633 #12633 deferral comment This ticket validates the author-provided terminal evidence shape only It must not implement deployment-aware external claimability enforcement PR body states no contribution counter, FAIR band, central assignment, or Stop-hook enforcement

Decision Record Impact

None. This is aligned with #10777 and the #11829/#12630 lineage, while explicitly avoiding the deferred #12633 external-enforcement scope.

Acceptance Criteria

  • A focused lint/check exists for turn-terminal evidence shape in the chosen Agent OS lifecycle artifact surface.
  • Tests fail a stale named gate without same-turn checkedAt.
  • Tests fail active-lane when the only cited lane is awaiting-own-PR on merge/review/CI.
  • Tests fail verified-no-lane when the evidence is only an own-PR/own-epic slice and lacks a named full-backlog survey.
  • Tests pass valid next-lane, blocker-routed, active review/implementation, and verified-no-lane with a named backlog survey.
  • The PR documents why the implementation is not a contribution counter, FAIR band, central assignment mechanism, or #12633 external claimability engine.
  • If .agents/skills/** changes, the source ticket carries the Contract Ledger and the PR body carries the load-effect audit required by the skill substrate gate.

Out of Scope

  • Full external liveness enforcement / Stop-hook behavior from #12633.
  • Provider-backed claimability computation across GitHub/GitLab/cloud tenants.
  • Contribution counting, PR quotas, FAIR bands, scoreboards, or central lane assignment.
  • Changing the human-only merge rule.

Related

Parent/source family: #10777

Broader deferred enforcement: #11829, #12612, #12633

Recent evidence anchors: #13561, #13567, #13568, #13570

Retrieval Hint: wakeDisposition laneContinuation checkedAt verified-no-lane backlog survey awaiting-own-PR terminal lint