cliOnlyJustifications top-level constant
User-readable justifications for the cliOnlySettings exemptions.
The app renders these in its "CLI-only settings" section (issue #288 AC4): where the app would naturally list a related setting, the CLI-only entry shows the marker + reason — never a silent absence. E3 discipline: the reason names the missing capability, not "didn't get to it".
Implementation
const cliOnlyJustifications = <SharedSetting, String>{
SharedSetting.mcpServers:
'MCP servers spawn external processes on the host; the app cannot '
'start them from its sandbox. Configure them in the CLI.',
SharedSetting.ttsrRules:
'Time-traveling stream rules watch every raw streaming delta to abort '
'mid-turn; the app chat surface has no per-delta hook for them.',
SharedSetting.cubeSandbox:
'fa_cube sandbox profiles need host-process sandboxing and a host '
'shell; the app runs WASI/memory-confined (or in a browser with no '
'shell at all).',
SharedSetting.promptOverrides:
'The app ships its prompt templates compiled in; runtime prompt '
'overrides are a CLI config-file feature.',
SharedSetting.redactionPolicy:
'The redaction pipeline runs inside the CLI host process with its '
'registered secrets in memory; the app reads the section but has no '
'pipeline to re-toggle live. Configure it in the CLI (issue #391).',
SharedSetting.imageRegistry:
'The image registry is process-wide state inside the CLI host agent '
'loop (the request-build rewrite reads a global published at boot); '
'the app composes its own requests and consumes the section '
'read-only. Configure it in the CLI (issue #395).',
SharedSetting.sleepPrevention:
'The sleep-prevention assertion lifecycle (run-start/settle and '
'session-open/close hooks) runs inside the CLI host process; the '
'app\'s power_guard reads the section but has no controller to '
're-arm live. Configure it in the CLI (issue #397).',
SharedSetting.contextWindowCap:
'The context cap feeds the CLI agent loop and compaction math '
'running in the CLI host process; the app has no agent loop to '
're-cap live. Configure it in the CLI (issue #394).',
SharedSetting.loadMode:
'The load preset curates the CLI agent loop\'s tool schema live '
'(the availability gate + discover_tools, issue #680); the app '
'composes its own per-surface tool sets and has no gate to re-apply '
'a preset to. Configure it in the CLI (issue #680).',
SharedSetting.agentMode:
'Agent modes are CLI REPL prompt presets; the app composes its own '
'prompts per surface and has no mode presets to switch.',
SharedSetting.memoryStores:
'Memory store locations are host filesystem paths; the app sandbox '
'resolves them read-only and cannot re-point the CLI at new paths.',
SharedSetting.tuiTheme:
'The TUI palette colors a terminal emulator; the app themes through '
'its own Flutter theming stack (separate system by design).',
SharedSetting.resiliencePolicy:
'The watchdog timeouts and retry policy govern the CLI host '
'process\'s provider connections; the app has no process-wide '
'override or roles resolver to re-arm. Configure them in the CLI '
'(issue #393).',
SharedSetting.spillHooks:
'Spill hooks run inside the CLI host process\'s agent loop (result '
'→ redact → size check → spill → preview, issue #678); the app has '
'no hook chain to attach to. Configure the section in the file.',
SharedSetting.harnessMode:
'The harness benchmark mode presets the CLI REPL boot (the 4-tool '
'surface and bare prompt of `fa --pi`, issue #679); the app has no '
'fa benchmark runner. Configure it in the CLI.',
};