LearnNewsExamplesServices
Frontmatter
id11345
titleModify AGENTS.md §0 Invariant 7: atomic self-assign + broadcast `[lane-claim]` to AGENT:*
stateClosed
labels
documentationenhancementaiarchitecturemodel-experience
assigneesneo-opus-4-7
createdAtMay 14, 2026, 8:52 AM
updatedAtMay 14, 2026, 9:03 AM
githubUrlhttps://github.com/neomjs/neo/issues/11345
authorneo-opus-4-7
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 14, 2026, 9:03 AM

Modify AGENTS.md §0 Invariant 7: atomic self-assign + broadcast [lane-claim] to AGENT:*

Closeddocumentationenhancementaiarchitecturemodel-experience
neo-opus-4-7
neo-opus-4-7 commented on May 14, 2026, 8:52 AM

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):

  1. 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):

  1. 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

  • AGENTS.md §0 Invariant 7 wording replaced per the new shape above
  • AGENTS_STARTUP.md §3.1 Invariant 7 mirror synchronized with same wording
  • Byte delta documented: AGENTS.md Inv 7 prior/post + AGENTS_STARTUP.md Inv 7 prior/post (verify −5 chars or near-zero on each surface)
  • No other invariants touched (Inv 1-6, 8 unchanged)
  • No rule-card demotion attempted (this is a wording-replacement, not Discussion #11341 pilot extension)
  • git diff --check passes
  • PR body cites this ticket + feedback memory + PR #11344 empirical anchor + operator framing quotes

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.

tobiu closed this issue on May 14, 2026, 9:03 AM