fileOnlyConfigKeys top-level constant
Top-level yaml keys that are intentionally NOT interactive settings on ANY surface — structural or infrastructure config, edited in the file by design. Every entry carries its WHY (issue #288 AC1: a documented structural-only key, reviewed).
Implementation
const fileOnlyConfigKeys = <String, String>{
// A2A gateway endpoints + credentials are deployment wiring (env-token
// references included) — infrastructure, not a user preference.
'a2a':
'A2A gateways are deployment infrastructure (endpoints and '
'credentials with env-token references); no surface edits them '
'interactively.',
// Trajectory capture tuning (opt-in raw wire dumps, issue #385): a
// deliberate, size/pII-sensitive escape hatch — file-only by design so
// it cannot be flipped casually mid-session.
'trajectory':
'Trajectory wire-dump capture is an opt-in, size/pII-sensitive '
'debugging escape hatch (issue #385); provisioned deliberately in '
'the file per environment.',
// Quota monitoring knobs (issue #823): the badge is a deliberate opt-in
// chrome choice and the TTL is an operational cadence — both provisioned
// in the file per environment; surfaces only READ quota state, no
// settings UI writes this section.
'quota':
'Quota-monitoring knobs (issue #823): opt-in badge and cache TTL, '
'provisioned per environment in the file; /quota and the surfaces '
'read quota state and change no setting.',
// Background-subagent heartbeat cadence and stall threshold (issue
// #383): operational knobs for long-running sessions, tuned in the
// file; 0/0 disables the heartbeat entirely.
'subagents':
'Heartbeat cadence and stall threshold for background-subagent '
'status digests (issue #383) — operational knobs, tuned in the '
'file.',
// Background-job registry knobs (issue #478): the stale-entry age
// belt (`staleHours`), the boot log GC (`logRetentionDays`), and the
// per-log size ceiling (`maxLogBytes`, issue #919) — operational knobs,
// tuned in the file; 0 disables the first two.
'jobs':
'Job-registry knobs (issue #478) — staleHours age belt '
'+ logRetentionDays boot GC + maxLogBytes per-log ceiling '
'(issue #919); operational, tuned in the file.',
// Visible-waiting heartbeat cadence + `--wait-for-jobs` ceiling
// (issue #450) and the per-call foreground liveness knobs (gh-1055:
// reminder start/cadence + the background-hint escalation threshold) —
// operational knobs for long waits, tuned in the file; 0 disables the
// heartbeat / the whole per-call liveness respectively.
'waiting':
'Waiting-heartbeat cadence, the headless --wait-for-jobs ceiling '
'(issue #450), and the per-call tool-liveness thresholds '
'(gh-1055) — operational knobs, tuned in the file.',
// The fabric section carries the HOST's discovery announcements (issue
// #27 phase 2) — written by hosts, read by the runtime, never user-edited.
'fabric':
'Host discovery announcements are written BY hosts (issue #27), not '
'by users; read-only config.',
// Roles-group member: per-path role pinning, parsed together with
// roles:. Superseded for interactive use by the roles: chains the
// agent-models flow edits; per-path pinning stays file-tuned.
'modelOverrides':
'Roles-group member (per-path role pinning), superseded for '
'interactive use by the roles: chains the agent-models flow edits; '
'per-path pinning stays file-tuned.',
// Product/store links (issue #691): routing data read by every
// surface (app Get banner, CLI, fa1.dev generator) — no interactive
// editor by design; the file is the single source of truth.
'links':
'Product/store links (issue #691) are routing data every surface '
'READS (app Get banner, CLI, fa1.dev generator); the config file '
'is the single source of truth and no surface edits it '
'interactively.',
// Console-output presentation flag (gh-1198): the opt-in live thinking
// stream for CLI line-mode/headless runs — a CI/log presentation choice
// with no app-side analog (the app renders thinking in its own UI),
// so it stays file/flag-tuned.
'output':
'The live thinking stream (gh-1198) is a CLI console/log '
'presentation choice (fa --stream-thinking or the file); the app '
'renders thinking in its own UI and has no console output to '
'configure.',
};