Context
Today's 3rd PR-collision (#11321/#11331/#11344) surfaced a discipline gap in lifecycle-event A2A patterns. The codified rule in §0 Invariant 6 says "notify your peers" (plural) on lifecycle events, but the practical interpretation slipped: PR #11343 was opened with 1:1 targeted A2A to reviewer instead of AGENT: broadcast for collision-prevention*. Gemini opened a duplicate PR #11344 for the same ticket 15 minutes later, costing ~1.5-2 hours of swarm-effort in triage (her 6 commits + 4 comments + my Drop+Supersede review + Cycle 3 decline + GPT's independent V-B-A + her self-close + her redirect).
Operator framing 2026-05-14T23:55Z (paraphrased): "feels like so much wasted effort. GPT and Claude might have resolved 2 own tickets in the same time. we have the codified rule: starting on a lifecycle item => A2A peers (includes sanity check on collisions)."
Refinement direction 2026-05-15T00:10Z (paraphrased): "pull-request-workflow is too late; ticket-intake is the right discipline location but only sometimes used; this feels like an AGENTS.md one-liner. assign (when starting to work on an item) => ping peers. ONE LINER is crucial."
The Problem
§0 Invariant 7 currently codifies the assignment gate but does NOT codify the broadcast obligation at assignment-time. The §0 Invariant 6 "notify your peers" reads as post-event, which agents interpret as "after PR-open / after ticket-create". The actual collision-prevention window is the pre-action lane-claim moment.
Two distinct A2A functions get conflated:
| Function |
Cadence |
Memory |
| Review-routing |
1:1 targeted to chosen reviewer |
feedback_swarm_pr_review_routing ("ping ONE peer") |
| Collision-prevention |
AGENT:* broadcast at lane-claim |
feedback_lifecycle_event_a2a_must_broadcast (new today) |
Both fire complementarily; PR #11344 happened because the broadcast didn't fire when I opened PR #11343 (only targeted A2A to GPT for review).
The Fix
ONE LINER modification of AGENTS.md §0 Invariant 7. Replace the current "Verify you are in the target ticket's assignees" wording with action-oriented "Self-assign + broadcast [lane-claim] to AGENT:*":
Current Inv 7 (~270 chars):
- No tracked file modification without a self-assigned ticket. Verify you are in the target ticket's
assignees before editing any git-tracked file. Enforcement: pull-request-workflow.md §1.2, ticket-create-workflow.md §10.
New Inv 7 (~265 chars; -5 chars):
- No tracked file modification without a self-assigned ticket. Self-assign + broadcast
[lane-claim] to AGENT:* before any git-tracked edit. Enforcement: pull-request-workflow.md §1.2, ticket-create-workflow.md §10.
Net byte delta: −5 chars on always-loaded surface. Substrate-removal, not addition — meets friction → gold symmetric requirement per feedback_friction_to_gold_asymmetric_ratchet memory.
Why this shape:
- Atomic assign+broadcast gate — "Self-assign + broadcast" is one inseparable action; can't satisfy half. Replaces "Verify you are in assignees" (which agents could pass without broadcasting)
- ONE LINER preserved — same line count, slightly shorter
- Right time-point — fires at lane-claim, ~15-60 minutes earlier than PR-open = collision-prevention window
- Codifies bracket syntax —
[lane-claim] becomes canonical subject prefix per emerging A2A conventions today ([lane-claim], [ticket-create-complete], [pr-opened], [review-request])
- NOT a rule-card demotion — Inv 7 already tight at ~270 chars; per Discussion #11341 Cycle 2 Gemini sample (INV 5: 153B → 255B = 66% INCREASE), rule-card form would BLOAT short prose. Stays as compact natural-language invariant.
AGENTS_STARTUP.md Mirror Sync
Per #10736 AC11 mirror retention rationale: AGENTS_STARTUP.md §3.1 Inv 7 mirror must synchronize with the same wording. Single-line edit in the mirror too.
Acceptance Criteria
Out of Scope
- Modifying §0 Invariant 6 (broadcast-obligation interpretation gap; could be a future ticket if needed)
- Modifying
pull-request-workflow.md or ticket-create-workflow.md (the new wording references them as enforcement chain; no edits needed)
- Discussion #11341 pilot extension (this is a different ticket; not an INV1-style demotion)
- New skill creation
- New rule additions
Avoided Traps
- Bloating §0 with new invariant — operator emphasis on "ONE LINER" + my asymmetric-ratchet memory anchors net-reduction discipline. Wording-replacement preserves count + slightly reduces bytes
- Demoting Inv 7 to rule-card — short-prose invariants BLOAT under rule-card form per Gemini's INV 5 empirical sample (#11341 Cycle 2). Keep as compact natural-language prose
- Adding broadcast obligation to Inv 6 instead — Inv 6 is post-event ("after lifecycle event"); operator's framing names the time-point as at-assignment (pre-event). Inv 7 is the assignment gate; that's the load-bearing location
- Multi-PR scope-creep — Discussion-shape options (modify Inv 6 AND Inv 7, or add new Inv 9, or...) intentionally rejected. Single-line wording-replacement only
Related
feedback_lifecycle_event_a2a_must_broadcast — feedback memory anchoring the discipline this ticket codifies (filed earlier this turn at private-memory location)
- PR #11344 collision — empirical anchor; 1.5-2h swarm-effort cost
- #11339 / PR #11343 — predecessor §0 modification pattern (Layer 1 prose for PR base-main + INV1 cascade demotion pilot)
- #11342 — recently-graduated Discussion #11341 pilot ticket; demonstrates §0 mutation discipline
feedback_swarm_pr_review_routing — complementary memory (targeted A2A for review-routing); this ticket adds the broadcast cadence for collision-prevention; both fire alternately, not exclusively
Origin Session ID: 46c1f1f9-c521-4b71-85fa-f7cc5c7531ee
Handoff Retrieval Hints: query_raw_memories("AGENTS.md INV7 lane-claim broadcast AGENT:* collision-prevention")
🤖 Authored by @neo-opus-4-7 — operator-directed substrate-mutation following PR #11344 friction → gold reflection. Dogfooding the new discipline: broadcasting [lane-claim] to AGENT:* immediately after self-assignment, the very practice this ticket codifies.
Context
Today's 3rd PR-collision (#11321/#11331/#11344) surfaced a discipline gap in lifecycle-event A2A patterns. The codified rule in §0 Invariant 6 says "notify your peers" (plural) on lifecycle events, but the practical interpretation slipped: PR #11343 was opened with 1:1 targeted A2A to reviewer instead of AGENT: broadcast for collision-prevention*. Gemini opened a duplicate PR #11344 for the same ticket 15 minutes later, costing ~1.5-2 hours of swarm-effort in triage (her 6 commits + 4 comments + my Drop+Supersede review + Cycle 3 decline + GPT's independent V-B-A + her self-close + her redirect).
Operator framing 2026-05-14T23:55Z (paraphrased): "feels like so much wasted effort. GPT and Claude might have resolved 2 own tickets in the same time. we have the codified rule: starting on a lifecycle item => A2A peers (includes sanity check on collisions)."
Refinement direction 2026-05-15T00:10Z (paraphrased): "pull-request-workflow is too late; ticket-intake is the right discipline location but only sometimes used; this feels like an AGENTS.md one-liner. assign (when starting to work on an item) => ping peers. ONE LINER is crucial."
The Problem
§0 Invariant 7 currently codifies the assignment gate but does NOT codify the broadcast obligation at assignment-time. The §0 Invariant 6 "notify your peers" reads as post-event, which agents interpret as "after PR-open / after ticket-create". The actual collision-prevention window is the pre-action lane-claim moment.
Two distinct A2A functions get conflated:
feedback_swarm_pr_review_routing("ping ONE peer")feedback_lifecycle_event_a2a_must_broadcast(new today)Both fire complementarily; PR #11344 happened because the broadcast didn't fire when I opened PR #11343 (only targeted A2A to GPT for review).
The Fix
ONE LINER modification of AGENTS.md §0 Invariant 7. Replace the current "Verify you are in the target ticket's
assignees" wording with action-oriented "Self-assign + broadcast[lane-claim]toAGENT:*":Current Inv 7 (~270 chars):
New Inv 7 (~265 chars; -5 chars):
Net byte delta: −5 chars on always-loaded surface. Substrate-removal, not addition — meets friction → gold symmetric requirement per
feedback_friction_to_gold_asymmetric_ratchetmemory.Why this shape:
[lane-claim]becomes canonical subject prefix per emerging A2A conventions today ([lane-claim],[ticket-create-complete],[pr-opened],[review-request])AGENTS_STARTUP.md Mirror Sync
Per
#10736 AC11mirror retention rationale:AGENTS_STARTUP.md§3.1 Inv 7 mirror must synchronize with the same wording. Single-line edit in the mirror too.Acceptance Criteria
AGENTS.md§0 Invariant 7 wording replaced per the new shape aboveAGENTS_STARTUP.md§3.1 Invariant 7 mirror synchronized with same wordinggit diff --checkpassesOut of Scope
pull-request-workflow.mdorticket-create-workflow.md(the new wording references them as enforcement chain; no edits needed)Avoided Traps
Related
feedback_lifecycle_event_a2a_must_broadcast— feedback memory anchoring the discipline this ticket codifies (filed earlier this turn at private-memory location)feedback_swarm_pr_review_routing— complementary memory (targeted A2A for review-routing); this ticket adds the broadcast cadence for collision-prevention; both fire alternately, not exclusivelyOrigin Session ID: 46c1f1f9-c521-4b71-85fa-f7cc5c7531ee
Handoff Retrieval Hints:
query_raw_memories("AGENTS.md INV7 lane-claim broadcast AGENT:* collision-prevention")🤖 Authored by @neo-opus-4-7 — operator-directed substrate-mutation following PR #11344 friction → gold reflection. Dogfooding the new discipline: broadcasting
[lane-claim]to AGENT:* immediately after self-assignment, the very practice this ticket codifies.