Found while verifying the Big Pickle → Altimate Base migration end to end against the v0.11.1 binary (PTY-driven, isolated HOME) and cross-checking App Insights after the 0.11.0 GA.
What works (verified empirically, 0.11.1)
- A user whose persisted
model.json has opencode/big-pickle in recent sees the "Big Pickle has been retired." disclosure on launch, explicit No + Enter persists altimate_base_big_pickle_migration_declined_v1 and opens the provider picker, Yes registers (one POST /register) and rewrites recents to altimate-free/altimate-base, an already-registered user is migrated silently, and a project provider allowlist suppresses the dialog.
The gap: implicit Big Pickle users are never offered Altimate Base
usesLegacyDefault() (packages/tui/src/context/local.tsx) only returns true when recent actually contains opencode/big-pickle. But recent is written only by a picker-driven selectModel(..., { recent: true }). A pre-0.11 user who never picked a model had Big Pickle purely as the server-side implicit default (Provider.defaultModel()), with an absent or empty recent. On 0.11.x that user:
- gets no migration dialog and no Altimate Base disclosure at all (verified: no
model.json, and {"recent":[]}, both launch straight into chat), and
- is silently rerouted to whatever
Provider.defaultModel() now resolves first, because big-pickle is excluded from the implicit scan. In the field that is opencode/nemotron-3.5-lightning-free; in the isolated test it was a Vertex model, i.e. catalog-order dependent.
Size of the population (App Insights, release builds, 2026-08-25 → 2026-09-09)
- 1,031 machines had sessions on
big-pickle.
- Only 4 of them ever emitted
provider_selected: big_pickle (an explicit pick). The other 1,027 are implicit-default users the migration cannot reach.
- Of the 4 Big Pickle machines already on 0.11.x, both with sessions since GA are running
nemotron-3.5-lightning-free, not Altimate Base, and never saw a prompt.
This is the main reason Altimate Base has essentially no external traffic yet: the migration targets ~0.4% of the Big Pickle base, and the rest are moved to a different free Zen model without a disclosure.
Suggested fix
Treat "current model resolves to a retired implicit default and the user has no explicit selection" as migration-eligible: e.g. have the server report (or the TUI detect) that the pre-0.11 implicit default would have been opencode/big-pickle (no recent, no explicitDefault, no config model, no provider allowlist, and the opencode provider present without a key), and show the same origin="migration" disclosure. Keep the decline marker semantics.
Related UX nuance (same dialog)
Dismissing the migration dialog with Escape or Ctrl-C records the decline but leaves the user on Big Pickle with no picker, whereas explicit "No — pick something else" + Enter opens the provider picker. Escape is the likeliest "no thanks" gesture, so Escape users are stranded on the retired model with no visible next step other than /model.
Telemetry note
The migration dialog emits no events (consent events are gated on the first-run funnel), so prompts, accepts, and declines from the migration path are invisible in App Insights. Worth emitting altimate_base_confirm_shown / altimate_base_choice with origin: "migration".
Found while verifying the Big Pickle → Altimate Base migration end to end against the v0.11.1 binary (PTY-driven, isolated HOME) and cross-checking App Insights after the 0.11.0 GA.
What works (verified empirically, 0.11.1)
model.jsonhasopencode/big-pickleinrecentsees the "Big Pickle has been retired." disclosure on launch, explicit No + Enter persistsaltimate_base_big_pickle_migration_declined_v1and opens the provider picker, Yes registers (onePOST /register) and rewrites recents toaltimate-free/altimate-base, an already-registered user is migrated silently, and a projectproviderallowlist suppresses the dialog.The gap: implicit Big Pickle users are never offered Altimate Base
usesLegacyDefault()(packages/tui/src/context/local.tsx) only returns true whenrecentactually containsopencode/big-pickle. Butrecentis written only by a picker-drivenselectModel(..., { recent: true }). A pre-0.11 user who never picked a model had Big Pickle purely as the server-side implicit default (Provider.defaultModel()), with an absent or emptyrecent. On 0.11.x that user:model.json, and{"recent":[]}, both launch straight into chat), andProvider.defaultModel()now resolves first, becausebig-pickleis excluded from the implicit scan. In the field that isopencode/nemotron-3.5-lightning-free; in the isolated test it was a Vertex model, i.e. catalog-order dependent.Size of the population (App Insights, release builds, 2026-08-25 → 2026-09-09)
big-pickle.provider_selected: big_pickle(an explicit pick). The other 1,027 are implicit-default users the migration cannot reach.nemotron-3.5-lightning-free, not Altimate Base, and never saw a prompt.This is the main reason Altimate Base has essentially no external traffic yet: the migration targets ~0.4% of the Big Pickle base, and the rest are moved to a different free Zen model without a disclosure.
Suggested fix
Treat "current model resolves to a retired implicit default and the user has no explicit selection" as migration-eligible: e.g. have the server report (or the TUI detect) that the pre-0.11 implicit default would have been
opencode/big-pickle(norecent, noexplicitDefault, no configmodel, no provider allowlist, and theopencodeprovider present without a key), and show the sameorigin="migration"disclosure. Keep the decline marker semantics.Related UX nuance (same dialog)
Dismissing the migration dialog with Escape or Ctrl-C records the decline but leaves the user on Big Pickle with no picker, whereas explicit "No — pick something else" + Enter opens the provider picker. Escape is the likeliest "no thanks" gesture, so Escape users are stranded on the retired model with no visible next step other than
/model.Telemetry note
The migration dialog emits no events (consent events are gated on the first-run funnel), so prompts, accepts, and declines from the migration path are invisible in App Insights. Worth emitting
altimate_base_confirm_shown/altimate_base_choicewithorigin: "migration".