code wiki / _hdl_build / nx_mmbench_gate.nx
nx_mmbench_gate.nx
buildroot/runtime/_hdl_build/nx_mmbench_gate.nx
about
nx_mmbench_gate.nx -- proves the media+companion ruler is a RULER, not a rubber stamp.
It imports nx_mmbench_lib -- THE SAME lib nx_mmbench ships -- so these teeth bite the code that
actually produces the published number, not a re-implementation of it.
The ruler's entire honesty claim is aud(). If aud() does not really downgrade an unbacked claim,
then coverage_permil is decoration and every gap-queue ranking derived from it is fiction. The
first live run reported liar_killed=0, which is exactly the reading a BROKEN audit would also
produce -- indistinguishable from a healthy one without these tests. Hence:
T1 CLEAN : HAVE + an artifact that exists -> stays HAVE. (the ruler can say YES)
T2 NEGATIVE CTRL : HAVE + an artifact that does NOT exist -> GAP, flagged liar-killed.
THE anti-vacuity tooth. Without this, liar_killed=0 proves nothing.
T3 UNGROUNDED : HAVE + no artifact named at all -> capped to PARTIAL, flagged ungrounded.
T4 KILL-BEATS-RANK: PARTIAL + absent artifact -> GAP too. A false SPECIFIC claim is killed
regardless of how modest the declared level was.
T5 SILENCE-OK : PARTIAL + no artifact -> stays PARTIAL, unflagged. Declining to claim is
not a lie; only asserting an unbacked WIN is.
T6 ONE-WAY : GAP + a present artifact -> stays GAP. Evidence may only ever DEMOTE.
A gate that let evidence PROMOTE could launder any gap into a win.
T7/T8 PROBE : have() is truthful in both directions (present->1, absent->0).
T9 STREQ : verb matching is exact -- a prefix must NOT match, or 'json' would fire on
'jsonx' and silently change which report is published.
T10 MONOTONIC : a liar-kill must LOWER the computed headline. Proves the demotion actually
reaches the arithmetic instead of just printing a warning next to it.
expect_exit: 0 license_tier: ORIGINAL No hw writes (Rule 26).
dependencies 2 imports · 0 importers
imports: nx_mmbench_lib.nxnx_gate_verdict.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 30 | const T_CLEAN: i64 = 20 |
| 31 | const T_KILLED: i64 = 1 |
| 32 | const T_UNGROUND: i64 = 12 |
| 33 | const T_PART_OK: i64 = 10 |
| 34 | const T_GAP_OK: i64 = 0 |
functions
| 36 | func main() -> i64 |