open-standards/joule-code/joule-code-rs/Cargo.toml
Transaction Science 0f074530f4 lockstep-quic: distributed BFT consensus over the real-QUIC transport
Graduates the consensus layer from the in-process LockstepCluster simulation to
a genuinely distributed node that decides from messages it receives over QUIC.

- joule-code-collab: add RoundNode — a single node's view of one lockstep BFT
  round (validate, vote, tally, commit), holding only its own state. Two honest
  nodes that received the same proposal set and per-node vote sets compute a
  byte-identical log, with no leader, because validation is deterministic and
  commits apply in op_id order. Unit test drives independent node states with a
  Byzantine node withholding votes: a non-member's op is refused, the valid ops
  commit at 2f+1, and all honest logs are byte-identical.
- joule-moq: add generate_self_signed_der + QuicEndpoint::server_from_der /
  client_from_der so a transport consumer can carry the shared cert as raw DER
  without depending on rustls types.
- lockstep-quic (new crate): a node binary that derives a deterministic signed
  membership from indices, forms a QUIC mesh over joule-moq, exchanges signed
  proposals and vote sets with round barriers, and commits via RoundNode — then
  prints the agreed-log hash.

Live-verified: loopback n=4 (f=1, threshold 3) — four independent processes
commit a byte-identical log (same blake3 hash); and cross-machine n=2 over real
QUIC between two Macs — both commit the same log. The full n=4 cross-machine
mesh is blocked by an environment-specific outbound-dial issue on two of the
hosts (firewall ruled out — disabled there; the same binary succeeds loopback-n4
and cross-machine-n2), left for follow-up; the consensus and transport code are
not implicated.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
(cherry picked from commit a083120a0f)
2026-06-27 07:12:43 -04:00

48 lines
1.4 KiB
TOML

[workspace]
resolver = "2"
members = [
"crates/joule-code-schema",
"crates/joule-code-cargo",
"crates/joule-code-receipt",
"crates/joule-code-cascade",
"crates/joule-code-collab",
"crates/joule-code-conformance",
"crates/joule-code-jcp",
"crates/joule-code-joulecontract",
"crates/joule-code-spec",
"crates/joule-code-review",
"crates/joule-code-remediate",
"crates/joule-code-release",
"crates/joule-code-reviewer",
"crates/joule-code-identity",
"crates/jwp",
"crates/joule-moq",
"crates/lockstep-quic",
]
[workspace.package]
version = "0.2.0"
edition = "2021"
license = "Apache-2.0"
repository = "https://github.com/transaction-science/open-standards"
rust-version = "1.85"
[workspace.dependencies]
joule-code-schema = { path = "crates/joule-code-schema" }
joule-code-spec = { path = "crates/joule-code-spec" }
joule-code-review = { path = "crates/joule-code-review" }
joule-code-release = { path = "crates/joule-code-release" }
joule-code-reviewer = { path = "crates/joule-code-reviewer" }
joule-code-identity = { path = "crates/joule-code-identity" }
joule-code-cargo = { path = "crates/joule-code-cargo" }
joule-code-receipt = { path = "crates/joule-code-receipt" }
joule-code-cascade = { path = "crates/joule-code-cascade" }
blake3 = "1"
ed25519-dalek = "2"
ciborium = "0.2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
base64 = "0.22"
hex = "0.4"
thiserror = "2"