docs(product): design ask-answer recovery — answer-as-message (RIG-2257) - #586
Open
rigel-mintaka wants to merge 1 commit into
Open
docs(product): design ask-answer recovery — answer-as-message (RIG-2257)#586rigel-mintaka wants to merge 1 commit into
rigel-mintaka wants to merge 1 commit into
Conversation
|
Compass engineering docs preview: https://compass-server-rig-2257-ask.compass-eng-docs.pages.dev Deployed from Changed pages: |
rigel-mintaka
force-pushed
the
compass-server/rig-2257-ask-answer-recovery-design
branch
from
August 24, 2026 15:36
9f936d7 to
f64b3b3
Compare
rigel-mintaka
force-pushed
the
compass-server/rig-2257-ask-answer-recovery-design
branch
from
August 24, 2026 19:09
f64b3b3 to
cb0f14e
Compare
Rewrite of the RIG-2257 design record around **answer-as-message on the existing durable delivery rail** (Matt's ruling on RIG-2675, superseding the prior owed-marker + control-op-wake draft). ## The change The ask-answer wake is keyed on the session id live at `RespondToAsk` time, so an answer submitted while the asking agent has no live session (or after a reconnect/resume minted a new session id) is silently dropped and never redelivered — the sweep excludes the author (`delivery_cursors.go:484`) and the ask is agent-authored, so the "reads it next turn" fallback is false. Fix at the root: make the answer a **new message authored by the answerer** (a participant, not the agent), carrying a server-owned `ask_answer` message-block variant that snapshots the answered ask. An answerer-authored message is not author-excluded, so it is swept, delivered, acked, and reconnect-redelivered by the one delivery rail that already exists — no new durability machinery, no new proto ack frame, no agent-side boot poll. ## Why this shape - **Net-smaller:** deletes the entire bespoke wake rail (both `ask_waker.go` files, the `AskAnswerControl` proto op, the agent's `PendingAsks` registry + control arm) and replaces it with one `MessageBlock` oneof variant + one agent render arm. - **Scales:** the `ask_answer` block is framed as instance #1 of a general **special-message-block** pattern — every future structured interaction (approvals, status cards) is a block variant on the ONE rail, inheriting at-least-once + reconnect-resweep for free, instead of a bespoke control op per type. - **Pre-GA nothing is frozen:** the RIG-1509 agent half is reworked here (consumes an answer *message* by `ask_id`), not preserved. Red-teamed by a design-critic (1 high / 2 medium / 1 low, all folded): dropped the client-namespace idempotency key that reintroduced silent-loss (answer-once guard is sole single-fire), corrected the live-unsubscribed-asker delivery arm (owed row + live dispatch are complements, not either/or), named the steer-lane as a second render-arm consumer, and stated the channel-wide audience. Spec-impact: none. Refs RIG-2257 (successor to compass-ask-comms-roundtrip Decision 3). Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
force-pushed
the
compass-server/rig-2257-ask-answer-recovery-design
branch
from
August 24, 2026 19:35
cb0f14e to
dd79769
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rewrite of the RIG-2257 design record around answer-as-message on the existing durable delivery rail (Matt's ruling on RIG-2675, superseding the prior owed-marker + control-op-wake draft).
The change
The ask-answer wake is keyed on the session id live at
RespondToAsktime, so an answer submitted while the asking agent has no live session (or after a reconnect/resume minted a new session id) is silently dropped and never redelivered — the sweep excludes the author (delivery_cursors.go:484) and the ask is agent-authored, so the "reads it next turn" fallback is false.Fix at the root: make the answer a new message authored by the answerer (a participant, not the agent), carrying a server-owned
ask_answermessage-block variant that snapshots the answered ask. An answerer-authored message is not author-excluded, so it is swept, delivered, acked, and reconnect-redelivered by the one delivery rail that already exists — no new durability machinery, no new proto ack frame, no agent-side boot poll.Why this shape
ask_waker.gofiles, theAskAnswerControlproto op, the agent'sPendingAsksregistry + control arm) and replaces it with oneMessageBlockoneof variant + one agent render arm.ask_answerblock is framed as instance chore: scaffold Compass OSS monorepo — toolchain, workspace, compass.v1 pipeline, CI #1 of a general special-message-block pattern — every future structured interaction (approvals, status cards) is a block variant on the ONE rail, inheriting at-least-once + reconnect-resweep for free, instead of a bespoke control op per type.ask_id), not preserved.Red-teamed by a design-critic (1 high / 2 medium / 1 low, all folded): dropped the client-namespace idempotency key that reintroduced silent-loss (answer-once guard is sole single-fire), corrected the live-unsubscribed-asker delivery arm (owed row + live dispatch are complements, not either/or), named the steer-lane as a second render-arm consumer, and stated the channel-wide audience.
Spec-impact: none. Refs RIG-2257 (successor to compass-ask-comms-roundtrip Decision 3).
Co-authored-by: Matt Wilkinson matt@rigel.build