Skip to content

docs(rfc): refine live-to-final RFC (fix issue/PR links, add ownership + sidebar sections)#3547

Closed
franksong2702 wants to merge 6 commits into
nesquena:masterfrom
franksong2702:franksong2702/live-to-final-rfc-refresh
Closed

docs(rfc): refine live-to-final RFC (fix issue/PR links, add ownership + sidebar sections)#3547
franksong2702 wants to merge 6 commits into
nesquena:masterfrom
franksong2702:franksong2702/live-to-final-rfc-refresh

Conversation

@franksong2702

@franksong2702 franksong2702 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

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 uses
Refs #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 the
GitHub API:

  • #2283, #3015, #1370, #3391, #3316, #3345 are all PRs (were
    mislinked as issues).
  • #3058, #3014, #3315, #3344 are confirmed issues and kept as-is.

Structure — filled real gaps. Adds a Reply ownership subsection, a
Cancel and interruption edge case, Tool-only or low-prose runs, and
Sidebar 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 parent
    contract for follow-up slices. Live implementation status stays in Redesign live-to-final assistant replies for running agent sessions #3400.
  • Keep volatile PR/merge state out of the RFC body: the Public Inventory and
    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.
  • Normalize terminal-state naming to the backticked snake_case identifiers
    (cancelled, compression_exhausted, tool_limit_reached, no_response,
    interrupted, error) 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.

Scope

Docs only. No code, no behavior change. The four referenced lower-level
contract docs all still exist and resolve.

Verification

  • git diff --check
  • Private-context leak check for /Users, Obsidian, syncthings, private,
    and local-only in the edited RFC
  • GitHub Actions on the pushed PR head: browser-smoke, lint, and all Python test
    shards passed

AI assistance: Claude Code drafted earlier revisions; OpenAI Codex GPT-5 made
this artifact-handoff update and verification pass.

Frank Song and others added 2 commits June 4, 2026 13:06
…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>
@greptile-apps

greptile-apps Bot commented Jun 4, 2026

Copy link
Copy Markdown

Greptile Summary

This docs-only PR refines the live-to-final assistant replies RFC (follow-up to #3464): it corrects six /issues/ links that should be /pull/, fills structural gaps with new subsections (Reply ownership, Cancel and interruption, Tool-only or low-prose runs, Sidebar and session ownership, Produced artifacts and output handoff), replaces the linear Slice 1–4 plan with a durable Delivery And Follow-Up Map, and promotes the document status from Proposed to Accepted.

  • Link corrections: Six PR references (#2283, #3015, #1370, #3391, #3316, #3345) are moved from /issues/ to /pull/; confirmed issues (#3058, #3014, #3315, #3344) are unchanged; all four downstream contract files referenced in the Relationship section still exist on disk.
  • New content: Terminal-state identifiers are normalized to backticked snake_case, the scope section is split into explicit owns/does-not-own halves, and the Mermaid lifecycle diagram is extended to cover cancel, interruption, artifact handoff, and sidebar ownership paths.
  • Process note: The status was changed to Accepted by the RFC author in this same PR, without a separate maintainer sign-off commit; the docs/rfcs/README.md process notes that Accepted status gates implementation PR coordination, so maintainers may want to confirm this promotion explicitly before merging.

Confidence Score: 5/5

Docs-only change with no code, no schema, and no behavior modification; all four downstream contract files it references exist on disk.

The change is entirely documentation: link type corrections, new subsections, and a restructured delivery map. The only open item is a process question about the self-asserted status promotion, not a defect in the document itself.

No files require special attention beyond a maintainer confirming the status promotion in docs/rfcs/live-to-final-assistant-replies.md.

Important Files Changed

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]
Loading

Reviews (5): Last reviewed commit: "Merge remote-tracking branch 'origin/mas..." | Re-trigger Greptile

@franksong2702 franksong2702 marked this pull request as draft June 4, 2026 09:20
@franksong2702 franksong2702 marked this pull request as ready for review June 4, 2026 09:29
@franksong2702

Copy link
Copy Markdown
Contributor Author

Branch refresh pushed in 55b2a276.

What changed:

  • Merged latest origin/master (4c545a33) into franksong2702/live-to-final-rfc-refresh.
  • No conflicts. The final diff against current master remains docs-only: docs/rfcs/live-to-final-assistant-replies.md.

Verification:

  • git diff --check origin/master..HEAD -> passed
  • /Users/xuefusong/.hermes/hermes-agent/venv/bin/python -m pytest tests/test_contract_review_gate.py -q -> 3 passed
  • GitHub Actions on 55b2a276 -> 11/11 passed
  • GitHub mergeability -> MERGEABLE / CLEAN

AI assistance: Codex refreshed the branch to current master and verified the docs-only diff stayed scoped to the RFC.

@franksong2702

Copy link
Copy Markdown
Contributor Author

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
Loading

@franksong2702

Copy link
Copy Markdown
Contributor Author

Branch refresh pushed in 4400c623.

What changed:

  • Merged latest origin/master (f1211e1f, v0.51.267) into franksong2702/live-to-final-rfc-refresh.
  • No conflicts. The final diff against current master remains docs-only: docs/rfcs/live-to-final-assistant-replies.md.

Verification:

  • git diff --check origin/master..HEAD -> passed
  • python -m pytest tests/test_contract_review_gate.py -q -> 3 passed
  • GitHub Actions on 4400c623 -> 11/11 passed
  • GitHub mergeability -> MERGEABLE / CLEAN

AI assistance: Codex Autopilot refreshed the branch to current master and verified the docs-only diff stayed scoped to the RFC.

nesquena-hermes added a commit that referenced this pull request Jun 5, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant