Round five turned the adversarial method on the published artifacts themselves: a clean-room auditor, forbidden from reading joulecontract-rs, attempted to build a conformant validator from SPEC + conformance pack alone. Verdict: receipt-local yes, composed no. Seventeen findings (provenance/joulecontract-diff-v0.7-pack.md) — the bundle construction was recoverable only by brute force, the negative vectors demanded composed verdicts while omitting their sealed contexts, the key-log event model showed one variant of two, the spec's literal quorum MUST failed the golden vector, and RFC 8785 (the canonicalization any honest implementer reaches for) produces the wrong digest. SPEC v0.8.0 amends v0.7.0 (archived byte-exact; seven verified anchors): bundle address = digest of LF-joined sorted member addresses; canonical JSON defined precisely (float-ness preserved — deliberately not JCS); DSSE PAE in the spec text; quorum scope stated (receipt-scoped k≥2 at JR-3, per-obligation at JR-4); obligation matching exact with the frame synthesis rule; the pack declared the normative wire form; timestamps integer seconds; the KeyLog Added/Revoked enum on the wire. Pack expands 13 → 22 vectors: evidence-bundle.json ships every member's bytes (incl. the transition record), every negative embeds its sealed context, four new mutation negatives (engagement_undisclosed, recourse_undeclared, static_only_frame, unterminated_chain), three context-variant vectors (timestamp_stale, breach_unamended, verifier_revoked_window), and a JR-4 receipt making per-obligation quorum visible. The EnB object is now sealed evidence and resolved by the composed validator. Conformance README rewritten as an implementer's guide; remaining unvectored behaviors stated explicitly. Also: joule-code pre-existing clippy warnings fixed (workspace now zero), binding emits 0.8.0. 76 joulecontract tests + 39 joule-code tests green, clippy zero on both workspaces. Site: Round 5 card + seven-anchor chain, redeployed. The round's lesson in the standard's own grammar: the pack was making composed claims whose evidence was not sealed alongside — it was running evidence:external. v0.8 seals the pack. Co-Authored-By: Claude Fable 5 <[email protected]>
30 lines
No EOL
1.4 KiB
JSON
30 lines
No EOL
1.4 KiB
JSON
{
|
|
"bundle_address": "sha2-256:7238b33dd4d4854239c74c73579ed52d31f53adc4dc0e8b6110ac54ff248b09c",
|
|
"members": [
|
|
{
|
|
"address": "sha2-256:d927ef51dd5dbd9b3632c09b7ecabee59e1fac0707001a57c88bb905a1291f40",
|
|
"content_utf8": "qualification attestation, assessor-signed"
|
|
},
|
|
{
|
|
"address": "sha2-256:907818efd676718889f5d0565b3d764a50d8c0e4f06fc34d71eccee71f11d7b1",
|
|
"content_utf8": "substrate telemetry meter attestation"
|
|
},
|
|
{
|
|
"address": "sha2-256:ea72cbd4d841ebab39268fbbb8b9af277da552ce798ae29765fd97e4ca524028",
|
|
"content_utf8": "producer attestation, registry-signed"
|
|
},
|
|
{
|
|
"address": "sha2-256:412d368ceaee877da4f646199d8055bb8a375379812b97f76ad26f2201982d80",
|
|
"content_utf8": "derivation attestation"
|
|
},
|
|
{
|
|
"address": "sha2-256:812e1165c85ae3ff795ec46b4b9cdf59ad41409cb4fbad6feebe8a7c438f0d37",
|
|
"content_utf8": "signed enb object"
|
|
}
|
|
],
|
|
"note": "Every member of the conformant receipt's sealed evidence bundle, as UTF-8 bytes, so the composed path is exercisable against real content. Bundle address = sha2-256 over the LF-joined, lexicographically sorted member address strings (SPEC §5.1.3). The transition record's bytes are included so receipt.transition is checkable too.",
|
|
"transition_record": {
|
|
"address": "sha2-256:25e103f382c2bb472dbba05ba0ed7c46cfde15284a5c3f31e05cefc8b7d46b70",
|
|
"content_utf8": "transition record"
|
|
}
|
|
} |