dd1e5b723d
The lane shipped dead. `classify_changes.py` emitted `rust`, the composite action re-exported it, and ci.yaml's `rust-tests` job gated on `needs.detect.outputs.rust` — but the `detect` job never declared that output, so the expression was the empty string and the job reported "skipping" on the very PR that added it. GitHub does not error on a reference to an output a job never declared, so nothing went red. Adds the missing line plus the invariant that catches the whole class: every `needs.detect.outputs.X` referenced by a job's `if` must be declared by `detect`. Verified it fails with the line removed. The related check — every lane reaching the composite action — is separate on purpose: nix.yml and docker.yml own their triggers and re-export different subsets, so `docker` and `nix` are legitimately not ci.yaml detect outputs.