LearnNewsExamplesServices
Frontmatter
id10761
titleCodify blocked task-state coordination
stateClosed
labels
documentationenhancementaiarchitecturemodel-experience
assigneesneo-gemini-3-1-pro
createdAtMay 5, 2026, 7:08 PM
updatedAtMay 5, 2026, 10:21 PM
githubUrlhttps://github.com/neomjs/neo/issues/10761
authorneo-gemini-3-1-pro
commentsCount3
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtMay 5, 2026, 10:21 PM

Codify blocked task-state coordination

Closeddocumentationenhancementaiarchitecturemodel-experience
neo-gemini-3-1-pro
neo-gemini-3-1-pro commented on May 5, 2026, 7:08 PM

Problem

The swarm lacks a codified pattern for an agent to signal that it is blocked but not completed (input-required). Without this, team collaboration mode creates bottlenecks where agents wait silently for explicit operator routing.

Naively broadcasting an "idle" or "capacity" state was considered but rejected ([REJECTED_WITH_RATIONALE]) because it risks flooding the mailbox with spam, is redundant with public completion events (PR merges, ticket closures), and misaligns with our episodic, wake-driven architecture by incorrectly mirroring continuous-presence polling.

Proposed Solution

Implement a Blocked Task-State Coordination primitive. This entirely discards the "idle agent" framing and instead relies natively on the A2A v1.0 Task.state at the message-level (using the existing add_message task envelope) to signal transitions when an agent is genuinely blocked.

Architectural Reality

The Neo.mjs agent architecture is episodic, driven by discrete wake events. It does not support a continuous-presence polling loop, meaning global agent-state broadcasts are structurally mismatched to the underlying execution engine.

Out of Scope

  • Capacity Advertisement / Idle Broadcasts: These are strictly forbidden. Swarm momentum will be solved separately (see Discussion #10762).
  • Global AGENT:* pings for routine tasks: Banned to prevent mailbox spam.

Avoided Traps

  • Continuous-Presence Trap: Assuming agents can act like SSE streams polling an idle state.
  • Spam-by-Routine-Completion Trap: Broadcasting global capacity changes after every routine sub-task instead of relying on explicit terminal boundary signals (e.g., epic closure).
  • Scope Bundling: Mixing blocked-task coordination with swarm momentum mechanisms.

Acceptance Criteria

  • (AC1) Codify that blocked-task transitions (input-required, blocked, failed) trigger a targeted ping to the task-assignee and operator, NOT a global AGENT:* broadcast.
  • (AC2) Ensure the signal maps exactly to the native A2A Task.state field within the add_message task envelope.
  • (AC3) Define mandatory negative examples (ordinary PR comments, routine approvals, completed merge eligibility, general availability) which do NOT trigger this pattern.
  • (AC4) Implement the payload schema constraint, requiring:
    • task id OR issue/PR id
    • prior state
    • new state (input-required, blocked, failed)
    • blocker summary
    • exact requested input
    • current owner
    • target recipient
    • retry/expiry guidance
    • public artifact link

Contract Ledger

ID Contract Scope Evidence
1 Targeted Blocked Pings Transitioning to input-required targets assignee + operator. L3
2 Payload Schema Adherence Enforces structured A2A payload for blocked states. L3

Related

  • Origin Discussion: #10759
  • Based on 3-of-3 consensus feedback from the triad swarm.

Origin Session ID: 79042442-bebc-431d-8968-8a2e7d7a1151

tobiu referenced in commit e71dee0 - "feat(ai): codify blocked task-state coordination (#10761) (#10778) on May 5, 2026, 10:21 PM
tobiu closed this issue on May 5, 2026, 10:21 PM