# Ariadne CLI skeleton ## Scope Build only the CLI scaffolding and boilerplate first. Do not implement Clew AST import in this slice. Do not add route planning in this slice. Do not add Bazel tests in this slice. ## Dependency setup Use `clap` for CLI parsing. Vendor `clap` in a separate prerequisite commit. Add the CLI skeleton in a follow-up commit. ## Command shape The first CLI has no subcommands. The default command runs all declared stages. Example: ```sh ariadne --output-dir output/ ``` Use `--output-dir`, not `--output_dir`, unless project convention later requires underscores. ## Stage model Model stages with a manually written typed `Stage` enum for now. Defer compile-time generation until duplication creates a real problem. A stage has: - a name; - prerequisites. Stage execution can use dispatch logic instead of a common trait. The graph type stays stable across all stages. ## Pipeline behavior Running all stages runs each declared stage in dependency order. A future targeted stage command will also run its prerequisites first. Each stage writes artifacts under: ```text /graph// ``` `graph` is a literal directory name. It is not a parameter. A stage skips when its stage output already exists. `--force` makes every invoked stage overwrite its output. With `--force`, Ariadne removes each invoked stage output directory before it runs that stage. ## Deferred questions - Decide whether stage outputs need success markers. - Decide whether stage names use kebab-case in output paths. - Decide how future targeted stage invocation appears in the CLI.