QECTOR Reproducibility and Claim Boundaries
Source of authority: v1.0.0 reference manual, chapters 19, 22, 27;
Appendix D.
Required elements of a published result (manual 19)
For every published result, the repository policy requires:
- a scoped one-sentence claim
- a clean git commit
- an environment capture (OS, Python, Rust, package versions,
hardware)
- the exact command
- raw JSON / CSV artifacts with SHA-256
- a Wilson interval for LER
- hot / cold path labels for latency
- safe / unsafe wording attached to every result
Required artifact metadata (manual 22.3, table 22.1)
| Field |
Required detail |
| code family |
repetition, ring, rotated_surface, toric, heavy_hex, color_code, bicycle, bivariate_bicycle, custom (from H_matrix), or DEM-derived |
| distance / size |
distance, rounds, n_checks, n_qubits, n_detectors, or code parameters |
| noise model |
physical error rate, channel/circuit source, code_capacity vs circuit_level tag |
| decoder |
exact class and mode (weighted / batch / GPU flags) |
| sample count |
trials, shots, warmup, seed |
| metric |
correctness, LER, latency, throughput, memory, GPU bit-identity, or scaling |
| environment |
OS, CPU, RAM, Python / Rust / package versions, GPU / runtime, git commit |
| artifact |
raw JSON / CSV path plus SHA-256 sidecar |
qector-research.artifact_metadata_check generates the full block
(no decoder execution); qector-library.threshold_sweep already
emits the same block plus the SHA-256 sidecar.
Safe / unsafe wording (manual 22.5)
Safe (anchored to a machine, workload, and artifact):
- "on this machine, for this code/distance/noise/seed/batch
configuration, decoder A had median hot-path latency X and p99
Y."
- "on this checked-in artifact, QECTOR weighted Blossom produced
LER parity with PyMatching on the tested d=15 Stim workload."
Unsafe (never published):
- "decoder A is universally faster"
- "always more accurate"
- "production real-time hardware infrastructure"
- any speed superlative without a surviving artifact
Hot path and cold path (manual 22.1)
- Cold path: decoder construction (graph build, weight
preprocessing, allocation). Reported separately.
- Hot path:
decode() on a pre-built decoder with syndromes
already in memory. Reported as decode_hotpath_latency_us or
similar.
- Reporting only the hot path is acceptable only for a clearly
labelled pre-built, repeated-decode workload.
Statistics (manual 22.2)
Latency distributions are reported with:
n
- mean
- median
- standard deviation
- min, max
- p50, p90, p95, p99
- a 95% confidence interval on the mean
Throughput is computed from the same timing basis, usually median
hot-path latency. A single mean without the distribution is not
a public claim.
Memory methodology (manual 22.4)
- Python-side:
tracemalloc peak; process RSS via psutil when
installed.
- Native Rust and GPU memory: backend diagnostics or vendor
tools; label separately.
- Python allocation, process RSS, native heap, and VRAM are
never mixed as a single metric.
Reproduction commands (manual Appendix D)
# D.1 Build and import smoke
git clone https://github.com/qectorlab/qector-decoder.git
# All D.x paths below are relative to the UPSTREAM qector-decoder
# source checkout created in D.1 -- NOT to this plugin repository.
cd qector-decoder
python -m venv .venv
.venv/Scripts/python -m pip install --upgrade pip maturin
PYO3_PYTHON=".venv/Scripts/python.exe"
.venv/Scripts/python -m maturin develop --release --no-default-features
.venv/Scripts/python -c "from qector_decoder_v3 import UnionFindDecoder; print('QECTOR OK')"
# D.2 Validation suite
.venv/Scripts/python -m pip install stim sinter pymatching ldpc beliefmatching scipy psutil matplotlib tabulate pytest hypothesis fastapi uvicorn httpx
.venv/Scripts/python -m pytest python/tests -q --tb=short
cargo test --release --lib
# D.3 Focused correctness tests
.venv/Scripts/python -m pytest python/tests/test_syndrome_faithfulness.py -q --tb=short
.venv/Scripts/python -m pytest python/tests/test_brute_force_small.py -q --tb=short
.venv/Scripts/python -m pytest python/tests/test_pymatching_compat.py -q --tb=short
.venv/Scripts/python -m pytest python/tests/test_property_faithfulness.py -q --tb=short
# D.4 LER parity workflows
.venv/Scripts/python scripts/competitive_stim_ler.py --distances 13 15 --shots 20000 --out benchmark_results/stim_ler_d13_d15_local
.venv/Scripts/python scripts/competitive_belief_matching.py --distances 3 5 7 --shots 3000 --no-ref --out benchmark_results/competitive_belief_local
# D.5 GPU bit-identity workflows
.venv/Scripts/python -m maturin develop --release --no-default-features --features cuda
.venv/Scripts/python -m pytest python/tests/test_cuda_cpu_bit_identical.py -q --tb=short
.venv/Scripts/python -m maturin develop --release --no-default-features --features opencl
.venv/Scripts/python -m pytest python/tests/test_opencl_cpu_bit_identical.py -q --tb=short
# D.6 Artifact hashing
Get-FileHash benchmark_results/competitive_belief.json -Algorithm SHA256
Get-FileHash benchmark_results/stim_ler_d13_d15.json -Algorithm SHA256
Withdrawn benchmark policy (manual 19, 21)
The reference manual deliberately excludes all latency,
throughput, and VRAM figures tied to a specific machine:
- "All latency/throughput/VRAM figures [are] withdrawn artifacts"
(manual 19, Table 19.1).
- Hardware benchmark charts (
benchmark_results/charts/*) and
paper figures (paper_figures/*) are explicitly excluded from
the manual.
- The figure-disposition index (manual 21) lists every figure and
the reason for inclusion / exclusion.
This is the published policy. Any new result must follow the
same scope rule.
The screening-estimate caveat (manual 19, 27)
- 25 trials is a screening estimate, not a converged threshold.
- The shipped
qector-researcher skill uses the word "screening
estimate" whenever the trial count is small, never "converged
threshold" without a dated, reproducible artifact.
How the bench server helps
qector-research.artifact_metadata_check generates the
chapter 22.3 metadata block.
qector-research.wilson_ci and wilson_table are the math
utilities for LER reports.
qector-research.artifacts_sha256 computes the SHA-256 sidecar
required by the metadata block.
qector-research.env_block returns the chapter 22.3 environment
block.
qector-research.decode_faithfulness_check re-verifies
H c = s (mod 2) for any external decode.
1---2name: qector-reproducibility3description: Reproducibility and claim boundaries for QECTOR (manual 19, 22, 27, Appendix D). Covers the chapter 22.3 required-artifact metadata, the safe / unsafe wording rule (manual 22.5), the reproduction commands in Appendix D, the competitive-harness pipeline (same Stim circuit, same samples, same DEM, same observable scoring), the withdrawn benchmark policy, and the hot/cold path label. Load for any question about how to reproduce a result, what counts as evidence, or how to write a paper-ready claim.4---56# QECTOR Reproducibility and Claim Boundaries78Source of authority: v1.0.0 reference manual, chapters 19, 22, 27;9Appendix D.1011## Required elements of a published result (manual 19)1213For every published result, the repository policy requires:1415- a scoped one-sentence claim16- a clean git commit17- an environment capture (OS, Python, Rust, package versions,18 hardware)19- the exact command20- raw JSON / CSV artifacts with SHA-25621- a Wilson interval for LER22- hot / cold path labels for latency23- safe / unsafe wording attached to every result2425## Required artifact metadata (manual 22.3, table 22.1)2627| Field | Required detail |28| --------------- | -------------------------------------------------------------------------------- |29| code family | `repetition`, `ring`, `rotated_surface`, `toric`, `heavy_hex`, `color_code`, `bicycle`, `bivariate_bicycle`, custom (from `H_matrix`), or DEM-derived |30| distance / size | `distance`, `rounds`, `n_checks`, `n_qubits`, `n_detectors`, or code parameters |31| noise model | physical error rate, channel/circuit source, `code_capacity` vs `circuit_level` tag |32| decoder | exact class and mode (weighted / batch / GPU flags) |33| sample count | trials, shots, warmup, seed |34| metric | correctness, LER, latency, throughput, memory, GPU bit-identity, or scaling |35| environment | OS, CPU, RAM, Python / Rust / package versions, GPU / runtime, git commit |36| artifact | raw JSON / CSV path plus SHA-256 sidecar |3738`qector-research.artifact_metadata_check` generates the full block39(no decoder execution); `qector-library.threshold_sweep` already40emits the same block plus the SHA-256 sidecar.4142## Safe / unsafe wording (manual 22.5)4344**Safe** (anchored to a machine, workload, and artifact):4546- "on this machine, for this code/distance/noise/seed/batch47 configuration, decoder A had median hot-path latency X and p9948 Y."49- "on this checked-in artifact, QECTOR weighted Blossom produced50 LER parity with PyMatching on the tested d=15 Stim workload."5152**Unsafe** (never published):5354- "decoder A is universally faster"55- "always more accurate"56- "production real-time hardware infrastructure"57- any speed superlative without a surviving artifact5859## Hot path and cold path (manual 22.1)6061- **Cold path**: decoder construction (graph build, weight62 preprocessing, allocation). Reported separately.63- **Hot path**: `decode()` on a pre-built decoder with syndromes64 already in memory. Reported as `decode_hotpath_latency_us` or65 similar.66- Reporting only the hot path is acceptable only for a clearly67 labelled pre-built, repeated-decode workload.6869## Statistics (manual 22.2)7071Latency distributions are reported with:7273- `n`74- mean75- median76- standard deviation77- min, max78- p50, p90, p95, p9979- a 95% confidence interval on the mean8081Throughput is computed from the same timing basis, usually median82hot-path latency. A single mean without the distribution is **not**83a public claim.8485## Memory methodology (manual 22.4)8687- Python-side: `tracemalloc` peak; process RSS via `psutil` when88 installed.89- Native Rust and GPU memory: backend diagnostics or vendor90 tools; label separately.91- Python allocation, process RSS, native heap, and VRAM are92 **never** mixed as a single metric.9394## Reproduction commands (manual Appendix D)9596```bash97# D.1 Build and import smoke98git clone https://github.com/qectorlab/qector-decoder.git99# All D.x paths below are relative to the UPSTREAM qector-decoder100# source checkout created in D.1 -- NOT to this plugin repository.101cd qector-decoder102python -m venv .venv103.venv/Scripts/python -m pip install --upgrade pip maturin104PYO3_PYTHON=".venv/Scripts/python.exe"105.venv/Scripts/python -m maturin develop --release --no-default-features106.venv/Scripts/python -c "from qector_decoder_v3 import UnionFindDecoder; print('QECTOR OK')"107108# D.2 Validation suite109.venv/Scripts/python -m pip install stim sinter pymatching ldpc beliefmatching scipy psutil matplotlib tabulate pytest hypothesis fastapi uvicorn httpx110.venv/Scripts/python -m pytest python/tests -q --tb=short111cargo test --release --lib112113# D.3 Focused correctness tests114.venv/Scripts/python -m pytest python/tests/test_syndrome_faithfulness.py -q --tb=short115.venv/Scripts/python -m pytest python/tests/test_brute_force_small.py -q --tb=short116.venv/Scripts/python -m pytest python/tests/test_pymatching_compat.py -q --tb=short117.venv/Scripts/python -m pytest python/tests/test_property_faithfulness.py -q --tb=short118119# D.4 LER parity workflows120.venv/Scripts/python scripts/competitive_stim_ler.py --distances 13 15 --shots 20000 --out benchmark_results/stim_ler_d13_d15_local121.venv/Scripts/python scripts/competitive_belief_matching.py --distances 3 5 7 --shots 3000 --no-ref --out benchmark_results/competitive_belief_local122123# D.5 GPU bit-identity workflows124.venv/Scripts/python -m maturin develop --release --no-default-features --features cuda125.venv/Scripts/python -m pytest python/tests/test_cuda_cpu_bit_identical.py -q --tb=short126.venv/Scripts/python -m maturin develop --release --no-default-features --features opencl127.venv/Scripts/python -m pytest python/tests/test_opencl_cpu_bit_identical.py -q --tb=short128129# D.6 Artifact hashing130Get-FileHash benchmark_results/competitive_belief.json -Algorithm SHA256131Get-FileHash benchmark_results/stim_ler_d13_d15.json -Algorithm SHA256132```133134## Withdrawn benchmark policy (manual 19, 21)135136The reference manual deliberately excludes all latency,137throughput, and VRAM figures tied to a specific machine:138139- "All latency/throughput/VRAM figures [are] withdrawn artifacts"140 (manual 19, Table 19.1).141- Hardware benchmark charts (`benchmark_results/charts/*`) and142 paper figures (`paper_figures/*`) are explicitly excluded from143 the manual.144- The figure-disposition index (manual 21) lists every figure and145 the reason for inclusion / exclusion.146147This is the published policy. Any new result must follow the148same scope rule.149150## The screening-estimate caveat (manual 19, 27)151152- 25 trials is a **screening estimate**, not a converged threshold.153- The shipped `qector-researcher` skill uses the word "screening154 estimate" whenever the trial count is small, never "converged155 threshold" without a dated, reproducible artifact.156157## How the bench server helps158159- `qector-research.artifact_metadata_check` generates the160 chapter 22.3 metadata block.161- `qector-research.wilson_ci` and `wilson_table` are the math162 utilities for LER reports.163- `qector-research.artifacts_sha256` computes the SHA-256 sidecar164 required by the metadata block.165- `qector-research.env_block` returns the chapter 22.3 environment166 block.167- `qector-research.decode_faithfulness_check` re-verifies168 `H c = s` (mod 2) for any external decode.