Rejected invocations, including --version combined with any other argument, belong to the usage
fixture. Manual-page and release-archive version synchronization are separate scenarios.
Limitations
This fixture observes the version reported by the locally built executable. It does not prove that a
published release tag, archive name, or downstream package version carries the same value.
# Command version
**Fixture:** `fixture-cli-version@1`
## Given
The built `termux-janitor` executable starts with standard input disconnected from a terminal and an
empty isolated working directory.
The executable receives exactly one argument, `--version`.
## When
The executable starts.
## Required invariants
- **`INV-VERSION-SUCCESS`:** The process exits with the registered success status.
- **`INV-VERSION-STDOUT`:**
Standard output names the executable and the one canonical package version.
- **`INV-VERSION-CHARSET`:**
The reported version is nonempty and uses only ASCII letters, digits, `.`, `-`, `_`, and `+`.
## Forbidden effects
- **`NO-VERSION-STDERR`:** Standard error remains empty.
- **`NO-VERSION-FIXTURE-MUTATION`:**
The isolated working directory remains empty.
## Instrumentation
```zig tj-test
try fixture.given_program("termux-janitor");
try fixture.given_standard_input(.ignored);
try fixture.given_working_directory(.empty);
try fixture.given_arguments(&.{"--version"});
try fixture.when_run();
try fixture.then_inv_version_success();
try fixture.then_inv_version_stdout();
try fixture.then_inv_version_charset();
try fixture.forbid_no_version_stderr();
try fixture.forbid_no_version_fixture_mutation();
```
## Variations
Rejected invocations, including `--version` combined with any other argument, belong to the usage
fixture. Manual-page and release-archive version synchronization are separate scenarios.
## Limitations
This fixture observes the version reported by the locally built executable. It does not prove that a
published release tag, archive name, or downstream package version carries the same value.