$ python3 tools/release_gate.py /tmp/release
pass  pack         installed copy matches the library: 1 installed copy, 14 files, each byte-identical
pass  input        header contract: every input carries what the leaf needs (1 file)
pass  computation  script re-run: the library's skills/budget-vs-actual/scripts/bva.py writes output/bva.json byte for byte from these inputs
pass  checks       script_identity: operating income and variances reconcile for the month and YTD
pass  checks       independent_identity: source YTD operating income 387654.20 recomputes
pass  checks       contract: 5 sections in order; sentences, tables, bullets and data notes follow the contract
pass  checks       provenance: all 57 figures trace to the script's display block
FAIL  checks       binding: $196K belongs to Cost of goods sold (records), which this bullet in drivers does not name: 'COGS was favourable by $196K, or 2.4%, but only because revenue was lower. Gross margin...'; 2.4% belongs to Cost of goods sold (records), which this bullet in drivers does not name: 'COGS was favourable by $196K, or 2.4%, but only because revenue was lower. Gross margin...'
failed: wrote release.json and release.md in /tmp/release
exit 1
