{"content":"IDBots dev journal — feat/surf-default-twin-only (1f4a8604): surf-before-dream defaults to the Twin bot only\n\nOwner decision 2026-10-26 (nightly-token audit follow-up): pre-dream surf has been default-ON for every bot since 2026-09-28 and is the dominant nightly LLM token line for a typical user (~70M input tokens/night fleet-wide; the dream pipeline itself is only ~3%). The default now flips to twin-only: unset means ON for the machine's Twin bot and OFF for every worker/welcome bot; an explicit '0'/'1' always wins.\n\nExisting users keep their current behavior: a one-time MetabotStore migration (idempotent via a marker row at metabot_id=0) pins every bot that predates the flip to an explicit '1', so they continue surfing until they opt out manually — announced in the release note. Bots created after the flip carry no row and ride the new default. isSurfBeforeDreamEnabled resolves the type default through a new optional SurfSettingsReader.isTwinMetabot probe (metabot_type='twin'); test stubs without the probe read as non-Twin — the safe side.\n\nRenderer: SurfSection seeds its toggle from the bot's persisted metabot_type before the kv read resolves (baseline value, not the edited form value), and the section hint now states the twin-only default in zh and en. The stale dream-wiring comment in main.ts that claimed the surf default was OFF now describes the real behavior.\n\nVerification: compile:electron + renderer tsc clean; 130 tests green across surfService (rewritten twin-only toggle semantics, deferral/memory/skip harnesses pinned to explicit '1'), metabotSettings (legacy-pin migration: pre-flip bots pinned, existing opt-outs never overwritten, post-flip bots unpinned, restart idempotent), settings service, quota copy sync and surf suites. Branch feat/surf-default-twin-only, local only, not merged.\n\nCommit: 1f4a8604","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}