---
id: 11209
title: 'Graduate Discussion #11206 Option A-prime — refined lead/peer-role coordination protocol'
state: CLOSED
labels:
  - documentation
  - enhancement
  - ai
  - architecture
  - model-experience
assignees:
  - neo-opus-ada
createdAt: '2026-05-11T14:05:25Z'
updatedAt: '2026-06-07T17:10:38Z'
githubUrl: 'https://github.com/neomjs/neo/issues/11209'
author: neo-opus-ada
commentsCount: 0
parentIssue: null
subIssues: []
subIssuesCompleted: 0
subIssuesTotal: 0
blockedBy: []
blocking: []
closedAt: '2026-05-11T19:21:48Z'
---
# Graduate Discussion #11206 Option A-prime — refined lead/peer-role coordination protocol

## Context

Graduation Issue from [Discussion #11206](https://github.com/orgs/neomjs/discussions/11206) — 3-way swarm convergence on **Option A-prime** (refined coordination protocol) on 2026-05-11.

**Origin friction-anchor**: operator @tobiu surfaced lead-role discipline gap during today's session:

> *"lead should name a focus item, like neo v13. peers choose their own lanes, write an a2a message to let others know, to avoid conflicting paths, merge conflicts or even picking up the same tickets."*

The 17+ A2A messages from lead during today's session contained ZERO explicit `/peer-role` skill-trigger phrases. Empirical pattern: GPT defaulted to ack-and-idle; Gemini defaulted to self-claim (35-second-margin parallel-PR collision on PR #11203 narrowly avoided). Operator manually intervened to break the pattern.

**Cross-family convergence sources**:
- @neo-gpt's Option A-prime refinement: [discussioncomment-16879172](https://github.com/neomjs/neo/discussions/11206#discussioncomment-16879172) — live source-of-authority collision check at lane-claim time
- @neo-gemini-pro's OQ refinements: [MESSAGE:4a917ae0](https://github.com/neomjs/neo/discussions/11206#discussioncomment-16879975) (14:00Z) — OQ1 (read-only exempt) + OQ3 (`Current Public Authority > Handoff A2A > Recent Lane Claim`)
- @neo-opus-ada (author) consensus comment + graduation: [discussioncomment-16879975](https://github.com/neomjs/neo/discussions/11206#discussioncomment-16879975)

## The Problem

Current `lead-role-mode.md` + `peer-role-mode.md` + AGENTS.md §15.6 anchor codify:
- The Flat Peer-Team principle ("lead doesn't delegate lanes; lead surfaces options")
- The lead-role and peer-role mode-discipline payloads
- The activation-mechanism for `/pr-review` skill-trigger (per `pull-request-workflow §6.2`)

What's MISSING (per Discussion #11206 evidence):
- **Focus-naming mandate** (lead step 2): no required practice of naming strategic focus area on lead-role activation
- **Explicit `/peer-role` skill-trigger mandate** (lead step 3): captured narrowly by #11205 + PR #11208 (in flight) — this Issue subsumes that piece + extends
- **Lane-announce-A2A protocol** (peer step 5): no required practice of announcing lane-choice via A2A before write-operations
- **Live source-of-authority collision check** (peer step 6 per Option A-prime): no required practice of checking current assignee + open PRs + recent A2As + write-surface boundary at lane-claim time
- **Conflict-resolution hierarchy** (per OQ3): no codified ordering between competing claims

## The Architectural Reality

**File:line surfaces touched** (V-B-A'd via operator + cross-family convergence):

- `.agents/skills/lead-role/references/lead-role-mode.md` — focus-naming mandate addition (extends existing §2.1 Coordination Pattern); #11205's §2.2 explicit-trigger mandate already in flight via PR #11208 (commit `475ff6d5f`)
- `.agents/skills/peer-role/references/peer-role-mode.md` — lane-announce-A2A protocol + collision-check protocol + conflict-resolution hierarchy + OQ1 read-only exemption
- `AGENTS.md` §15.6 — 2-3 line compressed pointer (mirror of §3.5 V-B-A pointer pattern from Step 2.5 graduation)
- Cross-references: `pull-request-workflow §6.2` (mirrored pattern), `ideation-sandbox-workflow §5.2` (Step 2.5 sweep), `#11195` 30-day validation tracker

## The Fix

### AC1: `lead-role-mode.md` focus-naming mandate

Extend §2.1 Coordination Pattern (or add new §2.3) with focus-naming mandate. Lead step 2: "Lead names a strategic focus item — neither too-broad ('Neo v13' = 300+ items) nor too-narrow ('PR #N fix' = direct assignment). Sample-correct grain: Epic-level, substrate-cluster-level, major-feature-level. Per §15.6 'lead surfaces options' → focus must afford ≥2-3 self-selectable lanes."

### AC2: `peer-role-mode.md` lane-announce-A2A protocol + collision-check + conflict-resolution

Add new section(s) mandating:

**Lane-announce-A2A protocol** (peer step 5):
- BEFORE any write-operation (state mutation, PR open, issue assignment), peer MUST send A2A broadcast with subject `[lane-claim] taking #N` (or equivalent)
- A2A body includes: scope-boundary statement, expected write-surface, predicted timeline
- READ-ONLY diagnostic sweeps EXEMPT per OQ1

**Source-of-authority collision check** (peer step 6 per Option A-prime):
- Pre-claim check: `gh issue view <N>` for current assignee; `gh pr list` for open PRs touching same write-surface; recent A2A mailbox scan for lane-claim broadcasts in past 30 minutes
- Surface findings in the lane-claim A2A (e.g., "I see #11198 is unassigned; no open PRs touching IssueSyncer.mjs; no recent lane-claim A2As — claiming")

**Conflict-resolution hierarchy** (per OQ3):
- `Current Public Authority (assignee + open PR + write-surface) > Handoff A2A (explicit baton-pass) > Recent Lane Claim (timing)`
- If 2 peers self-select same lane: peer-with-Current-Public-Authority wins; peer-with-Recent-Lane-Claim yields (or transitions to peer-role review)
- Today's empirical anchor: PR #11199 Gemini's `[lane-claim] AC4 (#11196) claimed` at 12:33:49Z lost to PR #11203 already-opened at 12:33:14Z by 35-second margin under current-but-not-yet-codified Authority-hierarchy

### AC3: AGENTS.md §15.6 compressed pointer

2-3 line addition to §15.6 (mirror of §3.5 Step 2.5 pointer pattern):

```
**Mechanical coordination protocol** (per Discussion #11206 graduation): lead-role focus-naming + explicit /peer-role skill-trigger + peer lane-announce-A2A + source-of-authority collision check + conflict-resolution hierarchy. Substantive content in `.agents/skills/lead-role/references/lead-role-mode.md` + `.agents/skills/peer-role/references/peer-role-mode.md`. Auto-fires on /lead-role activation.
```

### AC4: Cross-family validation hook to #11195

`#11195` (Step 2.5 30-day post-merge validation tracker) extends AC6 to inherit lead-role + peer-role coordination protocol compliance tracking. At Day-30 retrospective, audit next 3 lead-role sessions:
- Did lead name focus? Y/N + scope-correct
- Did lead use explicit `/peer-role` trigger phrases? Y/N for each substrate-validation A2A
- Did peers send lane-announce-A2As before write-operations? Y/N for each PR-open
- Did peers run source-of-authority collision check? Y/N for each lane-claim
- Were any collisions resolved by Authority-hierarchy? Y/N + outcome

### AC5: Subsume #11205 + #11208

This ticket's AC1 + AC3 explicitly subsume #11205 (#11208 in flight) which captures the narrow explicit-trigger mandate piece. Post-PR-#11208 merge + post-this-ticket-implementation, the full Option A-prime protocol is codified durably.

## Contract Ledger Matrix

| Target Surface | Source of Authority | Proposed Behavior | Fallback | Docs | Evidence |
|---|---|---|---|---|---|
| `lead-role-mode.md` focus-naming mandate | Discussion #11206 OQ2 resolution | Lead names focus on /lead-role activation with ≥2-3 self-selectable lanes | If focus is too-broad/too-narrow, peers signal back via A2A | Inline in skill payload | Verify next 3 lead-role sessions use scope-correct focus |
| `peer-role-mode.md` lane-announce-A2A protocol | Discussion #11206 + OQ1 resolution | Peer sends `[lane-claim]` A2A before write-operations; read-only sweeps exempt | If peer skips, lead-role + cross-family review catch via Authority-hierarchy | Inline in skill payload | Verify lane-claim A2A precedes every PR-open + issue-assignment for 30 days |
| `peer-role-mode.md` collision-check protocol | Discussion #11206 Option A-prime + #10164 substrate | Pre-claim gh-CLI + A2A scan; findings surfaced in lane-claim A2A | If peer skips, parallel-claim collision risk per PR #11199 + PR #11203 empirical anchors | Inline in skill payload | Verify collision-prevented rate post-merge (currently 0 collisions today only by 35-sec timing margin) |
| `peer-role-mode.md` conflict-resolution hierarchy | Discussion #11206 OQ3 resolution | `Current Public Authority > Handoff A2A > Recent Lane Claim` | Tie-break via cross-family A2A | Inline in skill payload | Verify next 3 conflict-resolution incidents follow the hierarchy |
| `AGENTS.md` §15.6 compressed pointer | Discussion #11206 + this Issue | 2-3 line pointer (mirror §3.5 Step 2.5 pattern) | None — pointer-only constraint | Inline | Verify §15.6 byte-count addition ≤350 bytes |

## Acceptance Criteria

- [ ] **AC1**: `lead-role-mode.md` focus-naming mandate added (extends §2.1 OR new §2.3); ≥2-3 self-selectable-lanes constraint codified per OQ2
- [ ] **AC2**: `peer-role-mode.md` lane-announce-A2A protocol + collision-check protocol + conflict-resolution hierarchy + OQ1 read-only exemption added
- [ ] **AC3**: `AGENTS.md` §15.6 compressed pointer added (≤350 bytes; mirror §3.5 Step 2.5 pattern)
- [ ] **AC4**: `#11195` 30-day Step 2.5 validation tracker AC6 extended to inherit lead/peer-role coordination protocol compliance audits
- [ ] **AC5**: Subsume #11205 (PR #11208 in flight) — explicitly cite this ticket as the broader-protocol superset
- [ ] **AC6 (post-merge verification)**: Within 30 days of merge, observe ≥2 lead-role sessions using the full 7-step protocol (focus-name + explicit-trigger + lane-announce + collision-check + Authority-hierarchy); empirical pass rate ≥80% else file recalibration ticket

## Out of Scope

- Automating the collision-check (post-A2A NLP parse, ticket-create-time validation gate) — discipline-tier substrate for now; mechanical-enforcement automation deferred to follow-up if discipline proves load-bearing after 30-day window
- Mechanical-enforcement for focus-naming (no machine-check; relies on lead discipline)
- Cross-substrate identity canonicalization (separate concern; #11181/#11182 family)
- AGENTS.md §3.5 V-B-A core-value modification (only §15.6 compressed pointer extends here)

## Avoided Traps

- **Hierarchical lead-assigns-lanes** (Option E in Discussion #11206 matrix): rejected per AGENTS.md §15.6 anti-pattern explicit. Lead does NOT delegate worker-slices; lead surfaces focus + activates skill-modes; peers retain agency.
- **Lane-announce-A2A on every routine action**: rejected per OQ1 — read-only sweeps exempt. Discipline-fatigue mitigation.
- **Pure-timing conflict resolution** (first-PR-open wins): rejected per Option A-prime — Current Public Authority hierarchy supersedes timing. Today's PR #11199 vs PR #11203 35-second margin is exactly the case that motivated this refinement.
- **Mandating explicit /peer-role trigger on every A2A** (including pure-informational coordination): rejected per #11205 §2.2 scope — only substantive substrate-validation work warrants the trigger.
- **Subsuming the broader substrate-discipline cluster** (#11195 + #11192 + #11030 + this): rejected per OQ5 resolution — keep as separate anchor-tickets; each has distinct surface + trigger.

## Related

- **Discussion #11206** (parent ideation; 3-way swarm convergence)
- **#11205** + **PR #11208** (in flight; narrow explicit-trigger mandate piece; AC1 subsumes; AC5 cites)
- **#11195** (Step 2.5 30-day post-merge validation tracker; AC6 inherits cross-validation coverage)
- **#11192** + **PR #11194** (MERGED; Step 2.5 Architectural Step-Back; this Issue is the convergence-phase coordination companion to Step 2.5's divergence-phase gate)
- **AGENTS.md §15.6** (Flat Peer-Team Anchor; this Issue's mechanical-codification target)
- **`pull-request-workflow §6.2`** (mirrored `/pr-review` skill-trigger mandate; PR #11127 cycle-1 empirical anchor)
- **#10164** (pre-PR overlap detection; empirical anchor #1 for the collision-check protocol; today's session is anchor #3 for that ticket)
- **PR #11199 vs PR #11203 35-second margin** (today's collision-near-miss empirical anchor for Authority-hierarchy resolution)

## Origin Session ID

`c2912891-b459-4a03-b2af-154d5e264df1` (continuing in `c0d5c29d-dc70-44c8-b5af-d3f6c59936ee`)

## Handoff Retrieval Hints

- `query_raw_memories(query="lead-role peer-role coordination protocol focus-naming lane-announce collision-check Option A-prime")`
- `ask_knowledge_base(query="lead-role peer-role skill discipline activation A2A mandate")`
- Discussion convergence anchors: `https://github.com/neomjs/neo/discussions/11206#discussioncomment-16876724` (GPT Option A-prime) + `16879975` (Opus consensus + graduation)
- File anchors: `.agents/skills/{lead-role,peer-role}/references/` + `AGENTS.md §15.6` + `pull-request-workflow §6.2`

## Timeline

- 2026-05-11T14:05:27Z @neo-opus-ada added the `documentation` label
- 2026-05-11T14:05:27Z @neo-opus-ada added the `enhancement` label
- 2026-05-11T14:05:27Z @neo-opus-ada added the `ai` label
- 2026-05-11T14:05:28Z @neo-opus-ada added the `ai-generated` label
- 2026-05-11T14:05:28Z @neo-opus-ada added the `architecture` label
- 2026-05-11T14:05:28Z @neo-opus-ada added the `model-experience` label
- 2026-05-11T14:05:35Z @neo-opus-ada assigned to @neo-opus-ada
- 2026-05-11T14:10:10Z @neo-gpt cross-referenced by PR #11208
- 2026-05-11T15:39:25Z @neo-opus-ada cross-referenced by PR #11219
- 2026-05-11T16:38:26Z @neo-opus-ada cross-referenced by PR #11223
- 2026-05-11T16:48:37Z @neo-opus-ada cross-referenced by #11195
- 2026-05-11T17:08:33Z @neo-opus-ada referenced in commit `449198a` - "fix(agents): correct §2.3 scope-calibration — structure not count (#11209)

Operator surfaced direct contradiction in PR #11223 substrate immediately
post-Cycle-2-APPROVED + pre-merge:

> *"https://github.com/orgs/neomjs/projects/12/views/2 => not too broad.
> don't underestimate the team. you could easily choose from there."*

The Cycle 1 §2.3 scope-calibration table classified "Neo v13" as too-broad
(300+ items), but the SAME section's empirical anchor cites operator's own
"focus item is neo v13" quote as sample-correct usage. Substrate-truth-vs-claim
drift in code I just shipped, caught pre-merge by operator V-B-A on the v13
Project board view 2.

**The bug**: I conflated COUNT with STRUCTURE. A 300-item project board with
priority+state filters IS navigable; an undifferentiated 30-item dump is not.
Calibration metric is structure, not raw count.

**The fix**:
- Too-broad: undifferentiated backlog with no curated view / no priority signal / no triage state
- Sample-correct: structured option-space (curated views, epic decomposition, labels) including "Neo v13" via the v13 Project board view 2 — 300+ items count is irrelevant when structure exists
- Validation reflex rewrites "≥2 lanes / 50+ streams" to "can peers navigate the option-space via existing structure?"
- Added explicit "trust peer capability" calibration nudge (don't underestimate the team)

Operator's empirical anchor quote now lands consistently: "neo v13" IS the
operator's sample-correct usage; the substrate now agrees.

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>"
- 2026-05-11T17:10:50Z @neo-opus-ada referenced in commit `5dfb2a0` - "fix(agents): correct §2.3 board-state numbers (V-B-A failure on substrate I just shipped) (#11209)

Second operator-surfaced correction on §2.3 in same session:

> *"we do have 300 open issues, but that is the entire backlog. board: 45
> todo, 5 in progress, but they do have subs (not all)"*

Cycle 1 wrote "Neo v13 (300+ items)" — hallucinated number. The 300 is the
ENTIRE repo backlog, not v13. The v13 Project board view 2 has ~45 Todo +
~5 In Progress (with sub-ticket decomposition). Numbers should never have
been on the v13 reference at all.

This is the SECOND V-B-A failure on this section in same session:
- Cycle 1: Tier-classification contradicted empirical anchor (caught by operator)
- Cycle 2 fixup (449198a3e): kept ambiguous numerics without grounding (caught by operator)

Meta-failure: I authored AGENTS.md §3.5 V-B-A core-value substrate in PR #11219
(now merged) and immediately violated it on §2.3 numerics in PR #11223. Should
have queried the board state via `gh api graphql` or `gh project list` before
asserting any count.

Lesson absorbed: when authoring substrate with empirical references (project
boards, ticket counts, repo state), V-B-A the numbers IS mandatory. Vague
language ("across the milestone backlog") is honesty-shaped but still ungrounded.

Fix:
- Too-broad reference is now "full ~300-issue repo backlog" (correct anchor)
- Sample-correct v13 example states "~45 Todo + ~5 In Progress" empirically
- Empirical anchor section explicitly contrasts whole-repo-300 vs curated-v13-50

Structure-not-count framing strengthens: 50 actionable items via curated view
is comfortably navigable. The earlier 300-item count was the wrong reference
on the wrong side of the calibration line.

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>"
- 2026-05-11T17:13:21Z @neo-opus-ada referenced in commit `3878711` - "fix(agents): ground §2.3 board numerics fully — 250 total / 200 Done / 50 actionable (#11209)

Third operator-surfaced correction on §2.3 in same session:

> *"board: 200 are done (to be fair)"*

Prior fixup 5dfb2a0a1 said "~45 Todo + ~5 In Progress" — partial picture.
Operator notes the board ALSO has ~200 Done items representing history/provenance
behind state filters. Total board: ~250 items, of which ~200 Done is filterable
out, leaving ~50 actionable as the live navigation surface.

My partial-V-B-A via `gh api graphql` `first: 100` cap silently truncated:
returned 75 Done + 2 In Progress + 23 Todo = 100, missing 150 items. Real
totalCount was 250. Lesson: GraphQL pagination caps silently lie about
"complete" state — must paginate to get truth.

This 3rd fixup grounds the numerics fully:
- 250 total board items
- ~200 Done as filterable history/provenance
- ~50 actionable (~45 Todo + ~5 In Progress) as live navigation surface
- Sub-tickets decompose further

The structure-not-count framing strengthens: 250 items navigable via state
filter is structurally simpler than 50 unstructured items would be. The
filter IS the structural device that makes the count irrelevant.

Added explicit framing: "200 Done items aren't noise — they're provenance/
context that the filter makes optional, not blocking."

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>"
- 2026-05-11T19:21:49Z @tobiu referenced in commit `c133cd2` - "feat(agents): graduate Discussion #11206 Option A-prime — lead/peer coordination protocol (#11209) (#11223)

* feat(agents): graduate Discussion #11206 Option A-prime — lead/peer coordination protocol (#11209)

Codifies the 5-step refined coordination protocol from Discussion #11206 Option A-prime
3-way convergence (Opus + Gemini + GPT). Subsumes #11205 (PR #11208 narrow trigger
mandate) which captured step 3 only.

**lead-role-mode.md §2.3** (AC1) — Focus-Naming and Scope Calibration:
- Lead MUST name strategic focus alongside lane-pick (not optional)
- Scope grain: too-broad / sample-correct / too-narrow with ≥2-3 self-selectable-lanes constraint
- Empirical anchor: operator @tobiu 2026-05-10 "i pick lane A. focus item is neo v13"
- Anti-pattern: claiming lane without stating focus = §15.6 orchestrator-worker drift

**peer-role-mode.md §6.5** (AC2 part 1) — Lane-Announce-A2A Protocol:
- Write-operations require [lane-claim] A2A broadcast before execution
- OQ1 carve-out: read-only diagnostic sweeps exempt
- A2A shape: subject + scope-boundary + timeline + collision findings

**peer-role-mode.md §6.6** (AC2 part 2) — Source-of-Authority Collision Check:
- 3-step check: gh issue view assignee + gh pr list write-surface + recent lane-claim A2A scan
- Conflict-resolution hierarchy: Current Public Authority > Handoff A2A > Recent Lane Claim
- Empirical anchor: PR #11199 vs PR #11203 35-second-margin near-miss

**peer-role-mode.md §7** (AC2 part 3) — 2 new anti-patterns added:
- Lane-claim without source-of-authority collision check
- Lane-claim for read-only sweep (over-triggering)

**AGENTS.md §15.6** (AC3) — 290-byte compressed pointer (under 350-byte cap):
- Mirrors §3.5 Step 2.5 pointer pattern + §15.6 Consensus-mandate pointer just shipped

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>

* fix(agents): correct §2.3 scope-calibration — structure not count (#11209)

Operator surfaced direct contradiction in PR #11223 substrate immediately
post-Cycle-2-APPROVED + pre-merge:

> *"https://github.com/orgs/neomjs/projects/12/views/2 => not too broad.
> don't underestimate the team. you could easily choose from there."*

The Cycle 1 §2.3 scope-calibration table classified "Neo v13" as too-broad
(300+ items), but the SAME section's empirical anchor cites operator's own
"focus item is neo v13" quote as sample-correct usage. Substrate-truth-vs-claim
drift in code I just shipped, caught pre-merge by operator V-B-A on the v13
Project board view 2.

**The bug**: I conflated COUNT with STRUCTURE. A 300-item project board with
priority+state filters IS navigable; an undifferentiated 30-item dump is not.
Calibration metric is structure, not raw count.

**The fix**:
- Too-broad: undifferentiated backlog with no curated view / no priority signal / no triage state
- Sample-correct: structured option-space (curated views, epic decomposition, labels) including "Neo v13" via the v13 Project board view 2 — 300+ items count is irrelevant when structure exists
- Validation reflex rewrites "≥2 lanes / 50+ streams" to "can peers navigate the option-space via existing structure?"
- Added explicit "trust peer capability" calibration nudge (don't underestimate the team)

Operator's empirical anchor quote now lands consistently: "neo v13" IS the
operator's sample-correct usage; the substrate now agrees.

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>

* fix(agents): correct §2.3 board-state numbers (V-B-A failure on substrate I just shipped) (#11209)

Second operator-surfaced correction on §2.3 in same session:

> *"we do have 300 open issues, but that is the entire backlog. board: 45
> todo, 5 in progress, but they do have subs (not all)"*

Cycle 1 wrote "Neo v13 (300+ items)" — hallucinated number. The 300 is the
ENTIRE repo backlog, not v13. The v13 Project board view 2 has ~45 Todo +
~5 In Progress (with sub-ticket decomposition). Numbers should never have
been on the v13 reference at all.

This is the SECOND V-B-A failure on this section in same session:
- Cycle 1: Tier-classification contradicted empirical anchor (caught by operator)
- Cycle 2 fixup (449198a3e): kept ambiguous numerics without grounding (caught by operator)

Meta-failure: I authored AGENTS.md §3.5 V-B-A core-value substrate in PR #11219
(now merged) and immediately violated it on §2.3 numerics in PR #11223. Should
have queried the board state via `gh api graphql` or `gh project list` before
asserting any count.

Lesson absorbed: when authoring substrate with empirical references (project
boards, ticket counts, repo state), V-B-A the numbers IS mandatory. Vague
language ("across the milestone backlog") is honesty-shaped but still ungrounded.

Fix:
- Too-broad reference is now "full ~300-issue repo backlog" (correct anchor)
- Sample-correct v13 example states "~45 Todo + ~5 In Progress" empirically
- Empirical anchor section explicitly contrasts whole-repo-300 vs curated-v13-50

Structure-not-count framing strengthens: 50 actionable items via curated view
is comfortably navigable. The earlier 300-item count was the wrong reference
on the wrong side of the calibration line.

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>

* fix(agents): ground §2.3 board numerics fully — 250 total / 200 Done / 50 actionable (#11209)

Third operator-surfaced correction on §2.3 in same session:

> *"board: 200 are done (to be fair)"*

Prior fixup 5dfb2a0a1 said "~45 Todo + ~5 In Progress" — partial picture.
Operator notes the board ALSO has ~200 Done items representing history/provenance
behind state filters. Total board: ~250 items, of which ~200 Done is filterable
out, leaving ~50 actionable as the live navigation surface.

My partial-V-B-A via `gh api graphql` `first: 100` cap silently truncated:
returned 75 Done + 2 In Progress + 23 Todo = 100, missing 150 items. Real
totalCount was 250. Lesson: GraphQL pagination caps silently lie about
"complete" state — must paginate to get truth.

This 3rd fixup grounds the numerics fully:
- 250 total board items
- ~200 Done as filterable history/provenance
- ~50 actionable (~45 Todo + ~5 In Progress) as live navigation surface
- Sub-tickets decompose further

The structure-not-count framing strengthens: 250 items navigable via state
filter is structurally simpler than 50 unstructured items would be. The
filter IS the structural device that makes the count irrelevant.

Added explicit framing: "200 Done items aren't noise — they're provenance/
context that the filter makes optional, not blocking."

Co-Authored-By: Claude Opus 4.7 <neo-opus-4-7@neomjs.com>

---------

Co-authored-by: tobiu <tobiasuhlig78@gmail.com>"
- 2026-05-11T19:21:49Z @tobiu closed this issue
- 2026-05-18T23:52:50Z @neo-gpt cross-referenced by #11609
- 2026-05-20T18:17:26Z @neo-opus-ada cross-referenced by #11307

