#!/usr/bin/env bats # Unit -- story 002, Task 3.1: `--static` validates profiles/catalog-vectors.toml. # Requirements: R4.1, R4.2, R4.3, R4.4, R4.5, R4.6, R4.7. # # Contract (design.md C3/C4): the vectors file declares the catalog's # `schema`; each [[vector]] has name, preset, layers, expect; `parent` exactly # when expect = "valid", `rules` exactly when expect = "invalid", no other key # (rule vector-key); names are unique and a valid vector names only catalog # ids (rule vector-id); every rule name of --compose (unknown-preset, # unknown-layer, exclusive, conflict, requires, base) has a vector or is in # rules_without_instance, a listed rule has no instance (for requires: no # layer declares requires), and both libc values and both toolchain values # appear in a VALID vector (rule vector-coverage); a missing file is a # vector-schema gap. Every gap is reported, then exit 1. The line prefix is # not pinned: a gap is any output line naming its rule and its subject. # # The coverage rules are identity rules (does THIS vector cover THAT rule or # value?), so each comes with both hostile halves: a vector that looks like # coverage but is not (named after a rule, or invalid over a musl preset), and # coverage that does not look like it but is (a rule reached only inside a # two-rule vector, values covered by different vectors). load lib/fixture load lib/vectors-fixture # --- the valid half ------------------------------------------------------------ @test "vectors: the complete fixture (every coverage rule met) passes --static: exit 0" { vfx_tree run "$SCRIPT" --static status_is 0 } # --- R4.5: rule coverage (hostile halves first) ---------------------------------- @test "R4.5 hostile: a vector NAMED after conflict but expecting base does not cover conflict" { vfx_catalog vfx_vectors conflict-nvidia-pair vfx_vec_raw <