joulespec: applied to a standard that is not its own, which found a mis-aimed mutation #570

Merged
dcharlot merged 1 commit from joulespec/applied into main 2026-11-02 04:40:10 -05:00
9 changed files with 1236 additions and 1 deletions

View file

@ -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: <manifest>` 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

View file

@ -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:

View file

@ -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"

View file

@ -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.

Binary file not shown.

View file

@ -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
}

View file

@ -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
]
}

View file

@ -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"
]
}

View file

@ -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
]
}
]