Suite contracts that at least one indexed artefact is governed by. A contract with no artefact is not shown as covered or uncovered — it is not shown at all, because nothing was measured under it.
Coverage
Build snapshot · Not liveHow far up the evidence ladder each suite actually reaches, which provenance fields are required against which are present, what reproducibility exists — and a queue of every gap, each routed to the exact producer that must change to close it.
Coverage census
Suites whose highest rung with evidence is over the air. This is a count of collection methods, not a quality ranking: a GPU latency suite is not deficient for having no OTA run.
One item per observed gap: a claimed rung with no run, a required field absent from at least one artefact, an unmet repetition policy, a seed only in a file name, no verifiable clean host, or no CI. Every item is derived from the artefacts, never from an opinion about them.
Gaps whose producer is in this tree and needs nothing this machine does not have. Change the producer, run it, done. These are the ones to pick up today.
Gaps with a named owner that still cannot close here: a matched UHF antenna is a purchase, a clean-GPU measurement needs the box drained, a checkpoint directory that is not in this repository is not going to appear. Every one of these rows names its own blocker.
115 gap(s) are routed to a producer path that exists in this tree. The remaining 0 have no file to change, so they cannot be picked up until somebody writes one, which is itself the first item in the queue.
Indexed artefacts no suite contract claims. They are neither passing nor failing; they are outside the contract layer entirely, and they are listed by name rather than dropped.
How coverage is computed
The predicates behind every number on this page
check it, do not trust it- Which artefacts are in scope
- Every flat *.json under benchmarks/reports, read once when the page was built. Subdirectories are NOT indexed, so the run-<id>/ trees the bench harness and CI write are outside this page entirely.
- Which suite an artefact belongs to
- An adapter matches the file and gives it a schema id; a suite contract claims that schema id in its suiteOf list. An artefact no contract claims is listed as ungoverned rather than dropped or counted.
- Who owns a gap
- The families of the artefacts the gap is actually in, mapped through PRODUCER_MAP, with every path stat'd against the filesystem at build time. A gap is never routed to the producer of a family it does not touch.
- When a repetition counts
- compareRuns() over every pair of runs that carries a measurement instant. A run with no instant is not paired, so a suite where nothing carries one reports ZERO PAIRS CHECKED rather than zero partners found.
- What CI availability means here
- PRODUCER_MAP[family].ci, which is hand-maintained. It is this map's claim about .github/workflows, not a scan of it. The workflow files are in the tree; read them if you want to check.
- What an empty match does
- Zero artefacts, or artefacts no contract claims, renders as an error at the top of this page. It never renders as a pass and never as a silent zero.
- Producer paths, checked against the tree
- Every path this page names was stat'd when the page was built. All of them are there.
The evidence ladder
What each rung means
method, not grade- 1 Synthetic Measured on generated inputs. It can only ever describe the generator: a flaw the generator and the test share is invisible to it by construction.
- 2 Deployed service Measured through a running service, over its real interface, on inputs that are still generated or replayed.
- 3 Hardware in loop Measured on the real accelerator or radio hardware, with the real driver stack, but not on a live air interface.
- 4 Lab RF Measured over a real RF path under controlled laboratory conditions — real propagation, chosen conditions.
- 5 Over the air Measured over the air, on signals nobody in this project produced. The only rung at which a claim about the real world is expressible.
Evidence maturity per suite
Where each suite's evidence actually sits
11 suites| Suite | Runs | Synthetic | Deployed service | Hardware in loop | Lab RF | Over the air | Highest rung | Detail |
|---|---|---|---|---|---|---|---|---|
TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1 | 3 | Out of scope | Out of scope | Out of scope | Out of scope | 3 runs | Over the air | |
TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1 | 4 | Out of scope | Out of scope | Out of scope | Out of scope | 4 runs | Over the air | |
TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1 | 4 | Out of scope | Out of scope | Out of scope | Out of scope | 4 runs | Over the air | |
RF channel quality of the capture set rf-channel-quality@1 | 2 | Out of scope | Out of scope | Out of scope | 1 run | 1 run | Over the air | |
cuPHY LDPC decode latency cuphy-ldpc-decode@1 | 2 | Out of scope | Out of scope | 2 runs | Out of scope | Out of scope | Hardware in loop | |
cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1 | 1 | Out of scope | Out of scope | 1 run | Out of scope | Out of scope | Hardware in loop | |
GPU partitioning mechanism probe gpu-partition-mechanism@1 | 2 | Out of scope | Out of scope | 2 runs | Out of scope | Out of scope | Hardware in loop | |
LDPC latency under a stepped AI load ldpc-step-load@1 | 2 | Out of scope | Out of scope | 2 runs | Out of scope | Out of scope | Hardware in loop | |
Synthetic held-out classification accuracy heldout-accuracy@1 | 6 | 6 runs | Out of scope | Out of scope | Out of scope | Out of scope | Synthetic | |
Sensing generalization across synthetic conditions sensing-generalization@1 | 15 | Claimed, none | 15 runs | Out of scope | Out of scope | Out of scope | Deployed service | |
Training history training-history@1 | 3 | 3 runs | Out of scope | Out of scope | Out of scope | Out of scope | Synthetic |
Provenance required against present · reproducibility
TVWS occupancy on real over-the-air captures
tvws-ota-occupancy@1 3 runsProvenance fields
- Present measurement instant measuredAt blocking
- Present checkpoint sha256 identity.checkpointSha256 blocking
- Present producing harness harness blocking
- Present capture set facts.dataset.id blocking
- 0 / 3 harness revision harnessRevision Absent from 3: ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 0 / 3 repo commit identity.repoCommit Absent from 3: ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 0 / 3 dataset hash identity.datasetHash Absent from 3: ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 0 / 3 workload hash identity.workloadHash Absent from 3: ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 0 / 3 host environment.host Absent from 3: ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
Reproducibility
- Seeds
- 0 in artefact · 0 filename only · 3 absent
3 run(s) state no seed at all, in the artefact or in the name.
- Repetitions
- 0 / 2 required · 3 pairs compared
3 pair(s) went through the full preflight and none passed. The field that blocked the most pairs is dataset hash (absent from 3 of 3). Similar file names are not repetitions.
Blocked by: dataset.hash (absent, 3) · dataset.preprocessing (absent, 3) · dataset.split (absent, 3) · environment.profile (absent, 3)
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 3 not collected
No run in this suite collected a co-tenant list at all. All 3 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs the OTA capture set and a checkpoint, neither of which is on a GitHub runner.
Producers
- scripts/eval-ota-checkpoint.py Path verified TVWS over-the-air eval · 3 run(s) — Scores a checkpoint against the real over-the-air captures using the service's own inference path.
TVWS per-epoch OTA diagnostic
tvws-ota-per-epoch@1 4 runsProvenance fields
- Present measurement instant measuredAt blocking
- 2 / 4 training seed identity.seed blocking Absent from 2: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json
- 0 / 4 harness revision harnessRevision Absent from 4: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 0 / 4 repo commit identity.repoCommit Absent from 4: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 0 / 4 dataset hash identity.datasetHash Absent from 4: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 0 / 4 workload hash identity.workloadHash Absent from 4: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 0 / 4 checkpoint sha256 identity.checkpointSha256 Absent from 4: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 0 / 4 host environment.host Absent from 4: ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
Reproducibility
- Seeds
- 0 in artefact · 2 filename only · 2 absent
2 run(s) carry their seed only in the FILE NAME. A file name is not an artefact field: it can be changed by a copy, and it is not what the producer measured under.
- Repetitions
- 0 / 2 required · 6 pairs compared
6 pair(s) went through the full preflight and none passed. The field that blocked the most pairs is dataset hash (absent from 6 of 6). Similar file names are not repetitions.
Blocked by: dataset.hash (absent, 6) · dataset.preprocessing (absent, 6) · dataset.split (absent, 6) · environment.profile (absent, 6)
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 4 not collected
No run in this suite collected a co-tenant list at all. All 4 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs the OTA capture set and a directory of checkpoints.
Producers
- scripts/ota-per-epoch-sweep.py Path verified TVWS OTA per-epoch sweep · 4 run(s) — Runs the OTA eval across every checkpoint in a directory, one row per epoch.
TVWS checkpoint selection, calibration and OOD
tvws-selection-calibration@1 4 runsProvenance fields
- Present measurement instant measuredAt blocking
- Present producing harness harness blocking
- 0 / 4 harness revision harnessRevision Absent from 4: tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 0 / 4 repo commit identity.repoCommit Absent from 4: tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 0 / 4 dataset hash identity.datasetHash Absent from 4: tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- Present workload hash identity.workloadHash
- 2 / 4 checkpoint sha256 identity.checkpointSha256 Absent from 2: tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 0 / 4 host environment.host Absent from 4: tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
Reproducibility
- Seeds
- 4 in artefact · 0 filename only · 0 absent
Every run in this suite records its seed inside the artefact.
- Repetitions
- 0 / 2 required · 6 pairs compared
6 pair(s) went through the full preflight and none passed. The field that blocked the most pairs is dataset hash (absent from 6 of 6). Similar file names are not repetitions.
Blocked by: dataset.hash (absent, 6) · dataset.preprocessing (absent, 6) · dataset.split (absent, 6) · environment.profile (absent, 6)
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 4 not collected
No run in this suite collected a co-tenant list at all. All 4 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them. No workflow in .github/workflows runs this producer. It needs a checkpoint directory and the OTA capture set.
Producers
- external/tvws-sensing/scripts/train_model.py Path verified TVWS retrain run · 2 run(s) — Trains the sensing CNN for a retrain round and writes the run record.
- scripts/sensing-select-calibrate-ood.py Path verified TVWS selection / calibration / OOD · 2 run(s) — Selects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
RF channel quality of the capture set
rf-channel-quality@1 2 runsProvenance fields
- 0 / 2 measurement instant measuredAt blocking Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 1 / 2 producing harness harness blocking Absent from 1: detector-scores-2026-08-03.json
- 0 / 2 harness revision harnessRevision Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 0 / 2 repo commit identity.repoCommit Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 0 / 2 dataset hash identity.datasetHash Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 0 / 2 workload hash identity.workloadHash Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 0 / 2 checkpoint sha256 identity.checkpointSha256 Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 0 / 2 host environment.host Absent from 2: ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
Reproducibility
- Seeds
- 0 in artefact · 0 filename only · 2 absent
2 run(s) state no seed at all, in the artefact or in the name.
- Repetitions
- NOT CHECKED · 0 pairs compared
The repetition check could not run. 2 of 2 run(s) carry no measurement instant, and a run with no instant is never paired, so fewer than two runs were left to compare. ZERO PAIRS were checked — read this as unknown, not as zero partners found.
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 2 not collected
No run in this suite collected a co-tenant list at all. All 2 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It reads an IQ capture that is not in the repository. No workflow in .github/workflows runs this producer, and nothing about the producer stops one: it is a CPU-only numpy job that finishes in about 13 seconds. What it needs is the 5 IQ captures under benchmarks/datasets/ota/, roughly 400 MB that this repository does not carry, so a GitHub runner has nothing to score.
Producers
- scripts/analyze-618mhz.py Path verified Channel quality capture · 1 run(s) — Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
- scripts/score-detectors.py Path verified Detector scores · 1 run(s) — Runs the detector scorer and writes the artefact with a full provenance envelope.
cuPHY LDPC decode latency
cuphy-ldpc-decode@1 2 runsProvenance fields
- Present measurement instant measuredAt blocking
- 1 / 2 GPU environment.gpu blocking Absent from 1: cuphy-per-slot-20260729-005456.json
- Present code configuration facts.workload.id blocking
- Present warmup discarded facts.protocol.warmup_discarded blocking
- 0 / 2 harness revision harnessRevision Absent from 2: cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 0 / 2 repo commit identity.repoCommit Absent from 2: cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 0 / 2 dataset hash identity.datasetHash Absent from 2: cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 0 / 2 workload hash identity.workloadHash Absent from 2: cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 0 / 2 checkpoint sha256 identity.checkpointSha256 Absent from 2: cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 0 / 2 host environment.host Absent from 2: cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
Reproducibility
- Seeds
- 0 in artefact · 0 filename only · 2 absent
2 run(s) state no seed at all, in the artefact or in the name.
- Repetitions
- 0 / 3 required · 1 pairs compared
1 pair(s) went through the full preflight and none passed. The field that blocked the most pairs is environment profile (absent from 1 of 1). Similar file names are not repetitions.
Blocked by: environment.profile (absent, 1) · hardware.gpu (absent, 1) · hardware.host (absent, 1) · harness.revision (absent, 1)
- Clean-host repeats
- 0 clean · 1 unverifiable · 0 with tenants · 1 not collected
No run states a verifiable clean host. 1 run(s) report an empty co-tenant list that the artefact ITSELF qualifies, because it was collected from inside a container where host processes are invisible, so the emptiness proves nothing.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
Producers
- scripts/cuphy-per-slot-latency.py Path verified cuPHY per-slot latency · 2 run(s) — Times one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
cuPHY LDPC under a capped MPS AI tenant
mps-cotenancy@1 1 runsProvenance fields
- Present measurement instant measuredAt blocking
- Present host environment.host blocking
- Present uncontrolled tenants at start facts.mps.unmanaged_tenants_at_start blocking
- Present invocations per level facts.protocol.invocations_per_level blocking
- 0 / 1 harness revision harnessRevision Absent from 1: mps-sweep-2026-08-03-livebox.json
- 0 / 1 repo commit identity.repoCommit Absent from 1: mps-sweep-2026-08-03-livebox.json
- 0 / 1 dataset hash identity.datasetHash Absent from 1: mps-sweep-2026-08-03-livebox.json
- 0 / 1 workload hash identity.workloadHash Absent from 1: mps-sweep-2026-08-03-livebox.json
- 0 / 1 checkpoint sha256 identity.checkpointSha256 Absent from 1: mps-sweep-2026-08-03-livebox.json
Reproducibility
- Seeds
- 0 in artefact · 0 filename only · 1 absent
1 run(s) state no seed at all, in the artefact or in the name.
- Repetitions
- NOT CHECKED · 0 pairs compared
Only 1 run exists under this contract, so there is no pair to check. This is an unchecked repetition policy, not a failed one.
- Clean-host repeats
- 0 clean · 0 unverifiable · 1 with tenants · 0 not collected
1 run(s) record other tenants on the machine and none records a clean one. The number is a co-tenancy number, which is what this suite is for, but no idle baseline sits beside it.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
Producers
- scripts/cuphy-mps-sweep.py Path verified MPS co-tenancy sweep · 1 run(s) — Sweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
GPU partitioning mechanism probe
gpu-partition-mechanism@1 2 runsProvenance fields
- 0 / 2 measurement instant measuredAt blocking Absent from 2: mig-h200-2026-08-03.json, mps-cap-result.json
- 1 / 2 producing harness harness blocking Absent from 1: mig-h200-2026-08-03.json
- 0 / 2 harness revision harnessRevision Absent from 2: mig-h200-2026-08-03.json, mps-cap-result.json
- 0 / 2 repo commit identity.repoCommit Absent from 2: mig-h200-2026-08-03.json, mps-cap-result.json
- 0 / 2 dataset hash identity.datasetHash Absent from 2: mig-h200-2026-08-03.json, mps-cap-result.json
- 0 / 2 workload hash identity.workloadHash Absent from 2: mig-h200-2026-08-03.json, mps-cap-result.json
- 0 / 2 checkpoint sha256 identity.checkpointSha256 Absent from 2: mig-h200-2026-08-03.json, mps-cap-result.json
- Present host environment.host
Reproducibility
- Seeds
- 0 in artefact · 0 filename only · 2 absent
2 run(s) state no seed at all, in the artefact or in the name.
- Repetitions
- NOT CHECKED · 0 pairs compared
The repetition check could not run. 2 of 2 run(s) carry no measurement instant, and a run with no instant is never paired, so fewer than two runs were left to compare. ZERO PAIRS were checked — read this as unknown, not as zero partners found.
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 2 not collected
No run in this suite collected a co-tenant list at all. All 2 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
Producers
- scripts/cotenancy/mig-h200-probe.py Path verified GPU partitioning probe · 1 run(s) — Regenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.
- scripts/mps-cap-test.sh Path verified MPS thread-cap enforcement · 1 run(s) — Runs both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
LDPC latency under a stepped AI load
ldpc-step-load@1 2 runsProvenance fields
- 0 / 2 measurement instant measuredAt blocking Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 0 / 2 host environment.host blocking Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 0 / 2 harness revision harnessRevision blocking Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 0 / 2 repo commit identity.repoCommit Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 0 / 2 dataset hash identity.datasetHash Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 0 / 2 workload hash identity.workloadHash Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 0 / 2 checkpoint sha256 identity.checkpointSha256 Absent from 2: window-clean-gpu-runA.json, window-clean-gpu-runB.json
Reproducibility
- Seeds
- 0 in artefact · 0 filename only · 2 absent
2 run(s) state no seed at all, in the artefact or in the name.
- Repetitions
- NOT CHECKED · 0 pairs compared
The repetition check could not run. 2 of 2 run(s) carry no measurement instant, and a run with no instant is never paired, so fewer than two runs were left to compare. ZERO PAIRS were checked — read this as unknown, not as zero partners found.
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 2 not collected
No run in this suite collected a co-tenant list at all. All 2 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
Producers
- scripts/cuphy-cotenancy-sweep.py Path verified LDPC step-load window · 2 run(s) — Steps an AI load against cuPHY LDPC and records one object per load level.
Synthetic held-out classification accuracy
heldout-accuracy@1 6 runsProvenance fields
- 0 / 6 dataset hash identity.datasetHash blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 split id facts.dataset.split_id blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 preprocessing id facts.preprocessing.id blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 generator sha256 identity.generatorSha256 blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 checkpoint sha256 identity.checkpointSha256 blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 measurement instant measuredAt blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 producing harness harness blocking Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 harness revision harnessRevision Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 repo commit identity.repoCommit Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 workload hash identity.workloadHash Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
- 0 / 6 host environment.host Absent from 6: heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json +2 more
Reproducibility
- Seeds
- 6 in artefact · 0 filename only · 0 absent
Every run in this suite records its seed inside the artefact.
- Repetitions
- NOT CHECKED · 0 pairs compared
The repetition check could not run. 6 of 6 run(s) carry no measurement instant, and a run with no instant is never paired, so fewer than two runs were left to compare. ZERO PAIRS were checked — read this as unknown, not as zero partners found.
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 6 not collected
No run in this suite collected a co-tenant list at all. All 6 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a model checkpoint, which is not in the repository.
Producers
- external/tvws-sensing/scripts/evaluate_heldout.py Path verified Held-out split eval · 6 run(s) — Scores a checkpoint against a freshly generated held-out split.
Sensing generalization across synthetic conditions
sensing-generalization@1 15 runsProvenance fields
- Present measurement instant measuredAt blocking
- 1 / 15 model label identity.modelLabel blocking Absent from 14: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +10 more
- 1 / 15 generator sha256 identity.generatorSha256 blocking Absent from 14: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +10 more
- Present endpoint identity.endpoint blocking
- 1 / 15 harness revision harnessRevision Absent from 14: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +10 more
- 1 / 15 repo commit identity.repoCommit Absent from 14: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +10 more
- 0 / 15 dataset hash identity.datasetHash Absent from 15: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +11 more
- 0 / 15 workload hash identity.workloadHash Absent from 15: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +11 more
- 1 / 15 checkpoint sha256 identity.checkpointSha256 Absent from 14: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +10 more
- 0 / 15 host environment.host Absent from 15: sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json +11 more
Reproducibility
- Seeds
- 0 in artefact · 13 filename only · 2 absent
13 run(s) carry their seed only in the FILE NAME. A file name is not an artefact field: it can be changed by a copy, and it is not what the producer measured under.
- Repetitions
- 0 / 2 required · 105 pairs compared
105 pair(s) went through the full preflight and none passed. The field that blocked the most pairs is dataset hash (absent from 105 of 105). Similar file names are not repetitions.
Blocked by: dataset.hash (absent, 105) · dataset.preprocessing (absent, 105) · dataset.split (absent, 105) · environment.profile (absent, 105)
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 15 not collected
No run in this suite collected a co-tenant list at all. All 15 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs the sensing service running and a model checkpoint that is not in the repository.
Producers
- scripts/sensing-generalization.py Path verified Sensing generalization arm · 15 run(s) — Generates per-class samples and scores them through the deployed sensing endpoint.
Training history
training-history@1 3 runsProvenance fields
- 0 / 3 measurement instant measuredAt blocking Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 0 / 3 checkpoint sha256 identity.checkpointSha256 blocking Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 2 / 3 seed identity.seed blocking Absent from 1: fixC-training-history-2026-07-30.json
- 0 / 3 harness revision harnessRevision Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 0 / 3 repo commit identity.repoCommit Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 0 / 3 dataset hash identity.datasetHash Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 0 / 3 workload hash identity.workloadHash Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 0 / 3 host environment.host Absent from 3: fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
Reproducibility
- Seeds
- 0 in artefact · 2 filename only · 1 absent
2 run(s) carry their seed only in the FILE NAME. A file name is not an artefact field: it can be changed by a copy, and it is not what the producer measured under.
- Repetitions
- NOT CHECKED · 0 pairs compared
The repetition check could not run. 3 of 3 run(s) carry no measurement instant, and a run with no instant is never paired, so fewer than two runs were left to compare. ZERO PAIRS were checked — read this as unknown, not as zero partners found.
- Clean-host repeats
- 0 clean · 0 unverifiable · 0 with tenants · 3 not collected
No run in this suite collected a co-tenant list at all. All 3 artefact(s) simply have no such field, so host cleanliness is UNKNOWN here rather than clean or dirty.
- CI availability
- No CI job
No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
Producers
- external/tvws-sensing/scripts/train_model.py Path verified Training history · 3 run(s) — Trains the sensing CNN and dumps the per-epoch history.
Missing-evidence queue
Every gap, routed to the producer that must change
115 of 115- 1 Blocking Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
producing harness is absent from 1 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run.- Blocks
- An artefact that names no harness cannot be traced to the thing that wrote it, so a reader has to take the file's word for its own origin.
- Owner
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py to write harness into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harness is null, undefined or empty in 1 of the suite's 2 normalised run(s)
- Affected artefacts (1)
- mig-h200-2026-08-03.json
- 2 Blocking Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
measurement instant is absent from 2 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- date_utc is a calendar day, not a measurement instant.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write measuredAt into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- measuredAt is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 3 Blocking Reproducibility Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
gpu-partition-mechanism@1 requires 2 mutually comparable run(s) and the check could not run at all: 2 of 2 run(s) carry no measurement instant, so ZERO pairs were compared.
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Any statement that this result reproduces, and equally any statement that it does not. Nothing was compared, so the answer here is unknown rather than no.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write a measurement instant into every artefact. Until it does, this row can never say more than "not checked", and re-running the harness more times will not change that.
- How this row was computed
- runs with measuredAt !== null = 0; pairs formed = 0; compareRuns() was never called
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 4 Blocking Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
host is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- The machine behind the number is unrecoverable from the file.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 5 Blocking Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
harness revision is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- The producing revision is unrecoverable from the file.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 6 Blocking Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
measurement instant is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- This artefact is a bare array with no wrapper object; there is nothing to hang a timestamp on.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write measuredAt into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- measuredAt is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 7 Blocking Reproducibility Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
ldpc-step-load@1 requires 2 mutually comparable run(s) and the check could not run at all: 2 of 2 run(s) carry no measurement instant, so ZERO pairs were compared.
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- Any statement that this result reproduces, and equally any statement that it does not. Nothing was compared, so the answer here is unknown rather than no.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write a measurement instant into every artefact. Until it does, this row can never say more than "not checked", and re-running the harness more times will not change that.
- How this row was computed
- runs with measuredAt !== null = 0; pairs formed = 0; compareRuns() was never called
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 8 Blocking Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
producing harness is absent from 1 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Without it the analysis is not re-runnable.
- Owner
- scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/score-detectors.py to write harness into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harness is null, undefined or empty in 1 of the suite's 2 normalised run(s)
- Affected artefacts (1)
- detector-scores-2026-08-03.json
- 9 Blocking Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
measurement instant is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- This family writes no timestamp at all; the date in the filename is a filename.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write measuredAt into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- measuredAt is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 10 Blocking Reproducibility Closes on this box RF channel quality of the capture set rf-channel-quality@1
rf-channel-quality@1 requires 2 mutually comparable run(s) and the check could not run at all: 2 of 2 run(s) carry no measurement instant, so ZERO pairs were compared.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Any statement that this result reproduces, and equally any statement that it does not. Nothing was compared, so the answer here is unknown rather than no.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write a measurement instant into every artefact. Until it does, this row can never say more than "not checked", and re-running the harness more times will not change that.
- How this row was computed
- runs with measuredAt !== null = 0; pairs formed = 0; compareRuns() was never called
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 11 Blocking Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
generator sha256 is absent from 14 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- The generator IS the test distribution here.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write identity.generatorSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.generatorSha256 is null, undefined or empty in 14 of the suite's 15 normalised run(s)
- Affected artefacts (14)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 12 Blocking Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
model label is absent from 14 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- At schema 2 the arm identity survives only in the filename; measured_against records the ENDPOINT, not the model.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write identity.modelLabel into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.modelLabel is null, undefined or empty in 14 of the suite's 15 normalised run(s)
- Affected artefacts (14)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 13 Blocking Reproducibility Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
sensing-generalization@1 requires 2 mutually comparable run(s). 105 pair(s) were compared and 0 run(s) came out with a partner.
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Any statement that this result reproduces. A single occasion is a single occasion however many files describe it.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to emit the identity fields the preflight needs, starting with dataset.hash, which blocked 105 of the 105 pair(s) checked, then re-run it 2 times. Repetition without identity does not count: the preflight is what decides, not the file count.
- How this row was computed
- compareRuns() over all 105 pair(s) of runs with a measurement instant; comparable requires every field in BASE_REQUIREMENTS present and equal; top blocker dataset.hash (absent, 105 pair(s))
- Affected artefacts (15)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-DEPLOYED-seed4242.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 14 Blocking Reproducibility Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
13 run(s) carry their seed only in the file name.
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Any statement about independent seeds. A file name is metadata a copy can change; it is not what the producer ran under.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write the seed, and the arm identity where the file name is currently carrying it, into the artefact body.
- How this row was computed
- identity.seedSource === 'filename' on 13 of 15 run(s)
- Affected artefacts (13)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-DEPLOYED-seed4242.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json
- 15 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
split id is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without it the two accuracies may be over different held-out splits.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write facts.dataset.split_id into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- facts.dataset.split_id is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 16 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
preprocessing id is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without it the two accuracies may be computed after different preprocessing.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write facts.preprocessing.id into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- facts.preprocessing.id is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 17 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
producing harness is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- This family declares no harness; the runner exists only in a sibling markdown file.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write harness into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harness is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 18 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
checkpoint sha256 is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without it the artefact names no weights.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 19 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
dataset hash is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without it two runs at the same seed and sample count cannot be shown to have seen the same data. This project generates its data in-process, so the generator can move underneath a fixed seed.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 20 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
generator sha256 is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- The generator IS the data here; without its hash the distribution is unpinned.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write identity.generatorSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.generatorSha256 is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 21 Blocking Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
measurement instant is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- This family writes no timestamp at all.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write measuredAt into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- measuredAt is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 22 Blocking Reproducibility Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
heldout-accuracy@1 requires 3 mutually comparable run(s) and the check could not run at all: 6 of 6 run(s) carry no measurement instant, so ZERO pairs were compared.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Any statement that this result reproduces, and equally any statement that it does not. Nothing was compared, so the answer here is unknown rather than no.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write a measurement instant into every artefact. Until it does, this row can never say more than "not checked", and re-running the harness more times will not change that.
- How this row was computed
- runs with measuredAt !== null = 0; pairs formed = 0; compareRuns() was never called
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 23 Blocking Reproducibility Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
tvws-selection-calibration@1 requires 2 mutually comparable run(s). 6 pair(s) were compared and 0 run(s) came out with a partner.
What is in the way
Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set. Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- Any statement that this result reproduces. A single occasion is a single occasion however many files describe it.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py to emit the identity fields the preflight needs, starting with dataset.hash, which blocked 6 of the 6 pair(s) checked, then re-run it 2 times. Repetition without identity does not count: the preflight is what decides, not the file count.
- How this row was computed
- compareRuns() over all 6 pair(s) of runs with a measurement instant; comparable requires every field in BASE_REQUIREMENTS present and equal; top blocker dataset.hash (absent, 6 pair(s))
- Affected artefacts (4)
- tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 24 Blocking Reproducibility Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
tvws-ota-occupancy@1 requires 2 mutually comparable run(s). 3 pair(s) were compared and 0 run(s) came out with a partner.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- Any statement that this result reproduces. A single occasion is a single occasion however many files describe it.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to emit the identity fields the preflight needs, starting with dataset.hash, which blocked 3 of the 3 pair(s) checked, then re-run it 2 times. Repetition without identity does not count: the preflight is what decides, not the file count.
- How this row was computed
- compareRuns() over all 3 pair(s) of runs with a measurement instant; comparable requires every field in BASE_REQUIREMENTS present and equal; top blocker dataset.hash (absent, 3 pair(s))
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 25 Blocking Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
training seed is absent from 2 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- The seed is not recorded in this artefact; anything shown came from the filename, which a rename loses.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write identity.seed into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.seed is null, undefined or empty in 2 of the suite's 4 normalised run(s)
- Affected artefacts (2)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json
- 26 Blocking Reproducibility Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
tvws-ota-per-epoch@1 requires 2 mutually comparable run(s). 6 pair(s) were compared and 0 run(s) came out with a partner.
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Any statement that this result reproduces. A single occasion is a single occasion however many files describe it.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to emit the identity fields the preflight needs, starting with dataset.hash, which blocked 6 of the 6 pair(s) checked, then re-run it 2 times. Repetition without identity does not count: the preflight is what decides, not the file count.
- How this row was computed
- compareRuns() over all 6 pair(s) of runs with a measurement instant; comparable requires every field in BASE_REQUIREMENTS present and equal; top blocker dataset.hash (absent, 6 pair(s))
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 27 Blocking Reproducibility Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
2 run(s) carry their seed only in the file name.
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Any statement about independent seeds. A file name is metadata a copy can change; it is not what the producer ran under.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write the seed, and the arm identity where the file name is currently carrying it, into the artefact body.
- How this row was computed
- identity.seedSource === 'filename' on 2 of 4 run(s)
- Affected artefacts (2)
- ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 28 Blocking Provenance field Blocked on a thing Training history training-history@1
checkpoint sha256 is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Nothing binds the curve to the weights that shipped.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 29 Blocking Provenance field Blocked on a thing Training history training-history@1
seed is absent from 1 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- The arm exists only in the filename, which a rename loses.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write identity.seed into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.seed is null, undefined or empty in 1 of the suite's 3 normalised run(s)
- Affected artefacts (1)
- fixC-training-history-2026-07-30.json
- 30 Blocking Provenance field Blocked on a thing Training history training-history@1
measurement instant is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- These files carry none; they are hand-renamed copies of a checkpoint directory.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write measuredAt into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- measuredAt is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 31 Blocking Reproducibility Blocked on a thing Training history training-history@1
training-history@1 requires 2 mutually comparable run(s) and the check could not run at all: 3 of 3 run(s) carry no measurement instant, so ZERO pairs were compared.
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Any statement that this result reproduces, and equally any statement that it does not. Nothing was compared, so the answer here is unknown rather than no.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write a measurement instant into every artefact. Until it does, this row can never say more than "not checked", and re-running the harness more times will not change that.
- How this row was computed
- runs with measuredAt !== null = 0; pairs formed = 0; compareRuns() was never called
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 32 Blocking Reproducibility Blocked on a thing Training history training-history@1
2 run(s) carry their seed only in the file name.
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Any statement about independent seeds. A file name is metadata a copy can change; it is not what the producer ran under.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write the seed, and the arm identity where the file name is currently carrying it, into the artefact body.
- How this row was computed
- identity.seedSource === 'filename' on 2 of 3 run(s)
- Affected artefacts (2)
- perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 33 Blocking Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
GPU is absent from 1 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Without a device block the GPU is unknowable from the file, so the number is unattributable to a machine.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write environment.gpu into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.gpu is null, undefined or empty in 1 of the suite's 2 normalised run(s)
- Affected artefacts (1)
- cuphy-per-slot-20260729-005456.json
- 34 Blocking Reproducibility Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
cuphy-ldpc-decode@1 requires 3 mutually comparable run(s). 1 pair(s) were compared and 0 run(s) came out with a partner.
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Any statement that this result reproduces. A single occasion is a single occasion however many files describe it.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to emit the identity fields the preflight needs, starting with environment.profile, which blocked 1 of the 1 pair(s) checked, then re-run it 3 times. Repetition without identity does not count: the preflight is what decides, not the file count.
- How this row was computed
- compareRuns() over all 1 pair(s) of runs with a measurement instant; comparable requires every field in BASE_REQUIREMENTS present and equal; top blocker environment.profile (absent, 1 pair(s))
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 35 Blocking Reproducibility Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
mps-cotenancy@1 requires 3 mutually comparable run(s) and the check could not run at all: 0 of 1 run(s) carry no measurement instant, so ZERO pairs were compared.
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Any statement that this result reproduces, and equally any statement that it does not. Nothing was compared, so the answer here is unknown rather than no.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Change scripts/cuphy-mps-sweep.py to write a measurement instant into every artefact. Until it does, this row can never say more than "not checked", and re-running the harness more times will not change that.
- How this row was computed
- runs with measuredAt !== null = 1; pairs formed = 0; compareRuns() was never called
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json
- 36 Advisory Continuous integration Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Add a job that runs scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 37 Advisory Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
harness revision is absent from 2 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 38 Advisory Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
checkpoint sha256 is absent from 2 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 39 Advisory Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
dataset hash is absent from 2 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 40 Advisory Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
repo commit is absent from 2 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 41 Advisory Provenance field Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
workload hash is absent from 2 of 2 run(s).
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 42 Advisory Reproducibility Blocked on a thing GPU partitioning mechanism probe gpu-partition-mechanism@1
Co-tenancy was never collected: none of the 2 artefact(s) carries the field at all.
What is in the way
Needs an H200 with MIG enabled and an operator willing to partition and tear it down again on a device this repository does not own and cannot schedule. This is a privileged one-way hardware reconfiguration, not a run. Needs to start its own MPS control daemon on the GPU. That is device-wide, so it cannot share the box with the running demo however careful the script is about its own processes.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owners
- scripts/cotenancy/mig-h200-probe.py verifiedRegenerates the observable half of this family and refuses the destructive half unless an operator explicitly asks and the GPU is free.scripts/mps-cap-test.sh verifiedRuns both clients inside a private MPS server to test whether an active-thread cap partitions the GB10.
- Exact change
- Change scripts/cotenancy/mig-h200-probe.py and scripts/mps-cap-test.sh to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 2 null
- Affected artefacts (2)
- mig-h200-2026-08-03.json, mps-cap-result.json
- 43 Advisory Continuous integration Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Add a job that runs scripts/cuphy-cotenancy-sweep.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 44 Advisory Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
checkpoint sha256 is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 45 Advisory Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
dataset hash is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 46 Advisory Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
repo commit is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 47 Advisory Provenance field Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
workload hash is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 48 Advisory Reproducibility Blocked on a thing LDPC latency under a stepped AI load ldpc-step-load@1
Co-tenancy was never collected: none of the 2 artefact(s) carries the field at all.
What is in the way
Needs the GPU to itself while a stepped AI load runs against cuPHY. The two artefacts are also a bare JSON array with no envelope, so the producer has to grow a wrapper object before a re-run is comparable with anything.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- scripts/cuphy-cotenancy-sweep.py verifiedSteps an AI load against cuPHY LDPC and records one object per load level.
- Exact change
- Change scripts/cuphy-cotenancy-sweep.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 2 null
- Affected artefacts (2)
- window-clean-gpu-runA.json, window-clean-gpu-runB.json
- 49 Advisory Continuous integration Closes on this box RF channel quality of the capture set rf-channel-quality@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It reads an IQ capture that is not in the repository. No workflow in .github/workflows runs this producer, and nothing about the producer stops one: it is a CPU-only numpy job that finishes in about 13 seconds. What it needs is the 5 IQ captures under benchmarks/datasets/ota/, roughly 400 MB that this repository does not carry, so a GitHub runner has nothing to score.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Add a job that runs scripts/analyze-618mhz.py and scripts/score-detectors.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 50 Advisory Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
host is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Without a host the number is unattributable to a machine.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 51 Advisory Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
harness revision is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 52 Advisory Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
checkpoint sha256 is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 53 Advisory Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
dataset hash is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 54 Advisory Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
repo commit is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 55 Advisory Provenance field Closes on this box RF channel quality of the capture set rf-channel-quality@1
workload hash is absent from 2 of 2 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 56 Advisory Reproducibility Closes on this box RF channel quality of the capture set rf-channel-quality@1
Co-tenancy was never collected: none of the 2 artefact(s) carries the field at all.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture directory is in this tree and the producer runs here on CPU. What no re-run can widen: this is one channel at one site on one day, through an antenna that is not matched to the band. It is a CPU-only numpy job of about 13 seconds against captures already in this tree, and it is safe to run while the demo is up. Proven on 2026-08-04.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owners
- scripts/analyze-618mhz.py verifiedAnalyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.scripts/score-detectors.py verifiedRuns the detector scorer and writes the artefact with a full provenance envelope.
- Exact change
- Change scripts/analyze-618mhz.py and scripts/score-detectors.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 2 null
- Affected artefacts (2)
- ch39-618mhz-quality-2026-07-31.json, detector-scores-2026-08-03.json
- 57 Advisory Continuous integration Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs the sensing service running and a model checkpoint that is not in the repository.
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Add a job that runs scripts/sensing-generalization.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 58 Advisory Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
host is absent from 15 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Without a host the number is unattributable to a machine.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 15 of the suite's 15 normalised run(s)
- Affected artefacts (15)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-DEPLOYED-seed4242.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 59 Advisory Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
harness revision is absent from 14 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 14 of the suite's 15 normalised run(s)
- Affected artefacts (14)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 60 Advisory Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
checkpoint sha256 is absent from 14 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 14 of the suite's 15 normalised run(s)
- Affected artefacts (14)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 61 Advisory Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
dataset hash is absent from 15 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 15 of the suite's 15 normalised run(s)
- Affected artefacts (15)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-DEPLOYED-seed4242.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 62 Advisory Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
repo commit is absent from 14 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 14 of the suite's 15 normalised run(s)
- Affected artefacts (14)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 63 Advisory Provenance field Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
workload hash is absent from 15 of 15 run(s).
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 15 of the suite's 15 normalised run(s)
- Affected artefacts (15)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-DEPLOYED-seed4242.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 64 Advisory Reproducibility Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
Co-tenancy was never collected: none of the 15 artefact(s) carries the field at all.
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Change scripts/sensing-generalization.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 15 null
- Affected artefacts (15)
- sensing-generalization-new-control-seed4242.json, sensing-generalization-new-fixA-seed4242.json, sensing-generalization-new-fixB-seed4242.json, sensing-generalization-new-legacy-seed4242.json, sensing-generalization-old-control-seed4242.json, sensing-generalization-old-control-seed9137.json, sensing-generalization-old-fixA-seed4242.json, sensing-generalization-old-fixA-seed9137.json, sensing-generalization-old-fixB-DEPLOYED-seed4242.json, sensing-generalization-old-fixB-seed4242.json, sensing-generalization-old-fixB-seed9137.json, sensing-generalization-old-legacy-seed4242.json, sensing-generalization-old-legacy-seed9137.json, sensing-generalization-runA.json, sensing-generalization-runB.json
- 65 Advisory Evidence tier Blocked on a thing Sensing generalization across synthetic conditions sensing-generalization@1
sensing-generalization@1 declares "Synthetic" a valid evidence tier and has no run at it.
What is in the way
Needs the sensing service, and on this box that endpoint is the one serving the live demo. A sweep against it is load on a running service, so it wants a second instance or a quiet window.- Blocks
- Any claim that needs synthetic evidence. Measured on generated inputs. It can only ever describe the generator: a flaw the generator and the test share is invisible to it by construction.
- Owner
- scripts/sensing-generalization.py verifiedGenerates per-class samples and scores them through the deployed sensing endpoint.
- Exact change
- Run scripts/sensing-generalization.py under conditions that make the result synthetic evidence, and record the tier-defining conditions in the artefact.
- How this row was computed
- contract.validEvidenceTiers includes 'synthetic' AND no run in the suite has tier === 'synthetic'
- 66 Advisory Continuous integration Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a model checkpoint, which is not in the repository.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Add a job that runs external/tvws-sensing/scripts/evaluate_heldout.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 67 Advisory Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
host is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without a host the number is unattributable to a machine.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 68 Advisory Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
harness revision is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 69 Advisory Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
repo commit is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 70 Advisory Provenance field Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
workload hash is absent from 6 of 6 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 6 of the suite's 6 normalised run(s)
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 71 Advisory Reproducibility Closes on this box Synthetic held-out classification accuracy heldout-accuracy@1
Co-tenancy was never collected: none of the 6 artefact(s) carries the field at all.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. torch 2.13.0+cpu is on this box and the checkpoint is in the tree at external/tvws-sensing/models/checkpoints/best.pt, so the producer runs here. It is a slow CPU run rather than a blocked one. What re-running still cannot give is a real held-out set: the split is regenerated from the seed at run time, so a re-run proves the recipe and never the data.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- external/tvws-sensing/scripts/evaluate_heldout.py verifiedScores a checkpoint against a freshly generated held-out split.
- Exact change
- Change external/tvws-sensing/scripts/evaluate_heldout.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 6 null
- Affected artefacts (6)
- heldout-committed-8eca022f-2026-07-31.json, heldout-committed-8eca022f-IMAGE-APP-SRC-trap-2026-07-31.json, heldout-committed-8eca022f-prefixgen-17517e57-2026-07-31.json, heldout-v1-828dc46e-gen-9dc4f892-2026-07-31.json, heldout-v1-828dc46e-headgen-c23711ab-2026-07-31.json, heldout-v1-828dc46e-prefixgen-17517e57-2026-07-31.json
- 72 Advisory Continuous integration Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them. No workflow in .github/workflows runs this producer. It needs a checkpoint directory and the OTA capture set.
What is in the way
Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs. Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Add a job that runs external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 73 Advisory Provenance field Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
host is absent from 4 of 4 run(s).
What is in the way
Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set. Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- Without a host the number is unattributable to a machine.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 74 Advisory Provenance field Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
harness revision is absent from 4 of 4 run(s).
What is in the way
Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set. Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 75 Advisory Provenance field Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
checkpoint sha256 is absent from 2 of 4 run(s).
What is in the way
Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 2 of the suite's 4 normalised run(s)
- Affected artefacts (2)
- tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 76 Advisory Provenance field Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
dataset hash is absent from 4 of 4 run(s).
What is in the way
Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set. Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 77 Advisory Provenance field Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
repo commit is absent from 4 of 4 run(s).
What is in the way
Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set. Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 78 Advisory Reproducibility Blocked on a thing TVWS checkpoint selection, calibration and OOD tvws-selection-calibration@1
Co-tenancy was never collected: none of the 4 artefact(s) carries the field at all.
What is in the way
Needs the checkpoint directory the artefact names in its own args.checkpoint_dir, which sits outside this repository. The set it reports is a SELECTION set, so no amount of re-running turns it into a test set. Needs a full training run on a GPU per seed. The two artefacts differ only by seed, so they are a variance probe rather than two measurements of one thing, and more seeds cost more training jobs.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owners
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN for a retrain round and writes the run record.scripts/sensing-select-calibrate-ood.py verifiedSelects a checkpoint, calibrates it, scores OOD behaviour and re-scores against the OTA captures.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py and scripts/sensing-select-calibrate-ood.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 4 null
- Affected artefacts (4)
- tvws-retrain-metrics-seed42-2026-08-03.json, tvws-retrain-metrics-seed7-2026-08-03.json, tvws-retrain-seed42-2026-08-03.json, tvws-retrain-seed7-2026-08-03.json
- 79 Advisory Continuous integration Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs the OTA capture set and a checkpoint, neither of which is on a GitHub runner.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Add a job that runs scripts/eval-ota-checkpoint.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 80 Advisory Provenance field Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
host is absent from 3 of 3 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- Without a host the number is unattributable to a machine.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 81 Advisory Provenance field Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
harness revision is absent from 3 of 3 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- The exact code that produced the number is unpinned.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 82 Advisory Provenance field Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
dataset hash is absent from 3 of 3 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 83 Advisory Provenance field Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
repo commit is absent from 3 of 3 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 84 Advisory Provenance field Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
workload hash is absent from 3 of 3 run(s).
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 85 Advisory Reproducibility Closes on this box TVWS occupancy on real over-the-air captures tvws-ota-occupancy@1
Co-tenancy was never collected: none of the 3 artefact(s) carries the field at all.
What it takes
Nothing outside this repository is in the way. The producer is in this tree and runs on this box, so this gap closes by changing the producer and running it. The capture set and a checkpoint are both in this tree and the producer runs here on CPU torch. What no re-run can fix: every capture in the set is labelled occupied, so a false-vacant count is measurable and a false-occupied count is not.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- scripts/eval-ota-checkpoint.py verifiedScores a checkpoint against the real over-the-air captures using the service's own inference path.
- Exact change
- Change scripts/eval-ota-checkpoint.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 3 null
- Affected artefacts (3)
- ota-eval-fixB.json, ota-eval-fixC-final.json, ota-eval-fixC.json
- 86 Advisory Continuous integration Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs the OTA capture set and a directory of checkpoints.
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Add a job that runs scripts/ota-per-epoch-sweep.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 87 Advisory Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
host is absent from 4 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Without a host the number is unattributable to a machine.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 88 Advisory Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
harness revision is absent from 4 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 89 Advisory Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
checkpoint sha256 is absent from 4 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 90 Advisory Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
dataset hash is absent from 4 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 91 Advisory Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
repo commit is absent from 4 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 92 Advisory Provenance field Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
workload hash is absent from 4 of 4 run(s).
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 4 of the suite's 4 normalised run(s)
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 93 Advisory Reproducibility Blocked on a thing TVWS per-epoch OTA diagnostic tvws-ota-per-epoch@1
Co-tenancy was never collected: none of the 4 artefact(s) carries the field at all.
What is in the way
Needs a directory of per-epoch checkpoints that is not in this repository. Underneath that, the captures came through a SenseCAP 860-930 MHz antenna used at 470-700 MHz. A matched UHF antenna is a purchase and a new capture session, not a run, and until then every VACANT-CHANNEL and DYNAMIC-RANGE number in this family carries the mismatch. It does not carry the occupied-channel numbers: on the 2026-08-04 UHF survey the two strongest carriers in the band, 42 dB over the session floor, were classified Noise on 20 of 20 records at 0.969 and 0.957, so a matched antenna would not have recovered them. The occupied-direction failure is the scale-invariant input normalisation (docs/SENSING-OCCUPANCY-ROOT-CAUSE-2026-08-05.md), which a new antenna cannot touch.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- scripts/ota-per-epoch-sweep.py verifiedRuns the OTA eval across every checkpoint in a directory, one row per epoch.
- Exact change
- Change scripts/ota-per-epoch-sweep.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 4 null
- Affected artefacts (4)
- ota-per-epoch-2026-07-30.json, ota-per-epoch-packed-2026-07-30.json, ota-per-epoch-packed-seed7-2026-07-30.json, ota-per-epoch-seed7-2026-07-30.json
- 94 Advisory Continuous integration Blocked on a thing Training history training-history@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Add a job that runs external/tvws-sensing/scripts/train_model.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 95 Advisory Provenance field Blocked on a thing Training history training-history@1
host is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Without a host the number is unattributable to a machine.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 96 Advisory Provenance field Blocked on a thing Training history training-history@1
harness revision is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 97 Advisory Provenance field Blocked on a thing Training history training-history@1
dataset hash is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 98 Advisory Provenance field Blocked on a thing Training history training-history@1
repo commit is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 99 Advisory Provenance field Blocked on a thing Training history training-history@1
workload hash is absent from 3 of 3 run(s).
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 3 of the suite's 3 normalised run(s)
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 100 Advisory Reproducibility Blocked on a thing Training history training-history@1
Co-tenancy was never collected: none of the 3 artefact(s) carries the field at all.
What is in the way
Needs a full training run on a GPU. These are training curves rather than a benchmark, so re-running costs a training job and still yields a selection signal, not a test result.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- external/tvws-sensing/scripts/train_model.py verifiedTrains the sensing CNN and dumps the per-epoch history.
- Exact change
- Change external/tvws-sensing/scripts/train_model.py to write an environment.co_tenants list, even an empty one, together with a note saying where it was collected from. Until it writes the field, absence and idleness are the same value here, and they are not the same thing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 0 non-empty, 3 null
- Affected artefacts (3)
- fixC-training-history-2026-07-30.json, perepoch-history-seed42-2026-07-30.json, perepoch-history-seed7-2026-07-30.json
- 101 Advisory Continuous integration Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Add a job that runs scripts/cuphy-per-slot-latency.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 102 Advisory Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
host is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Without a host the number is unattributable to a machine.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write environment.host into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- environment.host is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 103 Advisory Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
harness revision is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- The producing code is unpinned; a change in it is unattributable.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 104 Advisory Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
checkpoint sha256 is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 105 Advisory Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
dataset hash is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 106 Advisory Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
repo commit is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 107 Advisory Provenance field Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
workload hash is absent from 2 of 2 run(s).
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 2 of the suite's 2 normalised run(s)
- Affected artefacts (2)
- cuphy-per-slot-20260729-005456.json, cuphy-per-slot-20260730-080736.json
- 108 Advisory Reproducibility Blocked on a thing cuPHY LDPC decode latency cuphy-ldpc-decode@1
No verifiable clean-host run. 1 run(s) report an empty co-tenant list that the artefact itself says it could not see past.
What is in the way
Needs the GPU to itself. The harness re-execs into the Aerial cuBB container and times one LDPC decode at a time, so anything else on the device moves the numbers. On this box that means draining the demo first and taking a scheduled window, not squeezing a run in beside it.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- scripts/cuphy-per-slot-latency.py verifiedTimes one pyaerial LdpcDecoder.decode() call per sample with cudaEvent, inside the Aerial container, and writes the per-slot artefact to benchmarks/reports/.
- Exact change
- Change scripts/cuphy-per-slot-latency.py to collect co-tenancy from the HOST, with nvidia-smi outside the container rather than inside it, and to record what the collection could and could not see. An empty list taken from inside a container does not mean the machine was idle, and this suite's own artefacts say so.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 1 empty but qualified, 0 non-empty, 1 null
- Affected artefacts (1)
- cuphy-per-slot-20260730-080736.json
- 109 Advisory Continuous integration Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
No workflow in .github/workflows produces this suite's evidence. No workflow in .github/workflows runs this producer. It needs a GPU, a radio or an RF capture that GitHub-hosted runners do not have, so the evidence for this suite can only be produced by hand on a host that has them.
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Any statement that this result is continuously verified. It is produced by hand, on a host with the hardware, when somebody remembers.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Add a job that runs scripts/cuphy-mps-sweep.py on a runner that has what it needs, or state in the contract that this suite is hand-produced by design.
- How this row was computed
- every family in this suite has PRODUCER_MAP[family].ci === null. The map is hand-maintained, so this row is the map's claim about .github/workflows and not a scan of it — the workflow files are in the tree and can be read directly.
- 110 Advisory Provenance field Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
harness revision is absent from 1 of 1 run(s).
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Without the producing revision, a difference between two runs may be a change in the measurement rather than a change in the thing measured.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Change scripts/cuphy-mps-sweep.py to write harnessRevision into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- harnessRevision is null, undefined or empty in 1 of the suite's 1 normalised run(s)
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json
- 111 Advisory Provenance field Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
checkpoint sha256 is absent from 1 of 1 run(s).
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Without it the weights under test are unidentified. With it, the file is pinned — and still not bound to any endpoint.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Change scripts/cuphy-mps-sweep.py to write identity.checkpointSha256 into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.checkpointSha256 is null, undefined or empty in 1 of the suite's 1 normalised run(s)
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json
- 112 Advisory Provenance field Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
dataset hash is absent from 1 of 1 run(s).
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- The same seed and the same sample count are not the same data. Without a hash, two runs are asserted to share inputs, never shown to.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Change scripts/cuphy-mps-sweep.py to write identity.datasetHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.datasetHash is null, undefined or empty in 1 of the suite's 1 normalised run(s)
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json
- 113 Advisory Provenance field Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
repo commit is absent from 1 of 1 run(s).
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Without a commit, the code that produced the number cannot be recovered.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Change scripts/cuphy-mps-sweep.py to write identity.repoCommit into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.repoCommit is null, undefined or empty in 1 of the suite's 1 normalised run(s)
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json
- 114 Advisory Provenance field Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
workload hash is absent from 1 of 1 run(s).
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Without a workload hash the two runs are asserted to answer the same question.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Change scripts/cuphy-mps-sweep.py to write identity.workloadHash into every artefact it produces, then re-run. Backfilling it by hand into the existing files would be a fabrication: the value was never recorded.
- How this row was computed
- identity.workloadHash is null, undefined or empty in 1 of the suite's 1 normalised run(s)
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json
- 115 Advisory Reproducibility Blocked on a thing cuPHY LDPC under a capped MPS AI tenant mps-cotenancy@1
Every one of the 1 run(s) here records other tenants; none records an idle machine.
What is in the way
Needs a scheduled clean-GPU window and an MPS control daemon, which is a device-wide object rather than a process you can start beside the demo. The producer's own docstring asks for the window in those words.- Blocks
- Any statement that the number was measured without interference from other tenants on the machine.
- Owner
- scripts/cuphy-mps-sweep.py verifiedSweeps an MPS active-thread cap on an AI client while cuPHY LDPC runs uncapped.
- Exact change
- Run scripts/cuphy-mps-sweep.py once on a drained machine and keep that artefact beside these, so the co-tenancy numbers have an idle baseline to be read against. Nothing in the existing files needs editing.
- How this row was computed
- environment.coTenants across the suite: 0 empty and unqualified, 0 empty but qualified, 1 non-empty, 0 null
- Affected artefacts (1)
- mps-sweep-2026-08-03-livebox.json