{ "cases": [ { "id": "cli.err.profile.missing", "doc": "--profile with no value", "symbols": [ "flag:--profile#parse" ], "steps": [ { "argv": [ "--profile" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.yes.explicit", "doc": "--yes given an explicit value", "symbols": [ "flag:--yes#parse" ], "steps": [ { "argv": [ "--yes=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.yolo.explicit", "doc": "--yolo given an explicit value", "symbols": [ "flag:--yolo#parse" ], "steps": [ { "argv": [ "--yolo=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.auto.explicit", "doc": "--auto given an explicit value", "symbols": [ "flag:--auto#parse" ], "steps": [ { "argv": [ "--auto=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.continue.explicit", "doc": "--continue given an explicit value", "symbols": [ "flag:--continue#parse" ], "steps": [ { "argv": [ "--continue=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.debug.choice", "doc": "--debug with a value outside its choices", "symbols": [ "flag:--debug#parse" ], "steps": [ { "argv": [ "--debug", "zzz-not-a-choice" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.debug-format.missing", "doc": "--debug-format with no value", "symbols": [ "flag:--debug-format#parse" ], "steps": [ { "argv": [ "--debug-format" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.debug-format.choice", "doc": "--debug-format with a value outside its choices", "symbols": [ "flag:--debug-format#parse" ], "steps": [ { "argv": [ "--debug-format", "zzz-not-a-choice" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.env.missing", "doc": "--env with no value", "symbols": [ "flag:--env#parse" ], "steps": [ { "argv": [ "--env" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.no-opencode.explicit", "doc": "--no-opencode given an explicit value", "symbols": [ "flag:--no-opencode#parse" ], "steps": [ { "argv": [ "--no-opencode=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.update-models.explicit", "doc": "--update-models given an explicit value", "symbols": [ "flag:--update-models#parse" ], "steps": [ { "argv": [ "--update-models=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.eval-retrieval.explicit", "doc": "--eval-retrieval given an explicit value", "symbols": [ "flag:--eval-retrieval#parse" ], "steps": [ { "argv": [ "--eval-retrieval=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.stats-rag.explicit", "doc": "--stats-rag given an explicit value", "symbols": [ "flag:--stats-rag#parse" ], "steps": [ { "argv": [ "--stats-rag=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.version.explicit", "doc": "--version given an explicit value", "symbols": [ "flag:--version#parse" ], "steps": [ { "argv": [ "--version=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-manifest.explicit", "doc": "--cap-manifest given an explicit value", "symbols": [ "flag:--cap-manifest#parse" ], "steps": [ { "argv": [ "--cap-manifest=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-speak.explicit", "doc": "--cap-speak given an explicit value", "symbols": [ "flag:--cap-speak#parse" ], "steps": [ { "argv": [ "--cap-speak=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-cwd.missing", "doc": "--cap-cwd with no value", "symbols": [ "flag:--cap-cwd#parse" ], "steps": [ { "argv": [ "--cap-cwd" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-model.missing", "doc": "--cap-model with no value", "symbols": [ "flag:--cap-model#parse" ], "steps": [ { "argv": [ "--cap-model" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-permission-mode.missing", "doc": "--cap-permission-mode with no value", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--cap-permission-mode" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-permission-mode.choice", "doc": "--cap-permission-mode with a value outside its choices", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--cap-permission-mode", "zzz-not-a-choice" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-max-turns.missing", "doc": "--cap-max-turns with no value", "symbols": [ "flag:--cap-max-turns#parse" ], "steps": [ { "argv": [ "--cap-max-turns" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.cap-max-turns.int", "doc": "--cap-max-turns with a non-integer", "symbols": [ "flag:--cap-max-turns#parse" ], "steps": [ { "argv": [ "--cap-max-turns", "abc" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.serve-mcp.missing", "doc": "--serve-mcp with no value", "symbols": [ "flag:--serve-mcp#parse" ], "steps": [ { "argv": [ "--serve-mcp" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.mcp-port.missing", "doc": "--mcp-port with no value", "symbols": [ "flag:--mcp-port#parse" ], "steps": [ { "argv": [ "--mcp-port" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.mcp-port.int", "doc": "--mcp-port with a non-integer", "symbols": [ "flag:--mcp-port#parse" ], "steps": [ { "argv": [ "--mcp-port", "abc" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.mcp-bind.missing", "doc": "--mcp-bind with no value", "symbols": [ "flag:--mcp-bind#parse" ], "steps": [ { "argv": [ "--mcp-bind" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.telegram.explicit", "doc": "--telegram given an explicit value", "symbols": [ "flag:--telegram#parse" ], "steps": [ { "argv": [ "--telegram=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.scheduler.explicit", "doc": "--scheduler given an explicit value", "symbols": [ "flag:--scheduler#parse" ], "steps": [ { "argv": [ "--scheduler=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.install.explicit", "doc": "--install given an explicit value", "symbols": [ "flag:--install#parse" ], "steps": [ { "argv": [ "--install=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.install-telegram.explicit", "doc": "--install-telegram given an explicit value", "symbols": [ "flag:--install-telegram#parse" ], "steps": [ { "argv": [ "--install-telegram=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.uninstall-telegram.explicit", "doc": "--uninstall-telegram given an explicit value", "symbols": [ "flag:--uninstall-telegram#parse" ], "steps": [ { "argv": [ "--uninstall-telegram=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.plexer-wrap.explicit", "doc": "--plexer-wrap given an explicit value", "symbols": [ "flag:--plexer-wrap#parse" ], "steps": [ { "argv": [ "--plexer-wrap=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.demo.explicit", "doc": "--demo given an explicit value", "symbols": [ "flag:--demo#parse" ], "steps": [ { "argv": [ "--demo=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.demo-shot.explicit", "doc": "--demo-shot given an explicit value", "symbols": [ "flag:--demo-shot#parse" ], "steps": [ { "argv": [ "--demo-shot=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.tui.explicit", "doc": "--tui given an explicit value", "symbols": [ "flag:--tui#parse" ], "steps": [ { "argv": [ "--tui=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.tui-local.explicit", "doc": "--tui-local given an explicit value", "symbols": [ "flag:--tui-local#parse" ], "steps": [ { "argv": [ "--tui-local=1" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.theme.missing", "doc": "--theme with no value", "symbols": [ "flag:--theme#parse" ], "steps": [ { "argv": [ "--theme" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.unknown.long", "doc": "unknown long flag", "symbols": [], "steps": [ { "argv": [ "--bogus" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.unknown.short", "doc": "unknown short flag", "symbols": [], "steps": [ { "argv": [ "-z" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.ambiguous.debug", "doc": "--deb matches --debug and --debug-format", "symbols": [ "flag:--debug#parse" ], "steps": [ { "argv": [ "--deb" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.ambiguous.cap", "doc": "--cap-m matches --cap-model and --cap-max-turns", "symbols": [ "flag:--cap-model#parse" ], "steps": [ { "argv": [ "--cap-m" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.ambiguous.install", "doc": "--ins matches --install, --install-telegram", "symbols": [ "flag:--install#parse" ], "steps": [ { "argv": [ "--ins" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.ambiguous.tui", "doc": "--tu matches --tui and --tui-local", "symbols": [ "flag:--tui#parse" ], "steps": [ { "argv": [ "--tu" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.prefix.version", "doc": "unique prefix --vers resolves to --version", "symbols": [ "flag:--version#parse" ], "steps": [ { "argv": [ "--vers" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.version.long", "doc": "--version", "symbols": [ "flag:--version#output" ], "steps": [ { "argv": [ "--version" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.version.with_choice", "doc": "--version alongside a valid choice flag", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--version", "--cap-permission-mode", "none" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.help.long", "doc": "--help text, exact", "symbols": [], "steps": [ { "argv": [ "--help" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.help.short", "doc": "-h text, exact", "symbols": [], "steps": [ { "argv": [ "-h" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.help.wins_over_error", "doc": "-h before a bad flag prints help, exit 0", "symbols": [], "steps": [ { "argv": [ "-h", "--bogus" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.err.error_before_help", "doc": "bad choice before -h is an error, exit 2", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--cap-permission-mode", "zzz", "-h" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.cap_manifest", "doc": "--cap-manifest text, exact", "symbols": [ "flag:--cap-manifest#output" ], "steps": [ { "argv": [ "--cap-manifest" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true }, "tests": [ "CapCliTests.test_cap_manifest_flag_prints_valid_toml" ] }, { "id": "cli.ok.debug-format.sentence", "doc": "--debug-format sentence accepted, then --version", "symbols": [ "flag:--debug-format#parse" ], "steps": [ { "argv": [ "--debug-format", "sentence", "--version" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.ok.debug-format.json", "doc": "--debug-format json accepted, then --version", "symbols": [ "flag:--debug-format#parse" ], "steps": [ { "argv": [ "--debug-format", "json", "--version" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.ok.cap-permission-mode.none", "doc": "--cap-permission-mode none accepted, then --version", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--cap-permission-mode", "none", "--version" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.ok.cap-permission-mode.confirm", "doc": "--cap-permission-mode confirm accepted, then --version", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--cap-permission-mode", "confirm", "--version" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } }, { "id": "cli.ok.cap-permission-mode.interactive", "doc": "--cap-permission-mode interactive accepted, then --version", "symbols": [ "flag:--cap-permission-mode#parse" ], "steps": [ { "argv": [ "--cap-permission-mode", "interactive", "--version" ], "timeout": 30 } ], "compare": { "stdout": true, "stderr": true, "exit": true } } ] }