fileOnlyConfigKeys top-level constant

Map<String, String> const fileOnlyConfigKeys

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.',
};