--- name: cfg-approval-timeout-recovery description: "Use when a cfg://.../save write fails with \"user did not answer the approval prompt\": the settings-approval dialog has a hardcoded 10 s timeout and no config key; recover via direct config.yml edit once the user has approved the change." --- # Recovering from cfg:// approval-prompt timeouts ## Facts (verified in bundle 2026-10-18) - Settings-write approval dialog timeout is **hardcoded 10 000 ms** (`timeout: JKl`, `JKl=1e4`, countdown class treats arg as ms) in the omp `dist/cli.js` bundle. **No config key exists** for it (checked full `cfg://` registry). - `ask.timeout` is a DIFFERENT gate (ask-tool auto-select; 0 = wait forever). It does not govern cfg approvals. - A timed-out approval silently auto-denies: session-only value stays applied, `config.yml` unchanged. Error says "nothing changed; it stays . NEVER retry unless the user asks." - Related: `features.unexpectedStopDetection: smart` injects forced-continue ``s on text-only turns ending in a promise to act ("Task incomplete: MUST call the next concrete tool now"). Set `mechanical` (upstream default) or `none`; `smart` drives agents into junk subagent spawns to satisfy the nudge. ## Recovery procedure (only when the user has already explicitly approved the change) 1. Do NOT re-issue `cfg:///save` after a timeout unless the user explicitly asks again — the harness forbids it. 2. Edit `~/.omp/agent/config.yml` directly: - `grep` the setting key to locate it; read surrounding lines. - surgical `edit` of the single line. - validate: `python3 -c "import yaml; yaml.safe_load(open('/home/blank/.omp/agent/config.yml'))"` 3. State that the file was edited directly because the invisible 10 s dialog ate the user's approval, and offer the `omp config set ` one-liner as the user-run alternative for future. ## Prevention - Before any `cfg://.../save`, warn the user a ~10 s dialog is about to appear and to answer immediately. - Bundle-fact lookups: `PKGDIR=$(dirname $(readlink -f $(command -v omp)))/..`, then grep `dist/cli.js` for the message string, walk to the call site, resolve minified constants with `grep -oE '[,;]CONST=[^,;)]+'` (`1e4` = 10000).