Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/designs/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -429,5 +429,5 @@ check enforces the mechanical half. Full rationale:
| DL-303 | The public `SessionInjection.traceparent` field (`compass.proto`, field 4) exposes the Server's active-span W3C `traceparent` on the SubscribeAgentSession observation surface, so a public subscriber can join a SessionInjection to the message's server-side trace (Matt ruled OQ2 = yes at the T4b freeze gate). Additive string scalar beside `from_handle` (a W3C trace-context token `00-<trace-id>-<span-id>-<flags>`, not an identifier); EMPTY when the Server had no active span; trace machinery never blocks or fails a delivery. The internal control-op (`agent.proto` SteerControl/DeliverControl) and causal-link (`agent_gateway.proto` CommsCallRequest.trigger_traceparent) legs are internal-tree, not a public-API decision | Active (Matt, 2026-08-27) | [server+runner OTel §T4](observability/compass-server-runner-otel/design.md#t4--trace-proto-fields-control-ops-public-observation-causal-link-stacked-seam) |
| DL-310 | SubscribeAgentSession sends a leading zero-payload registration-ack frame (existing AgentSessionFrame, session_id only, no event, UNSPECIFIED state) immediately after subscribe() registers, before the live tail — mirroring SubscribeEvents' snapshotBoundary / SubscribeComms' commsSnapshotBoundary. It makes "open the tail before the post" a server-guaranteed happens-before, closing the idle-session drop where a driven injection races subscribe() and fans to zero subscribers (no replay ring). Not a replay/resync/reattach — the ack carries no history (RIG-3044, e2e flake TestLegThreeFourSpawnAndMessaging). | Active (Matt, 2026-08-31) | [first-turn delivery](agent/compass-first-turn-delivery/design.md) |
| DL-318 | Pre-stream/inner error and abort content surface on the session trace as a dedicated `SessionError` message (`compass.v1.SessionEvent` oneof field 10) with a `SessionErrorKind` discriminator (ERROR \| ABORTED), a failure `message`, and an optional HTTP `status` — not `SessionNotice`, not a comms `Message` block (RIG-2616) | Active (Matt, 2026-09-02) | [error/abort surfacing](agent/compass-agent-error-abort-surfacing/design.md) |
| DL-319 | Error/abort emit rule: `reason=error` emits `SessionError(ERROR)` AND the existing `ERRORED` lifecycle transition (additive — board/presence/delivery key off `ERRORED`); `reason=aborted` emits `SessionError(ABORTED)` with NO lifecycle transition (abort is not a crash) and replaces the prior counted-`UnmappedEvent` staging | Active (Matt, 2026-09-02) | [error/abort surfacing](agent/compass-agent-error-abort-surfacing/design.md) |
| DL-320 | The `SessionError` trace frame rides the FrameSink never-drop PRIORITY lane (not the bounded drop-oldest trace queue), via an `isSessionError` classifier extending the `frame-sink.ts` priority predicate — matching the `SessionInjection` never-drop carve-out, so surfaced failure content is as durable-on-the-spine as the lifecycle transition it reports | Active (Matt, 2026-09-02) | [error/abort surfacing](agent/compass-agent-error-abort-surfacing/design.md) |
| DL-322 | Error/abort emit rule: `reason=error` emits `SessionError(ERROR)` AND the existing `ERRORED` lifecycle transition (additive — board/presence/delivery key off `ERRORED`); `reason=aborted` emits `SessionError(ABORTED)` with NO lifecycle transition (abort is not a crash) and replaces the prior counted-`UnmappedEvent` staging | Active (Matt, 2026-09-02) | [error/abort surfacing](agent/compass-agent-error-abort-surfacing/design.md) |
| DL-323 | The `SessionError` trace frame rides the FrameSink never-drop PRIORITY lane (not the bounded drop-oldest trace queue), via an `isSessionError` classifier extending the `frame-sink.ts` priority predicate — matching the `SessionInjection` never-drop carve-out, so surfaced failure content is as durable-on-the-spine as the lifecycle transition it reports | Active (Matt, 2026-09-02) | [error/abort surfacing](agent/compass-agent-error-abort-surfacing/design.md) |
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ Status: Active
Refs: RIG-2616 (parent RIG-974). Surface: compass-agent event mapper +
`compass.v1` session-trace contract.

> Ledger-id note (post-freeze, annotate-don't-rewrite): a concurrent-merge
> window allocated this record's emit-rule and never-drop-routing ledger rows
> the same DL ids as an earlier-dated UI record. They were renumbered on
> `DECISIONS.md` to keep ids unique: **DL-319 → DL-322** (emit rule),
> **DL-320 → DL-323** (FrameSink never-drop routing). DL-318 is unchanged. The
> in-body citations below read as point-in-time; the ledger rows are canonical.

## Problem / Intent

An inner-stream failure or a deliberate abort reaches the compass-agent event
Expand Down
Loading