diff --git a/.github/workflows/standards-build.yml b/.github/workflows/standards-build.yml index 9dcb3717d..771cbf05b 100644 --- a/.github/workflows/standards-build.yml +++ b/.github/workflows/standards-build.yml @@ -131,7 +131,13 @@ jobs: - { name: jouledesk-rs, dir: jouledesk/jouledesk-rs, runner: macos } - { name: arl-rs, dir: arl/arl-rs, runner: linux } - { name: sense-rs, dir: sense/sense-rs, runner: linux } - - { name: proof-rs, dir: proof/proof-rs, runner: linux, z3: true, conformance: proof-conformance } + # `applied:` points the joulespec producer at this standard's own + # conformance items (SPEC §8), mapped to real checks with a + # counter-artifact each. It is the only gate that keeps those + # mappings honest: a refactor that moves the code a mutation was + # aimed at makes the harvest refuse, and a check that stops being + # able to fail becomes a finding rather than staying green. + - { name: proof-rs, dir: proof/proof-rs, runner: linux, z3: true, conformance: proof-conformance, applied: proof/conformance/v1/joulespec.toml } - { name: joulehook-rs, dir: joulehook/joulehook-rs, runner: linux } - { name: eoc-rs, dir: eoc/eoc-rs, runner: linux, feature_tests: "-p eoc-meter --features cuda" } # mesh-openai's `serve_example` test (the reference server seals what @@ -339,6 +345,43 @@ jobs: exit 1 fi + # The same producer, pointed at a *different* standard. + # + # `applied: ` names a manifest that lives with the standard it + # describes, so this measures how well that standard's own conformance + # items are evidenced. It is deliberately a separate step from the one + # above: that one builds the producer from the workspace under test, + # which only works where the workspace under test *is* the producer's. + # Here the producer is built from its own workspace and then run against + # someone else's. + # + # No `--out`: a receipt written here would dirty the tree and fail the + # revert check below, and its energy figures differ every run anyway. + - name: JouleSpec applied to this standard + if: matrix.applied + run: | + set -euo pipefail + # Built and located in separate commands on purpose: folded into + # one substitution, a build failure yields an empty path and the + # step fails with "no such file" instead of the compiler error. + ( cd joulespec/joulespec-rs && cargo build --release -p joulespec-cli ) + target="$(cd joulespec/joulespec-rs \ + && cargo metadata --no-deps --format-version 1 \ + | python3 -c 'import json,sys; print(json.load(sys.stdin)["target_directory"])')" + test -x "$target/release/joulespec" \ + || { echo "the producer did not build at $target/release/joulespec"; exit 1; } + "$target/release/joulespec" harvest \ + --manifest "${{ matrix.applied }}" --require-grade E3 + - name: The applied harvest left no mutation behind + if: matrix.applied + run: | + set -euo pipefail + if ! git diff --quiet; then + echo "the applied harvest did not revert cleanly:" + git diff --stat + exit 1 + fi + # Both directions of the proof path, live. # # The first run must verify with every declared reachability cover diff --git a/joulespec/README.md b/joulespec/README.md index f8b5fd8ba..1852312db 100644 --- a/joulespec/README.md +++ b/joulespec/README.md @@ -360,6 +360,29 @@ All of it is recorded in [`conformance/v1/README.md`](conformance/v1/README.md), and that is the `E3` rung doing the only thing it claims to do. +## Applied to a standard that is not this one + +A producer that has only ever measured its own specification has demonstrated +a format, not a method. `proof/conformance/v1/joulespec.toml` points this +producer at a sibling standard: its conformance items are read from that +standard's own published document, each is mapped to a named check in its +workspace, and each mapping declares a counter-artifact that must make that +check fail. Every item of that standard's conformance section reaches `E3`, +and CI gates it there under `applied:` — so a refactor that moves the code a +mutation was aimed at makes the harvest refuse, and a check that stops being +able to fail becomes a finding instead of staying green. + +Doing it found one thing, and the shape of the finding matters more than the +finding. The first counter-artifact for that standard's routing clause was +aimed at a constant the router turned out not to read, so the check passed +with the constant reordered and the harvester reported that the check could +not see its subject. The report was right; the manifest was wrong. A producer +can say only what it observed — that a check passed while something it was +supposed to notice was broken — and whether that means *the check is weak* or +*the mutation missed* is the operator's call. Re-aimed at the sort that +actually orders the rungs, the same check failed at once, which is how the +clause's evidence ended up real rather than assumed. + ## Conformance packs Three, answering different questions: diff --git a/proof/conformance/v1/joulespec.toml b/proof/conformance/v1/joulespec.toml new file mode 100644 index 000000000..f2dee6814 --- /dev/null +++ b/proof/conformance/v1/joulespec.toml @@ -0,0 +1,134 @@ +# JouleSpec applied to the proof standard. +# +# The first time this producer has measured a specification other than its own. +# Clauses are read from `../../SPEC.md` section 8 rather than copied here, so +# this manifest cannot drift from that document: reword an item and its +# obligation address moves, and the witness bound to the old wording stops +# applying. +# +# The three declared things are human judgements the standard refuses to guess +# (JouleSpec SPEC 2.6, 2.5, 8): which check stands for which obligation, where +# each check's expectation comes from, and which inputs it depends on. + +workspace = "../../proof-rs" +steward = "did:key:joulespec-applied-proof" + +[spec] +document = "../../SPEC.md" +section = "8. Conformance" +# This document writes its conformance items as a bulleted list with bold +# labels, which is a fact about the document rather than about this producer. +shape = "bulleted-bold-label" +# C1..C5 and C-neg. A floor, so a parser that matched fewer fails rather than +# reporting success over a shorter list. +expect_at_least = 6 +intent = "The cheapest-sufficient prover routes, accounts and seals as section 8 requires." + +[artifact] +dirs = ["crates"] +extensions = ["rs"] + +[energy] +watts = 30.0 +provenance = "estimator" + +# --------------------------------------------------------------------------- +# C1 -- cheapest-sufficient routing +# +# The first mutation written here was aimed at `Tier::LADDER`, on the +# assumption that the router iterated it. It does not: that constant is read +# only by the monotonicity checks, and the router sorts the solvers it was +# handed. So the check passed with the constant reordered, and the harvester +# reported -- correctly -- that the check could not see its subject. The +# report was right and the manifest was wrong, which is the distinction the +# operator has to make and the producer cannot. +# +# Aimed at the sort, the same check fails at once. +[[evidence]] +clause = "C1" +check = "tests::trivial_closes_at_t0_no_waste" +anchor = "specification" +footprint = [ + "crates/proof-schema/src/lib.rs", + "crates/proof-cascade/src/lib.rs", +] +[evidence.counter] +file = "crates/proof-cascade/src/lib.rs" +find = " solvers.sort_by_key(|s| s.tier());" +replace = " solvers.sort_by_key(|s| std::cmp::Reverse(s.tier()));" +breaks = "orders the router's rungs dearest-first, so a goal no longer closes at the cheapest tier that can discharge it" + +# --------------------------------------------------------------------------- +# C2 -- disclosed escalation +[[evidence]] +clause = "C2" +check = "tests::escalation_discloses_waste" +anchor = "specification" +footprint = ["crates/proof-cascade/src/lib.rs"] +[evidence.counter] +file = "crates/proof-cascade/src/lib.rs" +find = " wasted_uj = wasted_uj.saturating_add(uj);" +replace = " wasted_uj = wasted_uj.saturating_add(0);" +breaks = "stops counting a failed cheaper attempt's joules as escalation waste" + +# --------------------------------------------------------------------------- +# C3 -- energy honesty +[[evidence]] +clause = "C3" +check = "tests::ladder_is_cheapest_first_and_monotone" +anchor = "specification" +footprint = ["crates/proof-schema/src/lib.rs"] +[evidence.counter] +file = "crates/proof-schema/src/lib.rs" +find = """ pub const LADDER: [Tier; 4] = [ + Tier::Automation, + Tier::Smt,""" +replace = """ pub const LADDER: [Tier; 4] = [ + Tier::Smt, + Tier::Automation,""" +breaks = "breaks the ladder's strict monotonicity by putting a dearer rung first" + +# --------------------------------------------------------------------------- +# C4 -- the flywheel +[[evidence]] +clause = "C4" +check = "tests::cache_is_the_flywheel" +anchor = "specification" +footprint = ["crates/proof-cascade/src/lib.rs"] +[evidence.counter] +file = "crates/proof-cascade/src/lib.rs" +find = """ total_uj: 0, + wasted_uj: 0,""" +replace = """ total_uj: 1, + wasted_uj: 0,""" +breaks = "charges a joule for a proof served from cache, so re-proving is no longer free" + +# --------------------------------------------------------------------------- +# C5 -- the receipt +[[evidence]] +clause = "C5" +check = "jcr1::tests::envelope_rejects_wrong_steward" +anchor = "specification" +footprint = ["crates/proof-receipt/src/jcr1.rs"] +[evidence.counter] +file = "crates/proof-receipt/src/jcr1.rs" +find = " if kid != expected_steward {" +replace = " if false {" +breaks = "stops comparing the envelope's key id against the expected steward, so a wrong steward verifies" + +# --------------------------------------------------------------------------- +# C-neg -- the negative pack +[[evidence]] +clause = "C-neg" +check = "tests::unproved_goal_cannot_be_sealed" +anchor = "specification" +footprint = ["crates/proof-receipt/src/lib.rs"] +[evidence.counter] +file = "crates/proof-receipt/src/lib.rs" +find = """ if !r.proved { + return Err(ReceiptError::NotProved); + }""" +replace = """ if false { + return Err(ReceiptError::NotProved); + }""" +breaks = "lets a receipt be sealed for a goal nothing proved" diff --git a/proof/conformance/v1/joulespec/README.md b/proof/conformance/v1/joulespec/README.md new file mode 100644 index 000000000..3c8ffb401 --- /dev/null +++ b/proof/conformance/v1/joulespec/README.md @@ -0,0 +1,46 @@ +# This standard, measured by `joulespec/1` + +Not part of this standard's own conformance pack. The vectors beside it +(`../meta.json`, `../receipts.jsonl`) are what an implementation of *this* +standard round-trips. These files answer a different question: **how well is +each conformance item of §8 actually evidenced, and what did establishing that +cost?** + +Produced by [`../joulespec.toml`](../joulespec.toml): + +``` +joulespec harvest --manifest conformance/v1/joulespec.toml \ + --out conformance/v1/joulespec --require-grade E3 +``` + +The clauses are read from [`../../../SPEC.md`](../../../SPEC.md) §8 rather than +copied into the manifest, so the manifest cannot drift from the specification: +reword a conformance item and its obligation address moves, and the witness +bound to the old wording stops applying. + +Every item of §8 — C1 through C5 and the negative pack — reaches **`E3`**: +each is mapped to a named check, and each check is on record *failing* against +a declared counter-artifact, so its passing carries information. Attestation +is reported **absent**, not `A0`: no work units were declared, so no +implementer is known, and absence of information about who built something is +not evidence that someone else checked it. + +**These files are a measurement, not a vector.** Their energy figures come +from a wall clock and are graded `Estimator`, so re-running the harvest +produces different microjoules and therefore different receipt bytes. Nothing +here should be diffed byte-for-byte. + +## What producing it found + +The first counter-artifact written for C1 aimed at `Tier::LADDER`, on the +assumption that the router iterated that constant. It does not — the constant +is read only by the monotonicity checks, and the router sorts the solvers it +was handed. So `trivial_closes_at_t0_no_waste` passed with the constant +reordered, and the harvester reported that the check could not see its +subject. + +That report was correct and the manifest was wrong. The distinction between +"this check is weak" and "this mutation missed the code path" is the +operator's to make; a producer can only say which it observed. Re-aimed at +`Router::new`'s sort, the same check fails immediately — so the check was +strong all along, and C1's evidence is real rather than assumed. diff --git a/proof/conformance/v1/joulespec/receipt.cbor b/proof/conformance/v1/joulespec/receipt.cbor new file mode 100644 index 000000000..51958ed18 Binary files /dev/null and b/proof/conformance/v1/joulespec/receipt.cbor differ diff --git a/proof/conformance/v1/joulespec/receipt.json b/proof/conformance/v1/joulespec/receipt.json new file mode 100644 index 000000000..bac38a720 --- /dev/null +++ b/proof/conformance/v1/joulespec/receipt.json @@ -0,0 +1,85 @@ +{ + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "clause_verdicts": [ + { + "anchor": "specification", + "evidence_uj": 139730713, + "grade": "E3", + "kind": "requirement", + "label": "C1", + "means": "falsifiable", + "obligation": "b3:adc5e745e3ef9f0f017f5b3b49f02e87e09f3ce90523807b333c75fdc57bee2a", + "stale": 0, + "witness": "b3:ea82a1462f0ae528874a25d4a29064ae4d51d984b32c689cce575e476f71dca5" + }, + { + "anchor": "specification", + "evidence_uj": 261673929, + "grade": "E3", + "kind": "requirement", + "label": "C2", + "means": "falsifiable", + "obligation": "b3:814ffce0b4c9b37cb3a0171964b0af495d896d142fe2841a787d92f250f7b7a7", + "stale": 0, + "witness": "b3:c20d7b87ca653857a6b62f78400cd42d2d99a132a34fd3a94b88ff7a7cc9e881" + }, + { + "anchor": "specification", + "evidence_uj": 414690903, + "grade": "E3", + "kind": "requirement", + "label": "C3", + "means": "falsifiable", + "obligation": "b3:b97f13ee7662fd25c38f45b86afffa1756e4904db6b3017b066c357f5207ce73", + "stale": 0, + "witness": "b3:2f881887042a17ae716852e26479da9720a3a898f0177dd4fe3ae9c2a92ec70b" + }, + { + "anchor": "specification", + "evidence_uj": 383318791, + "grade": "E3", + "kind": "requirement", + "label": "C4", + "means": "falsifiable", + "obligation": "b3:4b5112bf045683cbec8973e40b2efe325410ab0638edb4853f77251a0d550d9f", + "stale": 0, + "witness": "b3:9eaa1f178c4679a902d882a43387eb9a4de982ce9273dd706e0cf6dcb9e447c0" + }, + { + "anchor": "specification", + "evidence_uj": 403680024, + "grade": "E3", + "kind": "requirement", + "label": "C5", + "means": "falsifiable", + "obligation": "b3:83fb7c1fce0c05889e287ae4cc1659367c5e3a731339ceedf978ef1b16f063f7", + "stale": 0, + "witness": "b3:3e050c6d50d74450ff4f3cb23539149ec92d9ff60d46a70618149e8c02b3c7d1" + }, + { + "anchor": "specification", + "evidence_uj": 252481436, + "grade": "E3", + "kind": "requirement", + "label": "C-neg", + "means": "falsifiable", + "obligation": "b3:6507f37527e2e4087f9bae36bf0be616a33bd604e824ff18e8af9122c48f31fa", + "stale": 0, + "witness": "b3:d5157feddeb335fa1a067b2776bb7127a4a6ae460a6c4e46f912744cc4bb5ba9" + } + ], + "clauses": 6, + "evidence_uj": 1855575796, + "flags": 0, + "grade": "E3", + "joulespec_receipt": "joulespec/1", + "open": 0, + "owed": 6, + "provenance": "Estimator", + "spec": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "specified_uj": 0, + "steward": "did:key:joulespec-applied-proof", + "uj_per_falsifiable_clause": 309262632, + "unspecified": [], + "unspecified_uj": 0 +} \ No newline at end of file diff --git a/proof/conformance/v1/joulespec/spec.json b/proof/conformance/v1/joulespec/spec.json new file mode 100644 index 000000000..71ad86226 --- /dev/null +++ b/proof/conformance/v1/joulespec/spec.json @@ -0,0 +1,140 @@ +{ + "spec": { + "profile": "joulespec/1", + "alg": 1, + "intent": "The cheapest-sufficient prover routes, accounts and seals as section 8 requires.", + "clauses": [ + { + "label": "C1", + "kind": "requirement", + "text": "cheapest-sufficient routing — each goal closes at the cheapest tier that can discharge it." + }, + { + "label": "C2", + "kind": "requirement", + "text": "disclosed escalation — `total_uj` equals the sum of all attempts, and `wasted_uj` is exactly the joules of cheaper attempts that failed first." + }, + { + "label": "C3", + "kind": "requirement", + "text": "energy honesty — the ladder is strictly monotone; the batch is accounted against a frontier-only baseline with non-negative savings." + }, + { + "label": "C4", + "kind": "requirement", + "text": "the flywheel — re-proving an identical goal costs zero new joules." + }, + { + "label": "C5", + "kind": "requirement", + "text": "the receipt — a proved result seals to JCR-1 and verifies; a wrong steward fails." + }, + { + "label": "C-neg", + "kind": "requirement", + "text": "provenance coupling is enforced; an unproved goal cannot be sealed; a tampered envelope fails; canonical CBOR rejects floats/bools." + } + ], + "parent": null, + "author": [ + 138, + 136, + 227, + 221, + 116, + 9, + 241, + 149, + 253, + 82, + 219, + 45, + 60, + 186, + 93, + 114, + 202, + 103, + 9, + 191, + 29, + 148, + 18, + 27, + 243, + 116, + 136, + 1, + 180, + 15, + 111, + 92 + ] + }, + "sig": [ + 73, + 24, + 67, + 55, + 1, + 151, + 40, + 50, + 66, + 94, + 76, + 87, + 199, + 153, + 123, + 90, + 136, + 162, + 236, + 0, + 135, + 50, + 167, + 140, + 26, + 255, + 149, + 91, + 24, + 159, + 204, + 202, + 53, + 203, + 71, + 58, + 153, + 199, + 119, + 232, + 193, + 14, + 158, + 63, + 134, + 159, + 54, + 190, + 56, + 22, + 148, + 171, + 92, + 71, + 23, + 204, + 10, + 59, + 177, + 63, + 92, + 75, + 214, + 4 + ] +} \ No newline at end of file diff --git a/proof/conformance/v1/joulespec/state.json b/proof/conformance/v1/joulespec/state.json new file mode 100644 index 000000000..aa0c45041 --- /dev/null +++ b/proof/conformance/v1/joulespec/state.json @@ -0,0 +1,29 @@ +{ + "address": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "parts": [ + "b3:0e7ee89c74bfca496a54ba8c5ae5ede4764b59740526a8ab452cb23065385ca1", + "b3:21622b4b039b6469ccb11967c657d31762d28dba15c260190569acbe3ea42cd4", + "b3:2d17be4e2c03d1026bb2f5c469b446fbc79a86fad7bc51183193d6b3e94c94ac", + "b3:3ce20eabeea604c713b52e1733f0f955c17ec676a7e9ff52e0df370170e58c8e", + "b3:4b0eef47eefb151e591497dc8df77fec40af8133ca7758f639ab8b584982d748", + "b3:56b09606c1560717eaee0415ed58b38fff47fc6696b69b863c638fc7593be8d4", + "b3:587af7d56a92893b16606df511157bb77cb3da41e4a0799b7c74dbcb40b6dfba", + "b3:5b4ea66ec4875399561dde3aeb47ffabf45a02566d0efdf0f7f4bcf3322fd22d", + "b3:5eb7feed39e6b851536d5fa1cc27fef178a4ede3143c53e88bbb6ab2d79bc7df", + "b3:5ecc89991378c5de1606e014f20aea26171cac5341c77848d15a181e9aeec15b", + "b3:62fd9b47143a2809d3c48f9ce51830236c1c716fd1a9b7c5bf4edb8626e71b74", + "b3:679714ce4e11833c0f79c623919f3421b2003ed87c561e7cc38d4481d0338a51", + "b3:a9f17ef3fda27cac3d5dcebde85054f86fa31da613108074b90793b16733899c", + "b3:c274f7292238590ff0fe43b2dc2318bba8bd403b9d142f4cfb6b851c335b7f50", + "b3:ca9033c320c2183b50669dfdfca0c489d444e65c6e6ebab5e80026ddd2130f80", + "b3:cfaf689ebcea29f26386fa4a87eb6ac627623ce4c38b159ef3dd06fc5763e1b6", + "b3:d1279d21de286663d8c6c3333f74d9ad73a0d7c87835d4bf8f794fb1a7aeebc3", + "b3:d3e9847cbe5b2267d97bd6c0a55027d7e28b7684b531ed0e3562748f83bb884f", + "b3:e6e0f4e5328ab9b7baea8f03e7d77bceebd6c5729947596d2e2ca3e37efa50e3", + "b3:ecf775c7c052f89a24fbe289afd10834590f413e89f1b41c2f8aaffb5ba35005", + "b3:f3011268fadce958c1d3ed6923d647759f04adcd3d1bb8ab3760a869a800be27", + "b3:f7799106462a4de775a30579e44041c2cd2d7929eb8379a731731bef4bb8caef", + "b3:fba41b1c26efbcdbb2635813b88d1dc658b6abc69d5a24acfcbbd1d451663d74", + "b3:ff21bdb01fb64783cb055f695a24f80f204f981e8861a94df4a4bcaf4f838e3b" + ] +} \ No newline at end of file diff --git a/proof/conformance/v1/joulespec/witnesses.json b/proof/conformance/v1/joulespec/witnesses.json new file mode 100644 index 000000000..b2954b1dc --- /dev/null +++ b/proof/conformance/v1/joulespec/witnesses.json @@ -0,0 +1,735 @@ +[ + { + "witness": { + "profile": "joulespec-witness/1", + "alg": 1, + "spec_id": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "obligation": "b3:adc5e745e3ef9f0f017f5b3b49f02e87e09f3ce90523807b333c75fdc57bee2a", + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "footprint": [ + "b3:3ce20eabeea604c713b52e1733f0f955c17ec676a7e9ff52e0df370170e58c8e", + "b3:587af7d56a92893b16606df511157bb77cb3da41e4a0799b7c74dbcb40b6dfba" + ], + "evidence": { + "kind": "falsifiable", + "check": "tests::trivial_closes_at_t0_no_waste", + "anchor": "specification", + "counter": "b3:a997ef230b7fa61c6dbef5b479ddc4250762acdcfa506cec80d4d48458cf11df" + }, + "energy": { + "uj": 139730713, + "provenance": "estimator" + }, + "author": [ + 129, + 57, + 119, + 14, + 168, + 125, + 23, + 95, + 86, + 163, + 84, + 102, + 195, + 76, + 126, + 204, + 203, + 141, + 138, + 145, + 180, + 238, + 55, + 162, + 93, + 246, + 15, + 91, + 143, + 201, + 179, + 148 + ] + }, + "sig": [ + 211, + 129, + 109, + 77, + 73, + 151, + 228, + 208, + 177, + 43, + 31, + 178, + 23, + 6, + 195, + 12, + 154, + 120, + 115, + 194, + 130, + 54, + 85, + 119, + 79, + 13, + 59, + 120, + 189, + 18, + 210, + 69, + 205, + 44, + 195, + 131, + 229, + 83, + 9, + 57, + 7, + 3, + 239, + 74, + 215, + 14, + 203, + 253, + 148, + 164, + 80, + 208, + 187, + 23, + 63, + 78, + 11, + 215, + 107, + 93, + 79, + 56, + 17, + 12 + ] + }, + { + "witness": { + "profile": "joulespec-witness/1", + "alg": 1, + "spec_id": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "obligation": "b3:814ffce0b4c9b37cb3a0171964b0af495d896d142fe2841a787d92f250f7b7a7", + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "footprint": [ + "b3:587af7d56a92893b16606df511157bb77cb3da41e4a0799b7c74dbcb40b6dfba" + ], + "evidence": { + "kind": "falsifiable", + "check": "tests::escalation_discloses_waste", + "anchor": "specification", + "counter": "b3:0d96a0f76fe868b04f2aa1974d2aac9ce0dddc6b9bb33eb736bbfbaafcc562a6" + }, + "energy": { + "uj": 261673929, + "provenance": "estimator" + }, + "author": [ + 129, + 57, + 119, + 14, + 168, + 125, + 23, + 95, + 86, + 163, + 84, + 102, + 195, + 76, + 126, + 204, + 203, + 141, + 138, + 145, + 180, + 238, + 55, + 162, + 93, + 246, + 15, + 91, + 143, + 201, + 179, + 148 + ] + }, + "sig": [ + 239, + 174, + 173, + 232, + 58, + 92, + 91, + 48, + 193, + 173, + 183, + 139, + 168, + 47, + 90, + 85, + 29, + 130, + 216, + 151, + 102, + 39, + 142, + 217, + 217, + 208, + 186, + 14, + 81, + 202, + 5, + 132, + 56, + 156, + 98, + 165, + 66, + 25, + 133, + 3, + 154, + 82, + 201, + 244, + 23, + 155, + 13, + 133, + 241, + 245, + 33, + 237, + 241, + 138, + 255, + 76, + 178, + 21, + 206, + 180, + 93, + 209, + 159, + 13 + ] + }, + { + "witness": { + "profile": "joulespec-witness/1", + "alg": 1, + "spec_id": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "obligation": "b3:b97f13ee7662fd25c38f45b86afffa1756e4904db6b3017b066c357f5207ce73", + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "footprint": [ + "b3:3ce20eabeea604c713b52e1733f0f955c17ec676a7e9ff52e0df370170e58c8e" + ], + "evidence": { + "kind": "falsifiable", + "check": "tests::ladder_is_cheapest_first_and_monotone", + "anchor": "specification", + "counter": "b3:998c33c6460cd1b7929e8a24cd3f8100fea9b4d2489c834af4d40601c9cb0f55" + }, + "energy": { + "uj": 414690903, + "provenance": "estimator" + }, + "author": [ + 129, + 57, + 119, + 14, + 168, + 125, + 23, + 95, + 86, + 163, + 84, + 102, + 195, + 76, + 126, + 204, + 203, + 141, + 138, + 145, + 180, + 238, + 55, + 162, + 93, + 246, + 15, + 91, + 143, + 201, + 179, + 148 + ] + }, + "sig": [ + 189, + 234, + 39, + 170, + 6, + 101, + 102, + 185, + 213, + 179, + 60, + 102, + 62, + 50, + 222, + 222, + 233, + 128, + 18, + 87, + 166, + 139, + 165, + 136, + 8, + 138, + 30, + 36, + 38, + 146, + 77, + 18, + 174, + 253, + 142, + 31, + 200, + 103, + 57, + 211, + 97, + 111, + 110, + 183, + 185, + 208, + 104, + 187, + 249, + 140, + 139, + 131, + 176, + 211, + 111, + 111, + 30, + 158, + 86, + 171, + 134, + 94, + 119, + 3 + ] + }, + { + "witness": { + "profile": "joulespec-witness/1", + "alg": 1, + "spec_id": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "obligation": "b3:4b5112bf045683cbec8973e40b2efe325410ab0638edb4853f77251a0d550d9f", + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "footprint": [ + "b3:587af7d56a92893b16606df511157bb77cb3da41e4a0799b7c74dbcb40b6dfba" + ], + "evidence": { + "kind": "falsifiable", + "check": "tests::cache_is_the_flywheel", + "anchor": "specification", + "counter": "b3:b60b4a6a98af13c6fafce81ab15c5a6c29f4f749c5532ed81b2a9997850fa004" + }, + "energy": { + "uj": 383318791, + "provenance": "estimator" + }, + "author": [ + 129, + 57, + 119, + 14, + 168, + 125, + 23, + 95, + 86, + 163, + 84, + 102, + 195, + 76, + 126, + 204, + 203, + 141, + 138, + 145, + 180, + 238, + 55, + 162, + 93, + 246, + 15, + 91, + 143, + 201, + 179, + 148 + ] + }, + "sig": [ + 201, + 143, + 244, + 42, + 217, + 52, + 25, + 131, + 30, + 233, + 122, + 223, + 26, + 212, + 74, + 140, + 181, + 126, + 144, + 245, + 168, + 83, + 222, + 39, + 29, + 192, + 213, + 137, + 35, + 236, + 251, + 129, + 72, + 138, + 73, + 15, + 122, + 79, + 45, + 6, + 169, + 247, + 25, + 196, + 122, + 197, + 197, + 199, + 171, + 32, + 224, + 246, + 58, + 38, + 176, + 251, + 105, + 191, + 38, + 61, + 127, + 50, + 52, + 13 + ] + }, + { + "witness": { + "profile": "joulespec-witness/1", + "alg": 1, + "spec_id": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "obligation": "b3:83fb7c1fce0c05889e287ae4cc1659367c5e3a731339ceedf978ef1b16f063f7", + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "footprint": [ + "b3:e6e0f4e5328ab9b7baea8f03e7d77bceebd6c5729947596d2e2ca3e37efa50e3" + ], + "evidence": { + "kind": "falsifiable", + "check": "jcr1::tests::envelope_rejects_wrong_steward", + "anchor": "specification", + "counter": "b3:fde9bcd20950b681c345577fc0e5f2d0e41f8652fe1969e23308be808d07bd65" + }, + "energy": { + "uj": 403680024, + "provenance": "estimator" + }, + "author": [ + 129, + 57, + 119, + 14, + 168, + 125, + 23, + 95, + 86, + 163, + 84, + 102, + 195, + 76, + 126, + 204, + 203, + 141, + 138, + 145, + 180, + 238, + 55, + 162, + 93, + 246, + 15, + 91, + 143, + 201, + 179, + 148 + ] + }, + "sig": [ + 54, + 93, + 167, + 219, + 163, + 18, + 47, + 151, + 190, + 155, + 130, + 109, + 143, + 61, + 255, + 123, + 162, + 100, + 118, + 80, + 29, + 24, + 143, + 198, + 240, + 225, + 89, + 203, + 105, + 68, + 124, + 205, + 98, + 104, + 49, + 137, + 184, + 62, + 39, + 88, + 179, + 17, + 122, + 51, + 3, + 56, + 140, + 73, + 222, + 68, + 15, + 162, + 195, + 215, + 4, + 47, + 247, + 172, + 133, + 39, + 209, + 27, + 53, + 1 + ] + }, + { + "witness": { + "profile": "joulespec-witness/1", + "alg": 1, + "spec_id": "b3:6a79446b181f33db7f07c6825d225934b45c974cb72f6fb16ef9402a6e0d1b75", + "obligation": "b3:6507f37527e2e4087f9bae36bf0be616a33bd604e824ff18e8af9122c48f31fa", + "artifact": "b3:05719e9abe2729462eb80c614ea69449b0ce9165010fde1b4413187be845fc1d", + "footprint": [ + "b3:d3e9847cbe5b2267d97bd6c0a55027d7e28b7684b531ed0e3562748f83bb884f" + ], + "evidence": { + "kind": "falsifiable", + "check": "tests::unproved_goal_cannot_be_sealed", + "anchor": "specification", + "counter": "b3:77ee85e30a0e2365dabef093730b6b8a8cf792949e32b9ecbbf04d7243527ccf" + }, + "energy": { + "uj": 252481436, + "provenance": "estimator" + }, + "author": [ + 129, + 57, + 119, + 14, + 168, + 125, + 23, + 95, + 86, + 163, + 84, + 102, + 195, + 76, + 126, + 204, + 203, + 141, + 138, + 145, + 180, + 238, + 55, + 162, + 93, + 246, + 15, + 91, + 143, + 201, + 179, + 148 + ] + }, + "sig": [ + 32, + 76, + 133, + 221, + 187, + 161, + 65, + 115, + 118, + 33, + 190, + 222, + 46, + 12, + 194, + 193, + 250, + 37, + 38, + 153, + 92, + 216, + 154, + 152, + 20, + 113, + 192, + 140, + 67, + 29, + 41, + 167, + 51, + 59, + 132, + 115, + 109, + 74, + 81, + 114, + 106, + 236, + 198, + 131, + 11, + 142, + 164, + 100, + 10, + 169, + 39, + 27, + 91, + 133, + 209, + 71, + 235, + 173, + 190, + 73, + 116, + 198, + 202, + 15 + ] + } +] \ No newline at end of file