mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-13 22:26:49 +00:00
The rule checked whether both keys contain the token `omit`. That catches the Ollama shape, where async carried no omit at all, but it does not enforce what the failure message claims: two keys can both carry omit and still hang on different switches, and the old check passed that. _gate() now reads the switch each key states inline - the test of an `if ... else omit`, or the left side of a `| ternary(..., omit)` - and the two must match. A key that names no gate matches another that names none, which is the shape sys-service and the canonical ASYNC_TIME/ASYNC_POLL pair use; both then inherit whatever their variables do. An unrecognised omit-bearing form falls into a single bucket, so it only matches another unrecognised form. Checked against all five shapes in the tree: the pre-fix Ollama pair is an offender, the fixed pair and the ternary and bare-variable pairs are not, and two different conditions are now an offender where the token check passed them. The rule still does not catch two ungated keys whose variables diverge. That is deliberate: group_vars makes ASYNC_TIME evaluate to omit while ASYNC_POLL stays numeric, and a poll without async is ignored. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Tests 🧪
All automated tests for Infinito.Nexus live here.
| Directory | Type | Guide |
|---|---|---|
unit/ |
Unit tests (isolated, no I/O) | unit.md |
integration/ |
Integration tests (real component boundaries) | integration.md |
external/ |
Opt-in live third-party checks, excluded from make test |
external.md |
e2e/ |
End-to-end Playwright tests | playwright.md |
regression/ |
Regression guard rules | regression.md |
lint/ |
Structural lint checks | lint.md |
Run each suite via the make targets documented in the linked guides.