| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 9s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
jouleclaw fabrics / cuda (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 17s
jouleclaw fabrics / vulkan (linux, RTX 4050 + Vulkan loader) (pull_request) Successful in 17s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 4m9s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 5m46s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 39s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Failing after 10m26s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Failing after 10m44s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 9m33s
standards workspaces build + test / eoc-rs (eoc/eoc-rs, -p eoc-meter --features cuda, eoc-rs, linux) (pull_request) Successful in 3m13s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 3m37s
jouleclaw fabrics / metal (macOS, Apple GPU) (pull_request) Successful in 1m51s
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 2m5s
standards workspaces build + test / smart-byte-rs (smart-byte/smart-byte-rs, smart-byte-rs, linux) (pull_request) Successful in 4m10s
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 7m43s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 7m49s
standards workspaces build + test / openpay (openpay, openpay, linux-arm64) (pull_request) Successful in 5m48s
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (jouledesk/jouledesk-rs, jouledesk-rs, macos) (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
The advisory gate from #443 found something on its first real run, two days after landing: RUSTSEC-2026-0385 and -0387, both published 2026-10-23, neither of which existed when the sweep was done. That is the gate doing the job it was added for, so this is the answer rather than a new allowance. ctutils 0.4.2/0.4.3 -> 0.4.4 RUSTSEC-2026-0385, non-constant-time mask generation and `u128` comparisons. Reaches openpay's wallet crates through digest -> hmac/hkdf, so it sits under HMAC on payment paths. Fixed in four lockfiles. crypto-bigint 0.7.3 -> 0.7.6 RUSTSEC-2026-0387, secret-dependent branches in subtraction, zero counting, division and Montgomery multiplication — operations whose whole purpose is to be constant-time. The 0.5.5 line of crypto-bigint cannot follow: elliptic-curve 0.13 pins it, so reaching >=0.7.6 means moving the p256/elliptic-curve stack across openpay, sandbox, wai and jouleclaw. That is an upgrade, not a bump. It is allowed with that reason recorded, on paths that sign and derive keys, so it reads as debt. Writing that allowance exposed a weakness in the check itself: ALLOW was keyed by advisory id alone, so an entry excusing the stuck 0.5.5 line would have gone on excusing the advisory if a patched 0.7.x copy later regressed to an unpatched release — the same shape as sealing by name instead of by digest. An entry may now pin the exact crate/version pairs it covers: "RUSTSEC-...": {"why": "...", "only": ("crypto-bigint 0.5.5",)} Any other version of that crate fails, and a named pair that disappears makes the entry stale, so the pin cannot keep describing a tree that moved. The version-blind string form is kept for reasons that genuinely do not depend on the version, such as a call we never make, and the two forms are documented against each other. The self-test now builds its documents by importing the check's real ALLOW rather than scraping it with grep, so the two cannot drift, and covers the two new failure modes: a version-pinned allowance offered a version it does not name, and one whose named pair is gone. Also moves off every yanked dependency, each a patch bump: chacha20 0.10.0/0.10.1 -> 0.10.2 (a cipher, in six lockfiles), der 0.8.0 -> 0.8.2, spin 0.9.8 -> 0.9.9 and 0.10.0 -> 0.10.1, iroh-blobs 0.101.0 -> 0.101.1. A yank is the author withdrawing a release; none of these needed to stay on one. No yanked dependency remains anywhere in the tree. All 47 lockfiles current; the six affected workspaces check clean and `mls_keying` passes. Co-Authored-By: Claude Opus 5 <[email protected]> |
||
| .. | ||
| conformance/v1 | ||
| jouledesk-rs | ||
| LICENSE | ||
| LICENSE-SPEC | ||
| README.md | ||
| SPEC.md | ||
Joule Desk — The Open, Energy-Accounted Agent Teammate
The agent-teammate shape — a persistent principal you tag in a shared channel to delegate work under scoped access — is the right shape. Joule Desk is the open standard for it, with the three things that shape needs and a closed product cannot give you:
Authority that is a signed, enforced grant — not an admin setting. Work that is energy-metered and attested — not merely reported. And a shared, signed ledger the whole channel can verify — not just watch.
You add @joule to a channel; an admin issues it a grant chain (the tools and data
it may touch, and a joule budget). Any member tags it to delegate a task; it decides
every action against those grants outside the model, runs the work in an attested
sandbox, meters the energy, and seals every decision and completed unit to a ledger
anyone can verify — which principal did what, under which capability, at what cost.
Joule Desk is the collaboration/teammate binding of Joule Table
(jt.transaction.science); its sibling binding Joule Hook covers coding
editors — and Joule Desk's own editor class is Joule Hook. It does not reinvent — it
composes the sibling standards: JCP (identity, grants, the shared channel,
orchestration), jcp-efficiency (the energy receipt), Sandbox (attested
execution), and Joule Hook (when the teammate works in a coding editor). It is one of
the Transaction Science open standards.
- Licence: Apache-2.0 for reference code (
LICENSE); CC-BY-4.0 for the specification text (LICENSE-SPEC). - Status: v0.1.0 draft. Specification published (
SPEC.md); reference workspacejouledesk-rs/ships the teammate loop (Teammate+Skilloverjcp-orchestrate+jcp-efficiency): grant a skill → tag it → authorise outside the model → seal to a per-receipt-verifiable ledger, withefficiency/1energy accounting (energy_summary→ joules per completed unit, charging waste).
What Joule Desk adds over a closed teammate
| Property | Closed teammate | Joule Desk |
|---|---|---|
| Authority | admin config, trusted | a signed grant, decided outside the model, enforced |
| Work integrity | reported | attested (Sandbox) |
| Energy | none | efficiency/1 — µJ + cost per completed unit + waste |
| Audit | visible | verifiable — a signed ledger anyone can check |
| Budget | a quota | a debited, settle-able joule budget |
| Portability | one product | any surface (chat / forge / editor / api), one standard |
Conformance profiles (surfaces)
chat (team chat + mentions) · forge (git issues/PRs) · editor (a coding editor via
JouleHook) · api (a service). See SPEC.md §8.
The reference jouledesk-bind binary targets real discrete-message services —
Slack, GitHub, GitLab, Discord, Matrix, and a neutral shape — each a
thin parse+render pair over one event→tag→reply transform:
echo '{"comment":{"user":{"login":"alice"},"body":"@joule summarize the thread"}}' \
| jouledesk-bind --surface github
# → {"body":"✅ **@joule** completed it, @alice — decision sealed. _ledger: 1 decisions, all verified…_"}
And a real-time (media) binding class (room, SPEC.md §8.1) for when
@joule joins a live voice/video meeting — Zoom, Teams, Meet, or a LiveKit/WebRTC
room. The loop is four seams — join under a signed grant, gate each turn outside
the model, meter each model call at the model-call boundary, seal one
efficiency/1 per session anchored to the room. RealtimeSession (jouledesk-rs) is the
reference (target: LiveKit Agents); its meter reuses the same model-call proxy that
meters a text session, so the joule ceiling holds whether @joule is typing or talking.
examples/room runs a live call — turns gated outside the model, metered at the boundary,
and sealed into one verifiable session receipt.
What's here
jouledesk/
├── SPEC.md — the normative standard (§1–§10)
├── README.md — this file
├── jouledesk-rs/ — ✅ reference implementation: the teammate loop (Teammate + Skill +
│ parse_mention/tag_mention for the chat/forge binding, §8) over
│ jcp-orchestrate. `examples/channel` runs a multiplayer channel;
│ `examples/vector` regenerates the conformance vector.
└── conformance/v1/ — ✅ a byte-deterministic sealed decision receipt (summarize-allow.hex)
+ its verified-decode target (receipt.json)
Transaction Science is the steward, not the proprietor: the wire and the right to fork are public.