# Session cross-account continuation

Explicit **visible-history continuation** is a plugin-owned, lossy outgoing
Responses policy. It is not a new memory service or portable encrypted state.
Native Core and pi-ai already preserve replay signatures and reconstruct history;
their same-provider/API/model check does not establish Copilot account identity.

## Experience

The composer **Credits/usage** pill opens a popover containing
**Visible-history continuation** only for an open Session whose effective
selection is the managed account-discovered Copilot route. Expand it and set
**Session policy → On** to explicitly enable an existing Session after
reviewing the loss disclosure. The canonical/native route does not show this
control.

![Built Client continuation policy in the composer Credits popover](./images/copilot-session-continuation.png)

This 0.4.0 release-candidate capture uses synthetic Session state and quota;
[capture provenance](./images/copilot-current-provenance.json) records the
source commit, build and image hashes. It is not evidence of live availability.

New, unseeded Sessions created after this feature's first successful
activation default on. Activation persists a bounded creation-time policy
epoch using Settings CAS; existing Sessions, seeded histories, forks and
unknown birth evidence remain off. Manage the separate new-Session default in
**Models → GitHub Copilot → Manage → New Session continuation default**.
Changing it affects only subsequently created Sessions. Session overrides (on, off or
creation-time default) persist across account changes and restarts. No failed
request is required first and no hourly confirmation is needed.

The enabled disclosure stays compact. Details contain the disable action.
Enable/disable changes affect future turns; the active turn retains its captured
policy and account. The UI distinguishes pending changes from the active policy.
Disabling does not undo answers; it may expose the original replay rejection on
later requests. When off, switching to a different account pauses for persistent
enable, keep off, or cancel. The ordinary UI no longer offers a next-turn-only
mode. An exact replay rejection offers **Enable visible-history continuation**
with the loss disclosure and Cancel when off; this saves the same persistent
Session policy. When already on, show status and diagnostic guidance, not another
authorization. It never automatically sends or retries; native Retry is separate.
The failure-evidence lifetime does not limit the persisted policy. Retain old
one-turn consent and temporary recovery Remote contracts for compatibility only;
the normal Client does not create these authorizations.

See the [approved account-management experience and mock](./account-management-experience.md).
On the currently pinned Core, direct Models navigation is not a public Client
service. Chat omits the nonfunctional management entry rather than accessing
private stores or replacing Settings.

## Loss and retained content

On each admitted managed Responses turn, the first normalized payload captures
fingerprints of pre-existing completed encrypted reasoning. Those exact items,
including summaries embedded inside them, are omitted from outgoing requests
throughout that turn. Newly generated reasoning remains available to subsequent
tool steps and native retries. A later turn treats the preceding turn's reasoning
as historical, even without an account change.

Visible user/assistant messages, native tool calls and result pairing, system/tool
definitions and disk history remain under their existing owners. No encrypted
content is decoded, copied to settings or converted into invented raw reasoning.
The policy does not claim which account issued an old item.

## Public integration and safety

`github-copilot.sessionContinuation` stores strict bounded entries containing
only Session ID, policy version, explicit enabled state and consent timestamp.
Legacy entries without enabled retain their prior true meaning.
`continuationDefaultHistory` stores chronological bounded `{enabled, changedAt}`
entries, never Session content. Native SettingsForms CAS,
hidden volatile owned-field projection and readback preserve other settings and
the active plugin fiber. A separate strict `githubCopilotSessionContinuation`
Remote uses explicit Agent lookup; temporary recovery descriptors remain intact.

Public `agent/request`, `session/event` and `agent/disposed` bind an in-memory
per-turn baseline to the exact initiating Session and request signal. The
published adapter/SDK's payload hook filters the normalized payload. Only
`github-copilot-preview` Responses chat calls participate. Classifier,
unbound requests and other protocols remain native. Cold mid-turn recovery
without a first-step boundary fails explicitly.

The persistent Session policy also covers native managed Responses compaction.
An observed native `compaction/start` bracket plus exact public Agent lookup
binds each summary before dispatch. Active turns retain their captured persistent
policy; idle manual summaries capture current Session policy. Legacy next-turn-only
consent does not authorize summaries. Each segment omits all historical encrypted
reasoning and embedded summaries, while visible intermediate checkpoints remain.
Stock and separately selected recovery engines keep their existing transactions;
no additional failure-first attempt, retry loop or engine replacement is added.
End, cancellation, disposal and model/scope mismatch revoke filtering.

An additive composer notice reports actual filtering and native outcome. Success
requires a checkpoint replacement and an error-free matching native end, not
summary text alone. Failed/cancelled outcomes stay distinct; missing Host-lifetime
evidence remains unknown after restart. A public projection folds only native
bracket IDs/phase to trigger strict status reads; it stores no content or new
events. Polling occurs only while the viewed native bracket is active and stops
on settlement/unmount. When off, an exact replay-scope rejection exposes the same
loss-disclosed persistent enable control; unrelated failures do not.

`/copilot-compact visible-history` remains a one-operation alternative when the
selected engine supports it; its consent is never made persistent by the command.
See [summary recovery](./manual-compaction-recovery.md#explicit-visible-history-summary-recovery).

The filter scans at most 65536 top-level input items and 4096 reasoning items
(including duplicates). Only encrypted reasoning is hashed, with an aggregate
64 Mi UTF-16-code-unit processing bound per invocation and 64 Ki-code-unit chunks
that yield to cancellation and turn revocation. These are plugin work bounds,
not supplier byte/token limits. Ordinary tool output, images, nested content,
system and tool definitions are neither traversed nor serialized by this filter;
there is no whole-request 16 MiB continuation cap. Failed, cancelled, overlapping
or revoked processing cannot partially initialize the baseline. Unsupported
reasoning, malformed settings, missing boundaries and exhausted work bounds
produce named diagnostics, not partial filtering or guessed success.
Credentials, account entitlement and model capabilities remain independently guarded.

Native retry normalization retains raw reference-restoration evidence but records
the final filtered bytes for exact 408 matching. No new retry loop is introduced.
Input admission still precedes payload filtering: this is not an oversized-context,
quota, upload-timeout or native context-meter repair.
Actual token pressure still uses the initiating Agent's enabled native compaction
engine and bounded recovery: commit the native summary, rebuild the request, then
apply continuation. A continuation work-bound error is not relabeled as context
overflow. Disabled automatic compaction, missing engines, cancellation, failed or
insufficient summaries remain explicit limitations, not permission to trim history.

## Evidence limits

Synthetic account transitions, source/Host/UI tests and exact-source native
gateway/persistence fixtures are distinct from real supplier acceptance.
The native compaction fixture covers first-step overflow and continuing-step
prevention with Auto, a durable in-memory replacement, rebuilt visible history
and synthetic historical reasoning larger than 16 MiB. It uses an external-model
double; it does not prove real supplier acceptance or recovery of a live Session.
Publication, installation, loaded runtime and controlled live A-B-B-A success
must be reported separately. Enabling this product mode is not authorized by
implementing it; live existing Sessions still require explicit loss consent.
The default-on creation policy is disclosed in account controls and can be
disabled globally or overridden per Session. Source tests do not establish live
default acceptance or real cross-account transport.
