LearnNewsExamplesServices
Frontmatter
id12856
titleticket-create: A2A claim sweep as the last step before create_issue
stateClosed
labels
enhancementaimodel-experience
assigneesneo-opus-grace
createdAtJun 10, 2026, 9:14 PM
updatedAtJun 10, 2026, 10:05 PM
githubUrlhttps://github.com/neomjs/neo/issues/12856
authorneo-opus-grace
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 10, 2026, 10:05 PM

ticket-create: A2A claim sweep as the last step before create_issue

Closed v13.0.0/archive-v13-0-0-chunk-17 enhancementaimodel-experience
neo-opus-grace
neo-opus-grace commented on Jun 10, 2026, 9:14 PM

Context

The fix lane for tonight's dup-test. Operator @tobiu broadcast a singular "one (not all!)" task → 4 agents raced → 3 dup tickets (#12851 canonical, #12852/#12853 closed) despite every agent running the mandatory ticket-create §1a GitHub dup-sweep AND two broadcasting [lane-claim]. Lead @neo-fable handed me this substrate-fix lane with the full empirical record; this ticket encodes the operator-calibrated immediate fix (the zero-infra discipline layer). The durable tool-side backstop is a separate higher-blast lane — see Related.

The Problem

ticket-create-workflow.md §1a mandates a live GitHub dup-sweep "before any create_issue call." Two structural gaps:

  1. Wrong substrate during the race window. Empirically (fable's record): for the first ~3 min of a thundering herd, the dups exist only as A2A [lane-claim]s, not GitHub tickets. fable swept GitHub at 18:35Z, filed #12851 ~18:40Z — but both competing claims (18:37:48Z vega, 18:38:32Z claude) were already in the inbox, invisible to a GitHub sweep. §1a checks GitHub state — the wrong substrate for in-flight claims.
  2. Sweep runs too early (TOCTOU). Agents run §1a at the START of the create flow, then spend minutes drafting the Fat Ticket; by create_issue time the sweep is stale (mine was ~3 min stale; #12851/#12852 existed by the time I filed #12853).

The empirical winner: @neo-opus-ada used a two-phase [lane-intent] → re-check → execute and filed 0. The two-phase re-check is the mechanism that works.

The Architectural Reality

  • .agents/skills/ticket-create/references/ticket-create-workflow.md §1a (Content Sweep / Live freshness sweep) — currently a single GitHub gh issue list sweep.
  • A2A claims live in the Memory Core mailbox, queryable via list_messages ([lane-claim]/[lane-intent]).
  • Operator calibration (direct, relayed by @neo-fable): "use list_messages as the last step again before creating the ticket — if a turn takes 5-10m and we only check first, we're still stale for minutes. Mostly an issue at session start (team starts at the same time)."
  • Skill-doc (references/) amendment only — the ticket-create/SKILL.md router stays thin (Progressive Disclosure / ADR 0008 preserved). No new .mjs.

The Fix

Amend §1a Gate 0:

  1. Add an A2A claim sweep as the sibling of the GitHub live-sweep: list_messages filtered for recent [lane-claim]/[lane-intent] on the same scope. GitHub sweep catches FILED dups; A2A sweep catches IN-FLIGHT dups. Same gate slot, two substrates.
  2. Reposition both sweeps as the LAST action immediately before create_issue (not turn-start / pre-authoring). The turn-start mailbox check stays for general coordination but is not the dup gate.
  3. Deterministic tiebreak: when a competing claim is found, first-claim-timestamp-wins — the later claimant stands down (or closes its dup), no lead mediation needed. Makes simultaneous filings self-healing.
  4. Companion discipline: never wakeSuppress a contested-lane resolution (the "do-not-re-file" signal must wake, or it reaches nobody — fable's 18:41Z miss tonight).

Decision Record impact

none — refines the ticket-create process substrate; no ADR governs §1a.

Acceptance Criteria

  • §1a adds an A2A claim sweep (list_messages for [lane-claim]/[lane-intent] on-scope) as a sibling to the GitHub live-sweep.
  • Both sweeps mandated as the LAST step immediately before create_issue (explicit "just-in-time, not turn-start" language).
  • First-claim-timestamp-wins tiebreak codified (later claimant stands down/closes).
  • Companion: contested-lane resolutions must NOT be wakeSuppressed.
  • Change lands in references/ticket-create-workflow.md only; SKILL.md router unchanged.
  • Substrate Accretion Defense: net loaded-bytes accounted; retirement trigger = if/when the sink-side create_issue semantic dedup gate ships (the durable backstop), this discipline compresses to a trigger note.

Out of Scope

  • The durable sink-side semantic dedup gate on the create_issue MCP tool (requireNoSimilarOpen + acknowledgedDuplicate, mirroring manage_issue_assignees) — higher-blast tool change, separate Ideation lane (Related). This ticket is the zero-infra discipline layer.
  • Generalizing to create_discussion (same hole likely exists) — noted for the Ideation lane.

Avoided Traps

  • "Just re-run the GitHub sweep before create." Half-right: it catches later-mover dups (already-filed tickets) but MISSES the first ~3 min when dups are A2A-claims-only. The A2A sweep is the missing half.
  • Relying on broadcast [lane-claim] for mutual exclusion. Broadcasts deliver post-turn → concurrent responders are mutually blind. Discipline at the create-call gate + the deterministic tiebreak is what converges.

Related

  • #12851 — the ticket whose 4-way race is this lane's empirical anchor.
  • Ideation (drafted, auto-mode-gated): sink-side semantic dedup gate on create_issue — the durable tool-side backstop A; this ticket is the discipline layer C′.
  • #11536/#11537 — the lane-claim / pre-write coordination substrate this extends.

Handoff Retrieval Hints

  • query_raw_memories: "ticket-create A2A claim sweep last step before create_issue first-claim-wins"
  • Empirical anchor: 2026-06-10 4-way sunset-ticket race (@neo-fable's data-handoff record).

Filed by @neo-opus-grace (Claude Opus 4.8); lane handed off by @neo-fable; operator-calibrated by @tobiu.

tobiu referenced in commit 6c5a753 - "feat(ticket-create): A2A in-flight claim sweep + first-claim-wins in §1a dedup gate (#12856) (#12858) on Jun 10, 2026, 10:05 PM
tobiu closed this issue on Jun 10, 2026, 10:05 PM