All 46 conformance rules, grouped by the part of the
protocol they guard. Every diagnostic links to the spec section it is
grounded in; ambiguous spec behavior is capped at info severity and
tracked in spec-questions.md.
| Rule | Severity | Layer | Title |
|---|
| AGUI001 | error | core | Run does not start with RUN_STARTED |
| AGUI002 | error | core | Multiple RUN_STARTED in one run |
| AGUI003 | error | core | Run not terminated |
| AGUI004 | error | core | Event after terminal event |
| AGUI005 | error | core | RUN_FINISHED and RUN_ERROR are mutually exclusive |
| AGUI006 | error | core | STEP_FINISHED without matching STEP_STARTED |
| AGUI007 | error | core | Step unterminated at run end |
| AGUI008 | warning | core | Unstable threadId/runId across the run |
| Rule | Severity | Layer | Title |
|---|
| AGUI101 | error | core | TEXT_MESSAGE_CONTENT without start |
| AGUI102 | error | core | TEXT_MESSAGE_END without start |
| AGUI103 | error | core | Text message unterminated at run end |
| AGUI104 | error | core | Duplicate messageId within a run |
| AGUI105 | warning | core | Empty content delta |
| AGUI106 | error | core | Interleaved message streams sharing a messageId |
| Rule | Severity | Layer | Title |
|---|
| AGUI201 | error | core | TOOL_CALL_ARGS without start |
| AGUI202 | error | core | TOOL_CALL_END without start |
| AGUI203 | error | core | Unterminated tool call |
| AGUI204 | error | core | Tool call arguments are not valid JSON |
| AGUI205 | error | core | Duplicate toolCallId within a run |
| AGUI206 | warning | core | TOOL_CALL_RESULT before TOOL_CALL_END |
| AGUI207 | error | core | TOOL_CALL_RESULT references unknown toolCallId |
| AGUI208 | info | core | parentMessageId references unknown message |
| Rule | Severity | Layer | Title |
|---|
| AGUI301 | info | core | STATE_DELTA before any STATE_SNAPSHOT |
| AGUI302 | error | core | STATE_DELTA failed to apply |
| AGUI303 | error | core | STATE_DELTA is not a valid RFC 6902 patch document |
| AGUI304 | info | core | Mid-run STATE_SNAPSHOT discards accumulated deltas |
| AGUI305 | warning | core | Shared state declared but never established |
| Rule | Severity | Layer | Title |
|---|
| AGUI401 | error | core | REASONING_MESSAGE_CONTENT without start |
| AGUI402 | warning | core | Reasoning unterminated at run end |
| Rule | Severity | Layer | Title |
|---|
| AGUI601 | error | core | Duplicate SUBAGENT_STARTED for a subagentRunId |
| AGUI602 | error | core | SUBAGENT_FINISHED without matching SUBAGENT_STARTED |
| AGUI603 | error | core | SUBAGENT_ERROR without matching SUBAGENT_STARTED |
| AGUI604 | error | core | Subagent unterminated at run end |
| AGUI605 | warning | core | parentSubagentRunId references a subagent never started |
| AGUI606 | warning | core | Continuation event's subagentRunId disagrees with its entity's owner |
| Rule | Severity | Layer | Title |
|---|
| AGUI501 | error | transport | Malformed SSE framing |
| AGUI502 | error | core | Event payload is not valid JSON |
| AGUI503 | error | core | Unknown event type |
| AGUI504 | error | core | Event fails schema validation for its declared type |
| AGUI505 | warning | transport | Unexpected Content-Type |
| AGUI506 | info | transport | No keepalive frame within the configured window |
| AGUI507 | info | transport | Response appears buffered rather than incrementally flushed |
| AGUI508 | error | transport | Stream ended without a terminal event |
| Rule | Severity | Layer | Title |
|---|
| AGUI901 | info | core | RAW event wraps a typed AG-UI event |
| AGUI902 | info | core | Events carry no timestamps |
| AGUI903 | info | core | CUSTOM event name is not namespaced |