docs(rfc): refine live-to-final RFC (fix issue/PR links, add ownership + sidebar sections)#3547
Conversation
…tate names Three follow-up adjustments to the refined live-to-final RFC: - Status: Proposed -> Accepted, since the doc is now referenced as the parent contract for follow-up slices; live implementation status stays in nesquena#3400. - Keep volatile PR/merge state out of the RFC body. The Public Inventory and Delivery map now state that their classification/vehicle columns record durable scope, and that nesquena#3400 is authoritative for open/merged/superseded status. Dropped the point-in-time "has shipped through release" / "remains an active PR" assertions that would drift as PRs land. - Normalize terminal-state naming: use the backticked snake_case identifiers (`cancelled`, `compression_exhausted`, `tool_limit_reached`, `no_response`, `interrupted`, `error`) consistently in prose, and add a note that these name product states, not a wire/enum or persisted schema contract (consistent with Scope, which does not own a backend schema change). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
| Filename | Overview |
|---|---|
| docs/rfcs/live-to-final-assistant-replies.md | RFC refined from Proposed to Accepted: fixes 6 /issues/ to /pull/ mislinks, adds Reply ownership, Cancel/interruption, Tool-only, and Sidebar/session ownership sections, replaces the linear Slice plan with a Delivery And Follow-Up Map; one process question on the self-asserted status promotion. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A([PR opens RFC file]) --> B[Read existing document]
B --> C{Link type check}
C -- issue but is PR --> D[Fix /issues/ to /pull/]
C -- already correct --> E[Keep as-is]
D --> F[6 links corrected]
E --> G[4 links confirmed issues]
B --> H[Add new RFC sections]
H --> H1[Reply ownership]
H --> H2[Cancel and interruption]
H --> H3[Tool-only or low-prose runs]
H --> H4[Sidebar and session ownership]
H --> H5[Produced artifacts and output handoff]
B --> I[Restructure delivery plan]
I --> J[Replace linear Slice 1-4 with Delivery And Follow-Up Map]
B --> K[Status change]
K --> L[Proposed to Accepted]
L --> M{Maintainer sign-off?}
M -- explicit in thread --> N[Safe to merge]
M -- only author assertion --> O[Process question]
Reviews (5): Last reviewed commit: "Merge remote-tracking branch 'origin/mas..." | Re-trigger Greptile
…to-final-rfc-refresh
|
Branch refresh pushed in What changed:
Verification:
AI assistance: Codex refreshed the branch to current master and verified the docs-only diff stayed scoped to the RFC. |
|
Referencing the earlier flowchart comment, I think this is the ideal product-level flow for the live-to-final reply lifecycle. The main adjustment is that this is explicitly a product-state model, not a backend schema or wire-event contract: settle should derive the visible reply state from durable transcript truth, available terminal evidence, and reply ownership. %%{init: {"theme": "neutral"}}%%
flowchart TD
A([User sends message]) --> B["Turn created<br/>reply ownership established"]
B --> C["Live phase<br/>process prose + quiet tool activity"]
C --> D{Lifecycle event}
D -- stream continues --> C
D -- reload / reconnect / session switch --> E["Recovery and replay<br/>rebuild the same lifecycle from durable state"]
E --> F{Same turn recovered?}
F -- yes --> C
F -- not yet --> G["Restoring or degraded state<br/>do not mark completed from missing live data"]
G --> D
D -- user cancels --> H["Cancel requested<br/>settle only the owned reply"]
H --> I["Settle decision<br/>durable transcript truth + terminal evidence + reply ownership"]
D -- run ended / terminal evidence --> I
I --> J{Event belongs to<br/>the current visible reply?}
J -- no --> K["Ignore stale event<br/>do not mutate the current visible reply"]
J -- yes --> L{Final assistant answer present<br/>and terminal evidence is normal?}
L -- yes --> M["completed<br/>activity summary above final answer"]
L -- no --> N{Specific terminal outcome}
N -- cancelled --> O["cancelled<br/>user stopped the turn"]
N -- interrupted --> P["interrupted<br/>continuity lost before final answer"]
N -- compression_exhausted --> Q["compression_exhausted<br/>compression could not continue safely"]
N -- tool_limit_reached --> R["tool_limit_reached<br/>tool / retry / iteration ceiling hit"]
N -- no_response --> S["no_response<br/>no usable assistant final content"]
N -- other failure --> T["error<br/>fallback for other terminal failures"]
M --> U["Settled reply visible<br/>supporting activity collapsed;<br/>artifacts and workspace outputs findable"]
O --> U
P --> U
Q --> U
R --> U
S --> U
T --> U
|
|
Branch refresh pushed in What changed:
Verification:
AI assistance: Codex Autopilot refreshed the branch to current master and verified the docs-only diff stayed scoped to the RFC. |
* Refine live-to-final long-running session RFC * Mark RFC accepted, decouple from live PR status, normalize terminal state names Three follow-up adjustments to the refined live-to-final RFC: - Status: Proposed -> Accepted, since the doc is now referenced as the parent contract for follow-up slices; live implementation status stays in #3400. - Keep volatile PR/merge state out of the RFC body. The Public Inventory and Delivery map now state that their classification/vehicle columns record durable scope, and that #3400 is authoritative for open/merged/superseded status. Dropped the point-in-time "has shipped through release" / "remains an active PR" assertions that would drift as PRs land. - Normalize terminal-state naming: use the backticked snake_case identifiers (`cancelled`, `compression_exhausted`, `tool_limit_reached`, `no_response`, `interrupted`, `error`) consistently in prose, and add a note that these name product states, not a wire/enum or persisted schema contract (consistent with Scope, which does not own a backend schema change). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Add artifact handoff scope to live-to-final RFC * Add live-to-final lifecycle flowchart to RFC --------- Co-authored-by: Frank Song <franksong2702@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Follow-up to #3464, which merged the first revision of the long-running
live-to-final assistant reply RFC. This PR refines that document. It is
docs-only (
docs/rfcs/live-to-final-assistant-replies.md) and usesRefs #3400; it does not close the umbrella issue.What changed
Correctness — fixed wrong issue/PR link types. The merged revision linked
six PRs as
/issues/. These are corrected to/pull/, verified against theGitHub API:
#2283,#3015,#1370,#3391,#3316,#3345are all PRs (weremislinked as issues).
#3058,#3014,#3315,#3344are confirmed issues and kept as-is.Structure — filled real gaps. Adds a
Reply ownershipsubsection, aCancel and interruptionedge case,Tool-only or low-prose runs, andSidebar and session ownership; splits Scope into explicit owns / does-not-own;replaces the linear Slice 1–4 plan with a
Delivery And Follow-Up Map.Artifact handoff — added long-session output semantics. Adds produced
artifacts/output handoff as a long-running edge case without expanding this RFC
into a rich-artifact renderer or workspace feature spec. The new language ties
existing Artifacts and
workspace://surfaces to the live-to-final lifecycle:settle, replay, reconnect, session switch, cancel, interruption, and no-final
terminal paths should preserve enough metadata for users to find files created
or edited during the turn.
Hardening (this PR, on top of the refinement):
Status: Proposed -> Accepted, since the doc is now referenced as the parentcontract for follow-up slices. Live implementation status stays in Redesign live-to-final assistant replies for running agent sessions #3400.
Delivery map now record durable scope, with Redesign live-to-final assistant replies for running agent sessions #3400 named authoritative for
open/merged/superseded status. Dropped point-in-time "has shipped through
release" / "remains an active PR" phrasing that would drift.
(
cancelled,compression_exhausted,tool_limit_reached,no_response,interrupted,error) and add a note that these name product states, not awire/enum or persisted schema contract — consistent with Scope, which does
not own a backend schema change.
Scope
Docs only. No code, no behavior change. The four referenced lower-level
contract docs all still exist and resolve.
Verification
git diff --check/Users,Obsidian,syncthings,private,and
local-onlyin the edited RFCshards passed
AI assistance: Claude Code drafted earlier revisions; OpenAI Codex GPT-5 made
this artifact-handoff update and verification pass.