03 · The jsonparser record
The jsonparser misses sit beside the wins.
jsonparser is a decade-old Go library maintained by Proof’s founder. Grafana Loki, Keybase, Coroot and the Solana Go SDK each require it in a public go.mod. We ran the audit we sell against it, in public, on code we could not hide from. Two defects escaped the review anyway, and the postmortem for both sits on the project’s master branch.
PUBLIC AUDIT EVIDENCE Every link in this section opens a file on the public master branch of buger/jsonparser. The counts were read off master on 30 August 2026, and none of them comes from the seeded demo branch.
123 requirements6 found by the review2 misses published8 defect records3 change records
Those counts are an index to the artifacts, and each one is a directory or a document you can count yourself. proof/problem-reports/ on master holds eight defect files. There is no status: field to read on them; each carries a disposition block naming the requirement or known issue that now covers it, and the regression test that holds it closed — seven of them under evidence.verified_by, the eighth through KI-4, which carries status: fixed and the command that reproduces it. Two of the eight were reported by outside contributors and credited by name in the changelog, which leaves six the review found itself. Those same two are the two published misses.
Both misses were in Set(). Asked to write 9 at index [5] of the array [1,2], it handed back [9]: no panic, valid JSON, the rest of the data gone. Asked to write at the path "a" then "", it panicked. Both are fixed on master, so both examples now behave; the reproducers stay in the tree and trip if either ever returns. The affected code carried 100% MC/DC at the time, so every condition in the decision logic we checked was exercised. Exercised is a weaker property than correct.
“MC/DC has no notion of ‘correct’; it has only ‘exercised.’”
The postmortem’s own words, in docs/proof-gap-root-cause.md on master. Both defects predate the audit by years, so writing them was not the failure. Certifying around them was. That is why they count as misses and why they get a postmortem.
-
Blameless, dated, six sections including a remediation table, on the public master branch beside the fixes.
-
All 123 requirements: 7 stakeholder promises and 116 system clauses, plain YAML. 28 carry status: approved and the remaining 95 carry status: review — and nothing is judged against a requirement until it is approved, so the file tells you which is which.
-
The test file from the chain above, carrying the requirement it proves and the issue it pins. Clone the repository and run it.
Not everything on master is a defect. proof/changes/ holds three change records, and none of them is a bug. The v1.5.0 release is CHG-260728-H6ER, type: feature. It states the intent of the release and names the two requirements the release introduced, SYS-REQ-115 and SYS-REQ-116, both since approved. A feature leaves the same record a fix does, so the corpus describes the software as it ships, not as it stood on audit day.
The miss postmortem, in full →The narrative case study →The register, read off master →What a change record contains →