mirror of
https://github.com/storytold/filmcraft.git
synced 2026-11-02 22:40:04 -06:00
Problem: `filmcraft --help` opened the app. Every argument the parser did not know was taken as a file to open, so `--help`, `-h` or a mistyped flag started a window (and tried to import "--help" as media). `--control` with a missing or invalid port, and an invalid `FILMCRAFT_CONTROL_PORT`, started the app without the control server and said nothing, which leaves a script waiting for a server that never comes. Solution: argument parsing moves into its own module (`args.rs`, `args::parse`), which runs before anything else starts. `--help` / `-h` print the usage (the options the app parses: --control, --demo, --empty, --recover, --no-recover, --data-dir, --version) and exit 0. An unknown option, or `--control` / `--data-dir` without a usable value, prints the error and the usage on stderr and exits 2. The whole line is checked, so `--version --bogus` is an error too. A `FILMCRAFT_CONTROL_PORT` that is not a port is the same error as a bad `--control` (exit 2), for the same reason; an empty value counts as unset, and the value is not looked at when `--control` is given or for `--help` / `--version`. `--` ends the options, so a file whose name starts with a dash can still be opened; a lone `-` and the `-psn_...` argument macOS adds to app launches are not treated as options. Tests (in args.rs): `help_and_version_do_not_start_the_app`, `unknown_options_are_errors`, `a_bad_port_in_the_environment_is_an_error_like_a_bad_control_flag`, `known_options_and_files_parse_as_before`. docs/contributing.md mentions `--help` and the errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>