OpenWorkProof Protocol Specification A community-driven specification, OpenWorkProof, defines a protocol for verifying AI agent work through signed, auditable evidence and negative control arms. The protocol addresses the failure model where verification can be green yet structurally meaningless, citing production data showing a gate caught only 56% of known degradations. It introduces primitives such as guards, negative controls, and population manifests to test verifier capability and prevent silent decay. Status: Draft v0.3 — community co-design Date: 2026-08-12 Repository: https://github.com/dengyier/OpenWorkProof https://github.com/dengyier/OpenWorkProof License: TBD project convention: open, permissive This specification is the product of a public design conversation 2026-08-08 → 2026-08-12 across LinkedIn and Dev.to. Every primitive below was shaped by named community contributions; each section cites its origin. The protocol's governing principle, stated by the community and adopted here: Verification must itself be tested.A check that never fails has never been checked. OpenWorkProof is a protocol for verifying AI agent work : producing signed, auditable evidence that a piece of agent execution happened as claimed, and that the verifier producing that evidence is capable of detecting failure. Two distinct claims are always separated in this protocol: | Claim | Mechanism | Meaning | |---|---|---| Authenticity | Signature over a receipt | This work was executed and attested as stated | Verifier capability | Negative control arm in the receipt | The verifier would have caught a lie | Signatures alone prove the first. They say nothing about the second — the ln.strip lesson Section 4.1 . In scope: Non-goals for now : | Term | Definition | |---|---| Guard | A verification check: command + assertion + expected failure behavior | Guard inventory | The set of guards an operator runs, classified proven / unproven / broken | Negative control | A deliberately broken input, run on every CI pass, asserting the guard goes red | Provocation contract | The formal spec of what a negative control provokes exit code, stderr pattern, schema scope | Receipt | Signed evidence of one verification event | Positive arm | The "did it pass" side of a receipt: test suite, result, population | Negative arm | The "would it catch a lie" side: control fixture, control result, control target | Population manifest | The honest enumeration of what a check was supposed to examine | Eligible seen | Pre-selection count: what reached the gate | Selection loss | The auditable gap between eligible seen and population size | Rot | Silent decay of a check's capability while output stays green three kinds: guard, control, population | The protocol exists because verification can be green and structurally meaningless . The failure model is explicit. ln.strip A production gateway ran a signed, audited check that reported verified: true on every run for months. The bug: a stray newline pushed an assert below a return , so the assertion never executed. Exit code 0. Verdict verified. Measured impact fintech engineer's post, 2026-08-09 : | Status | Count | |---|---| | Guards total | 40 | | Proven can detect failure | 7 | | Broken | 0 | Unproven | 33 | Five of eight caller-test shapes produced false passes. The agent had "passed 2,283 tests" and failed in production. Lesson: the verifier is part of the system being verified. It must be tested with inputs designed to make it fail. Even with negative controls in place, a check can go silently dead three ways community taxonomy, 2026-08-12 : | Rot | Failure | Countermeasure | Origin | |---|---|---|---| Guard rot | Guard stops catching real failures | Continuous negative control on every CI pass | Max Quimby | Control rot | Control stops testing the right failure recall/precision of the test itself | Digest pinning + control schema version | Skillselion | Population rot | Guard examines the wrong population, or none at all | eligible seen in the population manifest | Tom Jones | All three can produce a green checkmark while being structurally meaningless. All three need different countermeasures. Production data Ethan Walker, 2026-08-12 : a gate caught 23 of 41 known degradations — a 56% catch rate — across eleven green weeks in which nobody asked what fraction it catches. Lesson: every guard must be measurable against known-bad inputs. The negative control is the cheap, proactive version of the expensive forensic replay Ethan had to do retroactively. A guard is a check plus a control: guard: id: gw check response shape description: "Every gateway response matches the documented schema" command: "check response.sh" assertion: "schema validate $INPUT" status: unproven proven | unproven | broken — set by control runs controls: gw control null handling The guard inventory is a published, versioned list — not a private detail. It is the unit of honesty: guard inventory: schema version: "1.0" generated at: 2026-08-12T00:00:00Z totals: guards: 40 proven: 7 unproven: 33 broken: 0 guards: ... "Proven" is defined operationally: a guard is proven only while its negative control fails as expected. The moment the control passes green on broken input , the guard is reclassified unproven or broken . Proven is a time-decaying label, not a permanent badge Max Quimby: guard rot . A negative control pins the exact broken input and the exact expected failure, and scopes itself to schema versions Skillselion: control rot / digest pinning : negative control: fixture digest: sha256:abc123... The exact broken input expected failure digest: sha256:def456... The exact failure signature control schema version: 2 For schema migration tracking control spec: target schema version: " =1.0, <3.0" Valid for these schema versions provocation type: null handling What class of failure it tests expected exit code: non-zero Minimum bar expected stderr pattern: "NullPointerException" Specific signal Rules: control schema version and expected failure digest over time. target schema version range.A guard's scope must be auditable. The manifest distinguishes what reached the gate from what passed selection Tom Jones, third round : population manifest: selection rule: "threads we have commented in" What we HOLD eligible seen: 400 What reached the gate pre-selection population size: 12 What passed selection post-selection population digest: