Skip to content
ULAP ONE
Research preview
Research · benchmarks · evidence

Coverage

Build snapshot · Not live

How 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.

Build snapshot Not live Captured 2026-08-10T07:58:14.388Z Source benchmarks/reports Ingested 2026-08-10T07:58:14.379Z 44 JSON files seen
How to read this page
A rung with no evidence is a gap only when the suite's own contract claims it. A rung the contract never claimed is drawn as out of scope, not as a failure: counting an opt-in component as failing is the same defect as hiding it. There is deliberately no coverage percentage across suites — an over-the-air suite and a synthetic suite do not add up. And a gap with no producer to change is marked UNOWNED and not actionable, because a work item nobody can pick up is not a work item.

Coverage census

Suites with evidence
11

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.

Suites reaching over-the-air
4 / 11

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.

Open evidence gaps
115

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 that close on this box
33 / 115

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.

Blocked on a thing, not on effort
82 / 115

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.

Gaps with no producer at all
0 / 115

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.

Ungoverned artefacts
0

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. 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. 2 Deployed service Measured through a running service, over its real interface, on inputs that are still generated or replayed.
  3. 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. 4 Lab RF Measured over a real RF path under controlled laboratory conditions — real propagation, chosen conditions.
  5. 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
For each suite contract: the number of runs, its state at each rung of the evidence ladder from synthetic through to over the air, the highest rung it reaches, and how many gaps it has.
SuiteRunsSyntheticDeployed serviceHardware in loopLab RFOver the airHighest rungDetail
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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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 runs

Provenance 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. 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 verified
    Regenerates 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Scores 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Sweeps 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    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 verified
    Runs 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Steps 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Analyses the 618 MHz capture: quality stages, a synthetic SNR ladder and a bandlimit sweep.
    scripts/score-detectors.py verified
    Runs 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Generates 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Trains 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Trains the sensing CNN for a retrain round and writes the run record.
    scripts/sensing-select-calibrate-ood.py verified
    Selects 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Scores 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Runs 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Trains 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Times 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. 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 verified
    Sweeps 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. 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 verified
    Sweeps 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. 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 verified
    Sweeps 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. 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 verified
    Sweeps 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. 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 verified
    Sweeps 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. 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 verified
    Sweeps 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. 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 verified
    Sweeps 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
Amini Amini Infratech for the Global South

Every link and every data fetch on this console is origin-relative. One origin fans out by path: / gateway, /video/, /grafana/, /prom/, /api/. An absolute http://localhost:NNNN URL works on exactly one machine, the one it was written on, and is blocked as mixed content the moment the page is served over https, which is how every operator actually reaches this stack.