Skip to content

feat(harness): continue recorded history in a new Assistant [SAP-3292] - #1025

Closed
ynadge wants to merge 1 commit into
assistant-resume-commit-reconciliationfrom
assistant-continue-controls
Closed

ynadge wants to merge 1 commit into
assistant-resume-commit-reconciliationfrom
assistant-continue-controls

Conversation

@ynadge

@ynadge ynadge commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Primary change type

  • Feature

Problem and motivation

Users need an explicit way to continue from the retained record into a new Assistant without reusing lost native history or duplicating an uncertain request.

Summary and scope

Add Continue in new Assistant from the displayed record and live missing-native-history review. Persist an opaque authority-scoped request tuple across reloads, serialize tab creation, verify exact child/provenance/hash, and adopt only under current navigation/account/bus fences. Show the prepared child paused with recorded context; the first human Send uses normal execution.

Related work

Related issue: https://linear.app/sapiom/issue/SAP-3292

Depends on #1024. Native stack target: main.

Validation

59 distinct browser checks passed (46 Continue/history/End/Terminal plus13 chat regressions), with final15 Continue and2 evidence cases rerun after refinements. Two deliberate tuple/hash mutations were detected and restored. Frontend TypeScript, explicit browser lint, formatting and diff checks passed (2 existing warnings).

Tests and documentation

Desktop/mobile evidence includes retained review, paused recorded context, native-history fallback, actual browser reload with zero automatic recovery, and the first ordinary completed human task. These fixtures are distinct from native/installed evidence. Updated assistant-history.md. Increment:968 changed lines including tests/docs/changeset; SDK pr:size is absent.

Compatibility and release impact

  • Existing Terminal default remains. Only opaque request fields enter browser storage; transcript/private context does not. Start Terminal follows as a separate explicit action.
  • Changeset: @sapiom/harness patch.
  • Fix-forward: preserve the exact uncertain operation tuple, recorded provenance and adoption fences while correcting UI behavior.

Security

  • No secrets, credentials, private data, or unsanitized logs included.
  • No suspected vulnerability disclosed publicly.

AI assistance

  • AI assistance used: Codex implemented and reviewed the change with the validation described above.

Checklist

  • CONTRIBUTING.md read; maintainer-authorized issue work.
  • One focused increment, checks, documentation and release impact addressed.
  • I can explain and maintain the submitted changes.

Devin Review

Review evidence

These images show disposable browser fixture states before and after an explicit user action, not a historical pre-implementation baseline. They do not establish native execution or an installed activated release.

Before action After action
Before action After action

@coderabbitai

coderabbitai Bot commented Sep 14, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 8ecace9e-a6a2-4774-a6a6-d124902706a7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

Devin Review

Comment on lines +1846 to +1850
setState((prev) => prev && !prev.sessions.some((row) => row.id === result.session.id)
? { ...prev, sessions: [...prev.sessions, result.session] } : prev);
const revision = ++conversationRevealSequence.current;
setAssistantRevealBySession((prev) => new Map(prev).set(result.session.id, revision));
return current ?? result.session;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔴 Continued child loses recorded provenance

After continueAssistant succeeds, it discards result.continuation before opening the child. The later publicLease returns only lifecycle, lease, and conversation identity. The seed appears as a failed user task, and the recorded-context panel never renders.

Learn more

The Continue response verifies and returns an AssistantContinuationView, but only result.session enters application state. OpenCodeChat then mounts and performs its normal lifecycle/attach flow. That attach receives publicLease, which has no continuation field, so parseAssistantAttachment produces an attachment without provenance. The chat therefore cannot hide the exact seed or pass provenance into task-state evaluation.

Example: Continue succeeds with a seed saying “Recorded brief: fix checkout.” The HTTP response contains valid provenance, but the opened chat reattaches without it. Instead of showing the recorded-context panel and a paused ready conversation, Studio renders the seed as a normal unanswered user task and reports failure.

Recommended fix: Project the verified durable continuation receipt on every child attachment, including after reload or host restart. Pass that descriptor through AssistantAttachment, and provide the same durable descriptor to record capture so seed exclusion remains consistent in chat and archived task counts. Avoid a transient client-only map because reload is an explicit supported path.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

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