Four substrate primitives closing the 2026 conformance gaps the
SOTA review surfaced. Each is the highest-leverage canonical
standard in its dimension — without these, JouleClaw runs don't
surface in the observability + audit ecosystem the rest of the
industry has converged on.
WAVE-59 — jouleclaw-jcs
RFC 8785 JSON Canonicalization Scheme. Pure-Rust encoder
(numbers per ECMA-262 ToString, strings with proper control-char
escaping, object keys sorted by UTF-16 code units, no
whitespace, UTF-8 output) + BLAKE3 content hash. Adds a JSON
track alongside JCR-1's CBOR track: callers choose CBOR +
COSE_Sign1 for binary-efficient interop, or JCS for JSON-native
ecosystems (web tooling, OTel exporters, transparency-log APIs).
Matches the 2026 convergence — Sello (Notarized Agents),
Traceseal, AI Agent Passport, OrgKernel all use Ed25519 + JCS or
similar canonical-JSON primitives. 21 tests pass including
RFC 8785 Appendix B vectors.
WAVE-60 — jouleclaw-otel-genai
OpenTelemetry GenAI semantic conventions — typed gen_ai.*
attribute namespace (operation, system, request.model,
response.model, usage.input_tokens, usage.output_tokens,
temperature, top_p, max_tokens, tool.name, finish_reasons) +
jouleclaw.* substrate extensions under a separate namespace so
they don't collide with the spec (tier, joules_uj,
energy_provenance, receipt.schema, receipt.content_hash,
oracle.verdict, cascade.depth, cache.hit). The 2026 default
substrate for LLM observability — by aligning to gen_ai.*,
JouleClaw runs surface in every OTel-compatible backend
(Phoenix, Langfuse, Datadog, Honeycomb) without per-vendor
adapters. to_otel_attrs() emits a flat (key, json_value) list
ready for span.set_attribute(). 11 tests pass.
WAVE-61 — jouleclaw-openinference
OpenInference (Arize) attribute mapping. The OTel-aligned
SUPERSET that adds AI-specific attributes the bare gen_ai.*
spec doesn't cover: retrieval operations, agent reasoning
steps, eval results, tool invocations. SpanAttrs carries an
openinference.span.kind (CHAIN / LLM / RETRIEVER / AGENT / TOOL
/ EMBEDDING / EVALUATOR / RERANKER), input/output value+mime,
the GenAI OperationSpan, retrieved documents (mapped to
retrieval.documents.{i}.document.*), an EvaluatorResult mapped
from JouleClaw Oracle verdicts to evaluator.label / .score /
.explanation, and ToolInvocation mapped to tool.* attrs.
JouleClaw runs surface in Arize Phoenix, Langfuse, OpenLIT.
11 tests pass.
WAVE-62 — jouleclaw-transparency-log
Merkle transparency log — append-only log of receipt content
hashes with RFC 6962-style Merkle tree, inclusion proofs, and
consistency proofs between tree states. BLAKE3 as the hash
function (JouleClaw-native) with RFC 6962 leaf / internal-node
domain separators (0x00 / 0x01) preserved so a BLAKE3-shimmed
CT verifier can use the same proof shape. Tree operates over
unbalanced sizes correctly (largest-power-of-2 split per
RFC 6962 §2; tested for unbalanced trees of 3, 5, etc. with
inclusion proofs for every leaf position). InclusionProof and
ConsistencyProof types are serializable; TreeHead carries the
public commitment. The auditor-grade primitive Sello (Notarized
Agents, arxiv 2606.04193) named as the missing tier — any
party proves a receipt was included without trusting the log
operator. 17 tests pass.
Composition: a transparency log of JCR-1 receipt content hashes
+ JCS canonical encoding of the receipt body + Ed25519 signed
STH + an Arize-Phoenix-rendered span with gen_ai.* attrs and
the receipt.content_hash carried in jouleclaw.* extensions = a
fully auditable JouleClaw run that interops with every major
2026 observability tool.
Across the four crates: 60 new tests, all green. cargo check
--workspace --all-targets clean.
Co-Authored-By: Claude Opus 4.7 <[email protected]>