# Copilot account management and continuation experience

Approved account switching reference: [dropdown mock](./mockups/copilot-account-dropdown.html).
The [Chat account selection mock](./mockups/copilot-chat-account-selection.html)
supersedes its Chat menu: only configured accounts appear in the list, with
following controlled separately.
The [complete continuation mock](./mockups/copilot-account-management.html) retains
the earlier search-form presentation as historical context; the dropdown replaces it.
Open the HTML locally; append `?scenario=off-switch` to start with continuation
disabled and an account switch awaiting confirmation. All accounts, quota,
authorization, messages and model availability in this mock are synthetic.
It performs no network requests and persists no credentials or settings.

## Chat: quick selection, not a second settings page

The Credits control opens a compact current-account summary and Switch button.
Do not render all saved accounts until Switch is opened. A compact anchored dropdown
marks the effective current account and supports bounded internal scrolling.
List every configured account, not a hard-coded two-account limit. A separate
**Follow global default** checkbox clears the Session override when enabled;
disabling it freezes the currently effective account. Choosing any account,
including today's default, disables following and creates an explicit override.
Both paths use the same continuation confirmation, revision readback and CAS,
and remain disabled while selection is unknown, confirming or saving. Cancelled
confirmation retains the confirmed checkbox state; failed writes show uncertainty.
Add accounts only in Models, never in the Chat dropdown. Do not add an account search field or repeat Switch
buttons per row. Escape closes only the dropdown and restores its trigger; arrows,
Home and End navigate enabled options. Outside interaction dismisses the list.
Adding an account in Models does not select it. Quota is account billing-cycle data, not
context occupancy or Session cost; missing and pooled data retain their semantics.

Selection applies to subsequent turns of the viewed Session. An active turn
keeps its admitted account and policy. Save failures retain their real uncertainty
and never imply that a change succeeded. Session explicit choices do not change
other Sessions or the global default.

The composer Credits/usage pill opens a popover that includes a collapsible
**Visible-history continuation** disclosure only while the viewed Session is
open and its effective selection is the managed account-discovered Copilot
route. Expand it and choose **On** under **Session policy** to explicitly enable
an existing Session; the loss disclosure appears before the choice. The
canonical/native route does not show this control. Saving sets a persistent
Session policy, not the new-Session default: it applies to subsequent turns and
managed native compaction in that Session, including when the account does not
change. The active turn retains its admitted policy. No message is sent or
retried by enabling it.
See the [synthetic composer capture](./images/copilot-session-continuation.png);
it shows the control's appearance, not a live Session or policy read.

The separate **New Session continuation default** is managed in Models under
GitHub Copilot → Manage. Full account management belongs in Models; show a
"Manage accounts and models" entry only with a working public navigation
callback. Do not show a disabled link or unavailable-navigation paragraph.
Opening and closing Settings must not discard the composer draft or change the
selected Session. Direct navigation and automatic expansion depend on published
navigation APIs; absent support leaves navigation to ordinary Settings, never
parent DOM manipulation or a nonfunctional entry.

## Models: one Manage disclosure, two responsibilities

The existing native Settings layout and provider controls remain. The collapsed
Copilot contribution shows current default identity, model status, cache age and
one Manage button. Manage expands:

- Account management: current default account, Switch dropdown/add, identity
  refresh, reauthorization, guarded removal, and new-Session continuation default.
- Model preferences: cross-account shared exclusions, model search and filters,
  account-specific availability, discovery diagnostics and model refresh.

Removal requires explicit confirmation. It removes only locally saved account
authorization, not GitHub-side access, conversations or shared model preferences.
Preserve existing canonical/default/in-use removal guards; do not silently choose
another account.

Keep saved-account reauthorization/removal in a separate collapsed management
disclosure, not in the switching menu. The dropdown remains an account choice,
not another settings page. Global switching retains its explicit confirmation;
Chat retains the continuation confirmation when the current policy is off.

Model preferences are shared by exact model ID. Availability and capability
evidence remain account-specific. Missing models retain saved preferences;
returning models reuse them without becoming selected. Newly discovered models
are enabled unless excluded, but must satisfy authenticated metadata and admission
checks. Unknown/stale availability is not verified availability or definitive
absence. Do not discover every account solely to render a union catalog.
Fixed unavailable selections require explicit user correction; Auto uses only
eligible unexcluded models of the admitted account.

## Continuation and explicit-off recovery

The approved default is lossy visible-history continuation enabled for new
Sessions, with the loss disclosed beside the control. Existing Sessions and
seeded/forked histories must not silently inherit a new loss authorization.
Global changes do not retroactively rewrite a Session's captured initial policy.
Session overrides, including explicit off, persist and are reversible.

Every new admitted turn omits pre-existing encrypted reasoning items and their
embedded summaries, including on the same account. Visible messages, tool
calls/results and stored history remain unchanged. Current-turn reasoning stays
available for tool steps and native retries. This does not solve quota, HTTP 408
or oversized context and does not guarantee supplier acceptance.

This is a persistent Session policy, not only a one-time summary consent. Its
enabled state is captured at new-turn admission and also governs summaries
inside an observed managed native compaction bracket. Explicit visible-history
consent does not send or retry chat; the user must separately invoke native
Retry when appropriate.

When continuation is off and the user switches accounts, stop before saving the
selection and disclose the potential replay risk. Offer persistent enable and
switch, keep off and switch, or cancel. Do not offer next-turn-only authorization.
Account differences alone do not prove supplier rejection. Never guess encrypted
item origin or silently filter history.

After an exact supplier replay rejection, retain the native failed turn and
surface the same persistent Session policy: when off, disclose loss and offer
Enable/Cancel; when on, show diagnostic guidance without repeated authorization.
Do not show duration radios or unavailable Models navigation. Failure-evidence
expiry does not disable the persistent policy. Authorization never sends or retries. The user explicitly retries
the task through the native mechanism. Mock assistant answers are demonstrations,
not evidence of real cross-account success. Do not fabricate durable messages,
errors, replay or assistant content to imitate the mock.

## Theme and accessibility

Use native theme tokens for surfaces, text, borders, focus and errors. Native
select popup options must remain readable in dark and light themes; do not inherit
light popup backgrounds with dark-theme white text. Dropdowns and long account lists
must remain keyboard-operable, bounded and usable on narrow viewports. Explicit
loading, unknown, stale, failed-save and cancellation states are required.

The shared Models/Chat account dropdown must composite translucent native menu
tokens over an opaque system Canvas, so underlying settings and quota text never
bleed through. Dropdown and Credits panel elevation uses a dark shadow, not
CanvasText (which becomes a white glow in dark mode). Theme acceptance must
include translucent tokens, both themes/surfaces and narrow viewports; fixtures
that replace the token with opaque Canvas alone cannot establish this behavior.

## Implementation status

This document records the approved target, not a release or runtime attestation.
Implementation, native gateway/settings persistence, request admission,
dark/light interaction checks and required CI must qualify it before delivery.
