open-standards/joulehook/joulehook-rs
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 173baf05c7
Some checks failed
standards workspaces build + test / aac-rs (push) Successful in 35s
standards workspaces build + test / joule-code-rs (push) Successful in 41s
standards workspaces build + test / jouleclaw-rs (push) Failing after 2m32s
standards workspaces build + test / joulecontract-rs (push) Successful in 39s
standards workspaces build + test / map-rs (push) Successful in 33s
standards workspaces build + test / mesh-rs (push) Successful in 29s
standards workspaces build + test / openpay (push) Successful in 1m43s
standards workspaces build + test / eoc-rs (push) Successful in 1m55s
standards workspaces build + test / jcp-rs (push) Successful in 1m22s
standards workspaces build + test / proof-rs (push) Successful in 2m53s
standards workspaces build + test / sandbox-rs (push) Successful in 2m15s
standards workspaces build + test / smart-byte-rs (push) Successful in 2m35s
standards workspaces build + test / arl-rs (push) Successful in 2m33s
standards workspaces build + test / joule-ui-rs (push) Successful in 2m32s
standards workspaces build + test / jouledesk-rs (push) Successful in 2m29s
standards workspaces build + test / joulehook-rs (push) Successful in 2m22s
standards workspaces build + test / sense-rs (push) Successful in 2m10s
joulehook: read the published conformance pack, and report the stale vector
`joulehook/conformance/v1/` was the one pack in the repo that nothing read --
no test, not even a generator. Its README advertises the vectors as reproducible,
so anyone building an adapter is told to check against them, while nothing checked
that the reference gate still matched them.

Adds crates/joulehook-hook/tests/conformance.rs, which reads decisions.json from
disk -- the same bytes a third party would -- and drives the real gate binary once
per (case, host), asserting the decision the pack says every conformant adapter
MUST emit. All eight pairs pass: claude-code permissionDecision, cursor
permission, windsurf exit-code-2, antigravity allow_tool, for both a granted and
an ungranted tool. Only the decision is asserted; the pack states the reason text
is not normative, so pinning it would turn a copy-edit into a CI failure.

Falsified rather than assumed: flipping the pack's `expected` for the Read case
makes the test fail with the mismatching host named, so it is bound to the pack
and not to hardcoded values. It also asserts the pair count, so a wrong pack path
fails loudly instead of silently checking nothing.

`deny-receipt.hex` is NOT asserted, and the file says why. The pack pins it at 598
bytes "byte-identical on every run"; the gate is still byte-deterministic --
repeated runs agree exactly -- but now emits 677, because the JCR-1 payload gained
a `payload_hash` field, taking the CBOR map from 15 entries to 16. Decoding both
yields the same verdict, deny_reason, steward, subject and verified, so
receipt.json's claims still hold: this is a stale vector, not a regression.
Refreshing a published signed security vector is a normative change to a public
pack, so it is left to a maintainer rather than quietly regenerated.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-15 11:36:06 -04:00
..
crates joulehook: read the published conformance pack, and report the stale vector 2026-09-15 11:36:06 -04:00
Cargo.lock chore(deps): cargo update across the workspace; eoc toolchain → 1.98.0 2026-08-26 07:39:26 -04:00
Cargo.toml msrv: raise the rust-version floor to 1.97 across the workspaces 2026-07-23 00:17:08 -04:00
INSTALL.md joulehook: the deployable meter — joulehook-proxy (OpenAI-shaped base_url proxy) 2026-07-04 20:38:32 -04:00