Skip to content

Validation log

Which objects are certified, and what their certification currently says.

Object Validation is the process page — the order of work, the sabotage rule, the report's five sections, the two gates. This page is its running record: one row per object that has been through it, with a link straight to that object's evidence.

How to read a row

Each row is derived from the object's own results.md, which is generated from the C implementation through its own binding — nothing here is transcribed by hand.

column means
limits how many of the certified envelope's claims hold, out of the total
findings every judgement the review phase recorded, of any verdict
still open of those, the ones with verdict GAP or CONFIRMED, named so you can find them

A findings count is not a defect count, and a high one is not a bad sign — BY DESIGN and FIXED are the common verdicts, so an object that was looked at hard has more of them.

Nor does an open finding mean the object failed. Every object in the table below holds all of its limits while carrying open findings, and the two say different things: a limit is a claim a caller may rely on, and a failing one is a regression; an open finding is a gap in what has been established, or a defect that is understood and documented but not yet fixed. Certification means the envelope is measured and holds — not that nothing is left to do. Only limits is bolded when it is short of its total, because that is the cell that would mean something is broken.

What the numbers are worth

The chain from code to table is gated at every link:

  1. make validate regenerates each results.md by measuring the C;
  2. make validate-check fails if a committed report is stale — so a report cannot drift from the code it describes;
  3. this page's table is generated from those reports by scripts/gen_validation_log.py, and make docs-drift-check fails if it is stale — so the table cannot drift from the reports.

What that chain does not prove is that a limit is the right limit, or that it would fail if the behaviour regressed. Only the sabotage step in Object Validation establishes that, and no amount of regeneration substitutes for it — a report that regenerates faithfully from a vacuous assertion is faithfully vacuous.

Rows are sorted by module, then by object, so the table reads as a map of the library rather than as a history — arrival order is what the git log is for. Discovery is a glob of src/doppler/*/tests/validation/*/results.md, the same one make validate uses, so a newly certified object is listed the moment its folder exists. There is no list here to update.

Certified objects

34 objects certified — 23 of the 82 objects/*.toml jm fragments, plus 11 with no object manifest at all (ccsds_tm, conv, detection, ema, mpsk, resamp, rs, wfm_compose, wfm_frame, wfm_plan, wfmgen): a function primitive, or a core declared another way. Not every fragment is a DSP object with an envelope worth certifying, so read the denominator as a ceiling rather than a target — and note the two counts are different populations, not a percentage.

object module limits findings still open
AGC agc 18/18 6 2 — F4, F6
Interleaver coding 20/20 8 2 — F7, F8
detection detection 24/24 6 1 — F5
LockDet detection 22/22 6 none
acq dsss 17/17 7 3 — F3, F6, F7
BurstAcquisition dsss 17/17 4 none
BurstCapture dsss 22/22 6 1 — F6
BurstDemod dsss 15/15 5 none
BurstDespreader dsss 15/15 5 none
DsssBurstReceiver dsss 32/32 11 none
PolynomialPhaseEstimator dsss 15/15 5 none
M-PSK constellation mpsk 24/24 5 1 — F3
resamp resample 14/14 9 none
LO source 26/26 9 none
NCO source 18/18 9 none
Corr2D spectral 18/18 6 none
CorrDetector2D spectral 15/15 5 none
CarrierNda track 43/43 12 6 — F4, F5, F6, F7, F8, F9
LoopFilter track 26/26 10 none
MpskReceiver track 63/63 8 2 — F6, F7
RateSync track 36/36 17 2 — F7, F17
EMA util 15/15 6 none
Gold wfm 17/17 4 1 — F4
PN wfm 16/16 4 none
Composer wfm 15/15 4 none
Frame wfm 16/16 4 1 — F2
Plan wfm 17/17 4 2 — F1, F2
Reader wfm 16/16 4 2 — F2, F3
Synth wfm 19/19 6 2 — F2, F5
Writer wfm 16/16 5 2 — F1, F5
ccsds_tm — (C only) 12/12 5 1 — F2
conv — (C only) 7/7 3 none
rs — (C only) 11/11 4 none
wfmgen — (C only) 11/11 5 1 — F4

Not yet certified

Everything else. The campaign works through objects deliberately rather than in bulk, because the expensive part is not writing the report — it is enumerating a header's prose claims and proving each new C test by sabotage. An object's absence from the table above means no certification has been attempted, not that it is known to be sound.