Lesson 8 · Reproducibility
Reproduce everything: the audit trail in five commands
No claim in this course needs trust. Every artifact regenerates deterministically and every receipt re-opens at a real file and line.
cd docs/knowledge-intelligence/runs/2026-07-18-bookmarks-transcripts-opportunities
node --test extract-signals.test.mjs # 10/10 — gold set + aliases + subject conflicts
node --test wtp-observed.test.mjs # 1/1 — strict WTP fixture (13 leak lines)
node --test build-queue.test.mjs # 10/10 — schema, gates, dup-invariance, split
node run-extract.mjs --verify # 8.837 signal rows, coverage 2.537/2.537
node run-queue.mjs --verify # indicators, queue, brief — byte-identical
Verify one receipt
Pick any evidence_quote in signals/signals.jsonl, then sed -n '<line>p' $RESOURCES/<locator.file> (with RESOURCES pointing at the corpus root). The quote is there, verbatim, or the pipeline is broken.
Verify the dedupe
Scan signals.jsonl for duplicate dedupe_key: exactly zero. 1.226 rows carry alias_of pointers — tracked, never counted twice.
Verify the abstentions
Open any no_signal package in signals/packages.jsonl: the named reason (promotion, noise, no candidates) matches the actual content.
What this mission proved
| Claim | Evidence |
|---|---|
| 2.537/2.537 accounted | coverage.json — 2.055 bearing, 476 no_signal, 6 blocked (named) |
| Duplicates never elevate | 1.226 alias rows, zero duplicate keys, queue skips aliases |
| WTP is observed-only | 209 → 7 signals after strict compound; leak classes probed to zero |
| Contradictions are substantive | subject-compatible conflicts[] on both sides of 5 gold pairs |
| Zero padding | 37 clusters rejected with named reasons; 17 WATCH; 0 DO_NOW |
| Independent validation | 8 validator rounds documented in audit/ with verdicts and receipts |
The next loop
The queue's value compounds when the next tests run: each WATCH candidate's interviews feed back as new evidence — this time with OBSERVED payment conversations. That is how a corpus of claims becomes a corpus of proof.