| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 9s
standards workspaces build + test / arl-rs (arl/arl-rs, arl-rs, linux) (pull_request) Successful in 30s
standards workspaces build + test / joulespec-proofs (joulespec/joulespec-rs, joulespec-proofs, true, macos) (pull_request) Successful in 1m0s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 1m3s
standards workspaces build + test / joulehook-rs (joulehook/joulehook-rs, joulehook-rs, linux) (pull_request) Successful in 31s
standards workspaces build + test / joule-ui-rs (joule-ui/joule-ui-rs, joule-ui-rs, linux) (pull_request) Successful in 1m18s
standards workspaces build + test / pool-rs (pool/pool-rs, pool-rs, linux) (pull_request) Successful in 29s
standards workspaces build + test / jcp-rs (jcp-conformance, jcp/jcp-rs, -p jcp-energy --features nvml, jcp-rs, linux) (pull_request) Successful in 1m48s
standards workspaces build + test / proof-rs (proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 47s
standards workspaces build + test / sense-rs (sense/sense-rs, sense-rs, linux) (pull_request) Successful in 31s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m45s
standards workspaces build + test / joulespec-rs (true, joulespec/joulespec-rs, true, joulespec-rs, linux) (pull_request) Successful in 1m25s
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Successful in 4m24s
standards workspaces build + test / sandbox-rs (sandbox-conformance, sandbox/sandbox-rs, -p sandbox-tee --features amd-kds,intel-pcs, sandbox-rs, linux) (pull_request) Successful in 3m28s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 4m17s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 10m44s
standards workspaces build + test / jouleclaw-rs (-nodebug, jouleclaw/jouleclaw-rs, -p jouleclaw-energy --features rapl,nvml, jouleclaw-rs, linux-arm64, -C target-feature=+fp16) (pull_request) Successful in 4m13s
standards workspaces build + test / aac-rs (aac-conformance, aac/aac-rs, aac-rs, linux-arm64) (pull_request) Successful in 3m53s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 1m9s
standards workspaces build + test / map-rs (map-conformance, map/map-rs, map-rs, linux-arm64) (pull_request) Successful in 1m25s
standards workspaces build + test / mesh-rs (mesh/mesh-rs, -p mesh-engine-gguf -p mesh-openai --features mesh-engine-gguf/gguf,mesh-openai/server, mesh-rs, linux-arm64) (pull_request) Successful in 1m9s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 7m10s
standards workspaces build + test / openpay (openpay, openpay, linux-arm64) (pull_request) Successful in 3m48s
Two things asked for: a benchmark corpus, and a second verification method. ## The corpus The wire vectors certify that an implementation round-trips a receipt's bytes. They say nothing about whether it reached the right verdict, because they carry one scenario. `conformance/v1/evaluation/` is the other half: ten cases, each a complete set of evaluation inputs plus the verdict §3 requires, chosen so a plausible but generous implementation disagrees — a mean where a minimum is required, an unevidenced obligation skipped rather than emptying the grade, `E3` on a killed counter-artifact whose anchor is unstated, `E4` because a prover succeeded, a witness for a clause's previous wording discarded instead of flagged, a `reviewed` label taken at face value when the reviewer is the clause's own author. Each case states its direction. Most catch over-grading; one catches under-grading, and that one is load-bearing: an implementation that graded nothing at all would pass every over-grading case, so a corpus with one direction rewards a rule that refuses everything. A test asserts the shape of the set rather than trusting it was built as described. The expectations are written by hand from §3 and are never read back out of this implementation — a corpus whose expectations are whatever the code produced certifies agreement with itself. That earned its keep immediately: seven of the ten were wrong on first authoring, all the same mistake and mine rather than the evaluator's. They assumed the attestation axis came from who signed a witness, where §2.8 computes it from who authored the work; with no work declared it is absent. The fix was not to copy the observed value in, which would have buried the misunderstanding, but to declare work in every case so the axis is exercised at all. ## What a second method bought, and what it did not The quotient-bound statement abandoned in the previous commit was retried under a solver reasoning with a bitvector theory rather than bit-blasting to a propositional problem. It settled four of the statement's conditions in about eight seconds — where the default engine had shown no per-property progress in twenty-four minutes — and then spent over fifty minutes on the fifth. So the method moved the wall without removing it, and §8 now says that instead of implying a solver choice would fix it. The harness is kept as the reproducible record of a negative result, behind a `cfg` nobody sets so an ordinary run does not hang on it. A second finding from the same runs, recorded in `conformance/v1/README.md`: a wall-clock wrapper around a prover is not enough. Both abandoned runs outlived the `timeout` meant to bound them, because the prover is a driver that spawns the checker and a timeout reaches only the driver. The producer kills the process group, which is why its budget works where the shell's did not — the design was right for a reason that has now been observed twice. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
| .. | ||
| 01-a-mean-conceals-the-weakest-obligation | ||
| 02-an-unevidenced-obligation-empties-the-grade | ||
| 03-an-unwitnessed-non-goal-does-not-cap | ||
| 04-evidence-for-a-non-goal-is-a-flag | ||
| 05-an-unstated-anchor-caps-at-exercised | ||
| 06-a-declared-formalization-caps-at-exercised | ||
| 07-an-unchecked-vacuity-caps-at-exercised | ||
| 08-a-superseded-state-makes-a-witness-stale | ||
| 09-a-witness-for-a-reworded-clause-is-a-flag | ||
| 10-a-self-review-is-the-citation-again | ||
| README.md | ||
The evaluation corpus
Cases a too-generous implementation passes incorrectly.
The wire vectors in ../vectors/ certify that an
implementation round-trips a receipt's bytes. They say nothing about
whether it reaches the right verdict, because they carry one scenario.
This corpus is the other half.
Each case directory holds five files. Read the first four, evaluate, and compare against the fifth:
| File | What it is |
|---|---|
spec.json |
the signed specification |
state.json |
the artifact state the witnesses were observed at |
witnesses.json |
the signed witnesses |
work.json |
the declared work, which is what the attestation axis is computed from |
expect.json |
the verdict §3 requires, with the trap it sets |
expect.json carries its own intent and trap in prose, so a failing case
says what it was for rather than only which field differed.
Why the cases are shaped the way they are
Every case states a direction. Most are over-grading: an
implementation that reports conformance never established, which is the
failure this standard exists to stop. At least one is under-grading,
because an implementation that graded nothing at all would pass every
over-grading case — a corpus with only one direction rewards a rule that
refuses everything. A test asserts that both directions are present, that
every over-grading case's correct verdict falls short of the bar or is
blocked by a flag, and that every under-grading case's correct verdict
reaches it.
The traps are the ones that are reachable by accident rather than by carelessness:
- a mean instead of a minimum, which lets well-evidenced obligations conceal one nobody looked at;
- skipping an unevidenced obligation rather than letting its absence
empty the grade — and reporting
E0there, which would claim a citation nobody made; - treating an unwitnessed non-goal as an owed obligation with no evidence, which is the under-grading case;
- grading a witnessed non-goal's evidence, or discarding it quietly, instead of raising the flag that blocks conformance;
- awarding
E3on a killed counter-artifact alone, where the check's anchor is unstated; - awarding
E4because a prover succeeded, where the formalization is the prover's own word or its vacuity was never checked — two independent ways a proof establishes nothing about a clause; - counting a witness bound to a superseded state, which an empty footprint makes stale on any change at all;
- silently discarding a witness whose obligation address is a clause's previous wording, which is exactly how drift stops being visible;
- reading
reviewedoff the evidence label when the reviewer is the clause's own author.
Where the expected verdicts come from
They are written by hand from §3 of the specification. They are not read back out of this implementation: a corpus whose expectations are whatever the code produced would certify agreement with itself and nothing else.
That distinction earned its keep while this corpus was being written. Seven of the ten expectations were wrong on first authoring — all the same mistake, and the author's rather than the evaluator's. They assumed the attestation axis was computed from who signed a witness, when §2.8 computes it from who authored the work; with no work declared, attestation is absent. The fix was not to copy the observed value into the expectation, which would have hidden the misunderstanding, but to declare work in every case so that the axis is actually exercised.
Regenerating
JOULESPEC_GEN_EVALUATION=1 cargo test -p joulespec-core --test evaluation
That republishes the input files and the expectations as the test states them. Without the variable the test reads the published expectation back and asserts it still agrees with the test's own, so an expectation edited in one place and not the other fails rather than drifting.