Dynamic-mask admission has one invariant meaning: inactive addresses are not
evaluated, inactive operations are suppressed, inactive load-like result
lanes are zero-filled, and an all-zero mask completes without a service
request. There is no independent `all_zero_mask_completes` field: a dynamic
mask class that cannot provide this invariant must not be declared.
Independent review
No independent interface audit has been supplied for this attempt.
Execution provenance
The original pilot recorded the compiler hash and checkout revision separately; its binary build revision was not verified. Coverage follow-ups use separately identified rebuilt binaries. Original simulator binary hashes were not retained.
Original standalone-test agent report
This is exploratory evidence, not an accepted production-format PBT.
Three of the four behavioral clauses plus the completion half of the fourth are exercised against the real runtime; the 'without a service request' observable and the declaration-side clause have no reachable interface at this revision.
Reported numeric verdicts
all zero mask cases
31
Tested obligations
O1 inactive addresses are not evaluated (out-of-range/duplicated addresses on inactive lanes do not refuse or collide)
O2 inactive operations are suppressed (masked store leaves non-active memory bytes identical)
O3 inactive load-like result lanes are zero-filled (active lanes equal mem[addr], inactive lanes equal 0)
O4b 'without a service request' - no service-beat/transaction observable in the DFG simulation report; operation_fire_counts is an op firing count, not a service request
Declaration-side clause: 'no independent all_zero_mask_completes field; a dynamic mask class that cannot provide this invariant must not be declared' - MaskInactivePair / MemoryAccessClass::create are C++-only APIs (include/Fabric/IR/MemoryCapabilityDomains.h) with no MLIR attribute or CLI surface at this revision
Suppress vs SuppressAndZeroFill selection per access form, atomic / compare-exchange actors, PointerAddressed address form, ranked (multi-dim) mask geometry, non-i8 element widths
Format
standalone Python generator + Python output assertions over loom-dfg-sim JSON reports (no ProGRMR grammar / .spct checker; rationale in README)
Reproduction
not measured
Measured subject code coverage
blocked · The pinned subject target cannot be rebuilt with the available Clang 21 or Clang 24 / libstdc++13 toolchains: CgraClosedWaitSetDiagnostic has an implicitly deleted std::variant default constructor. Both simulator and pre-mapping targets depend on this code. No subject source was changed; original uninstrumented runs remain available, with their build revision unverified.
Coverage-preserving minimized cases: not measured
Full structured agent result
all zero mask cases
31
checker
pbt/checker.py
controlled violation
cases
s002_mutant_load
s002_mutant_store
s003_mutant_load
s003_mutant_store
classification
synthetic falsification of the property, not a subject defect
degenerate
s001_mutant_load
s001_mutant_store
degenerate reason
seed 1 mask is all-active, so the mutation is behaviorally inert
observed
report status 'blocked' with diagnostic 'dataflow.load|store address is out of range'; checker verdict fail on O1
omitted: no coverage instrumentation was accessible for the simulator binary and the budget was spent making the runtime PBT work
evidence
local
README.md
evidence/summary.json
pbt/cases/ (inputs + expectations)
remote scratch
/tmp/spectriad-autonomous-breadth-12 on bibim (per-case load.json, store.json, stdout, stderr, cases/rc.txt, verdicts.json)
format
standalone Python generator + Python output assertions over loom-dfg-sim JSON reports (no ProGRMR grammar / .spct checker; rationale in README)
generator
pbt/generator.py (+ pbt/build_cases.py)
normal case verdicts
fail
0
pass
100
passage
docs/spec-fabric-mem.md:432-436
potential subject bug
not measured
revision
48615bc5925ef4b9db8b4550b5d4322933cf4b7b
sampling limits
element type
i8
firings per graph
1
index width bits
32
lane counts
2
4
8
memory bytes
2..16
note
harness conventions, not source requirements
seeds
1..100 (plus 6 mutant variants of seeds 1-3)
slot
breadth-12
status
partial
status reason
Three of the four behavioral clauses plus the completion half of the fourth are exercised against the real runtime; the 'without a service request' observable and the declaration-side clause have no reachable interface at this revision.
O4b 'without a service request' - no service-beat/transaction observable in the DFG simulation report; operation_fire_counts is an op firing count, not a service request
Declaration-side clause: 'no independent all_zero_mask_completes field; a dynamic mask class that cannot provide this invariant must not be declared' - MaskInactivePair / MemoryAccessClass::create are C++-only APIs (include/Fabric/IR/MemoryCapabilityDomains.h) with no MLIR attribute or CLI surface at this revision
Suppress vs SuppressAndZeroFill selection per access form, atomic / compare-exchange actors, PointerAddressed address form, ranked (multi-dim) mask geometry, non-i8 element widths