Skip to content

docs(adr): resume agent sessions from JSONL transcripts - #6680

Closed
durandom wants to merge 1 commit into
fullsend-ai:mainfrom
durandom:docs/adr-resume-agent-sessions
Closed

docs(adr): resume agent sessions from JSONL transcripts#6680
durandom wants to merge 1 commit into
fullsend-ai:mainfrom
durandom:docs/adr-resume-agent-sessions

Conversation

@durandom

Copy link
Copy Markdown

Summary

  • Adds ADR 0092: session continuation replays a prior-run JSONL transcript into a new ephemeral sandbox, scoped to the same agent and work item.
  • Rejects keep-alive (GitHub Actions timeouts) and cross-run memory / third-party session stores. Resume is not memory; forge-comment re-injection is not a conversation tree.
  • Updates docs/architecture.md and related problem docs (cross-run-memory, agent-architecture, agent-infrastructure, security-threat-model). Annotates ADR 0021 with a cross-reference.

From the 2026-08-26 contributors meeting (Marcel / Guannan / Adam / Marta / Subhash). Local packaging remains #459; slash-command UX and transcript selection are follow-on.

Test plan

  • Confirm ADR 0092 number does not collide when this PR is ready to merge (/renumber-adr if another ADR lands first; 0093 is already in-flight).
  • Skim the ADR against the meeting notes: resume ≠ keep-alive, resume ≠ memory, scratch stays default.
  • Check living-doc edits are surgical (architecture.md Decided/Open questions, struck-through or parenthetical problem-doc annotations).

Made with Cursor

Record the contributors-meeting decision that continuation replays a
prior-run transcript into a new ephemeral sandbox, rather than keeping
the process alive or introducing cross-run memory.

Signed-off-by: Marcel Hild <hild@b4mad.net>
Co-authored-by: Cursor <cursoragent@cursor.com>
@durandom
durandom requested a review from a team as a code owner August 27, 2026 13:54
@github-actions github-actions Bot closed this Aug 27, 2026
@github-actions

Copy link
Copy Markdown

Thank you for your interest in contributing to fullsend, @durandom.

This project uses a vouch system for first-time contributors. Before submitting a pull request, you need to be vouched by a maintainer.

To get vouched:

  1. Open a Vouch Request discussion.
  2. Describe what you want to change and why.
  3. Write in your own words — do not have an AI generate the request.
  4. A maintainer will comment /vouch if approved.
  5. Once vouched, open a new PR (preferred) or reopen this one.

See CONTRIBUTING.md for details.

@github-actions

Copy link
Copy Markdown

E2E tests did not run

E2E tests run automatically for org/repo members and collaborators on pull requests.

For other contributors, a maintainer must add the ok-to-test label after the latest push.

See E2E testing guide for details.

1 similar comment
@github-actions

Copy link
Copy Markdown

E2E tests did not run

E2E tests run automatically for org/repo members and collaborators on pull requests.

For other contributors, a maintainer must add the ok-to-test label after the latest push.

See E2E testing guide for details.

@qodo-code-review

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can ask Qodo to dismiss a finding you disagree with, with your reason on record

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

Document JSONL transcript replay for resumable agent sessions

📝 Documentation 🕐 20-40 Minutes

Grey Divider

AI Description

• Defines JSONL transcript replay as session continuation in fresh ephemeral sandboxes.
• Restricts resume to the same agent and work item under existing transcript controls.
• Aligns architecture, memory, infrastructure, and threat-model documentation with the decision.
Diagram

graph TD
  A["Authorized Dispatch"] --> B{"Resume Requested"} -->|Yes| C["Controlled JSONL"] --> D["New Sandbox"] --> E["Runtime Session"] --> F["Follow-up Work"]
  B -->|No| G["Scratch Session"]
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Keep CI process alive
  • ➕ Preserves in-memory runtime and filesystem state.
  • ➕ Avoids transcript reconstruction.
  • ➖ Consumes idle compute while awaiting humans.
  • ➖ Fails across CI timeouts and delayed responses.
2. Use a session or memory store
  • ➕ Could support durable sessions and broader retrieval.
  • ➕ Centralizes continuation data.
  • ➖ Creates another instruction and poisoning channel.
  • ➖ Conflates same-task continuation with cross-run memory.
3. Re-inject forge comments
  • ➕ Uses existing work-item context ingestion.
  • ➕ Requires no transcript handling.
  • ➖ Drops tool-call and conversation-tree history.
  • ➖ Does not provide true runtime continuation.

Recommendation: Adopt transcript replay into a new ephemeral sandbox. It preserves conversational continuity while retaining per-run isolation and existing JSONL access controls; the rejected approaches either cannot survive human latency, add a risky persistence layer, or lose essential conversation history.

Files changed (7) +135 / -6

Documentation (7) +135 / -6
0021-jsonl-reasoning-trace-exposure.mdCross-reference transcript exposure and session resume decisions +6/-0

Cross-reference transcript exposure and session resume decisions

• Clarifies that ADR 0021 continues to govern JSONL exposure and access, while ADR 0092 governs replaying that JSONL as a later run's starting conversation.

docs/ADRs/0021-jsonl-reasoning-trace-exposure.md

0092-resume-agent-sessions-from-jsonl-transcripts.mdDefine JSONL-based agent session continuation +110/-0

Define JSONL-based agent session continuation

• Records the accepted decision to resume the same agent and work item by replaying a prior JSONL conversation tree into a fresh ephemeral sandbox. It rejects long-lived jobs, third-party memory stores, and comment-only reconstruction while documenting access, security, and environment-consistency consequences.

docs/ADRs/0092-resume-agent-sessions-from-jsonl-transcripts.md

architecture.mdIntegrate session continuation into the architecture model +13/-2

Integrate session continuation into the architecture model

• Adds transcript replay to the infrastructure, sandbox, dispatch, and observability decisions while preserving ephemeral filesystem and process semantics. It also records open questions around environment pinning and transcript or turn selection.

docs/architecture.md

agent-architecture.mdSeparate resumable conversations from persistent agent state +1/-1

Separate resumable conversations from persistent agent state

• Annotates the stateless-versus-stateful question to distinguish same-task transcript replay from accumulated codebase knowledge and broader cross-run memory.

docs/problems/agent-architecture.md

agent-infrastructure.mdDocument conversation continuity across ephemeral jobs +1/-1

Document conversation continuity across ephemeral jobs

• Clarifies that JSONL conversation trees can cross run boundaries even though filesystem and process state remain ephemeral.

docs/problems/agent-infrastructure.md

cross-run-memory.mdExclude same-session transcript replay from cross-run memory +3/-1

Exclude same-session transcript replay from cross-run memory

• Defines session continuation as distinct from durable learning or unrelated-run memory. It keeps cross-role transcript consumption within the unresolved memory and trust problem space.

docs/problems/cross-run-memory.md

security-threat-model.mdCapture transcript replay as an injection propagation path +1/-1

Capture transcript replay as an injection propagation path

• Notes that resumed JSONL is not persistent agent state but becomes untrusted input to the next sandbox, allowing poisoned context to propagate one additional run.

docs/problems/security-threat-model.md

@durandom

Copy link
Copy Markdown
Author

Vouch is in place (discussion #6726). GitHub would not reopen this PR (API 422), so the same change is in #6793 (rebased on current main, ADR renumbered 0092 → 0094 because 0092 is now OpenAI WIF).

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