The field converged on spec-driven development with two-stage review (Superpowers, spec-kit, Amplifier), but every artifact in that consensus is prompt-enforced testimony. These three crates make the methodology checkable, in the family's house style (canonical det-CBOR, content addresses, Ed25519 over id ‖ context preimages): - joule-code-spec: the Spec artifact — intent + individually addressable clauses (requirements, constraints, and first-class NON-GOALS), signed and content-addressed, revisions chained by parent. A signed Citation binds a coding op to the clauses it claims to implement (the op stays wire-identical; traceability is additive, like the receipt). coverage() is the deterministic audit: open obligations, cited non-goals (a flag, not a pass), and invalid citations — recorded, never silently dropped. Completes the chain spec → clause → op → receipt. - joule-code-review: two-stage review (spec-compliance, then quality) as signed rounds. Separation of duties is ENFORCED, not advised: a review whose reviewer key equals the op author's key fails verification — self-approval is structurally void. RequestChanges without findings is malformed; approval() audits the latest verified round per stage, with rejected rounds kept on the record (the cost of convergence is part of the artifact). - joulecontract-proof: vericoding for the contract — each obligation with an explicit Formalization (statement + grounding tag; this crate NEVER invents one) becomes a ProofGoal citing the contract's content address and runs the JouleProof cascade. Per-obligation ledger: Proved (full CascadeResult, cache flywheel included) / Unproved (attempts + joules on record) / Unformalized (demoted, never dropped). discharged() is true only when every obligation proved — a contract is not "mostly" discharged. 16 new tests across the three crates; clippy clean. Co-Authored-By: Claude Opus 4.8 <[email protected]>
37 lines
1 KiB
TOML
37 lines
1 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/joulecontract-schema",
|
|
"crates/joulecontract-receipt",
|
|
"crates/joulecontract-seal",
|
|
"crates/joulecontract-amend",
|
|
"crates/joulecontract-wire",
|
|
"crates/joulecontract-conformance",
|
|
"crates/joulecontract-proof",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.6.0"
|
|
edition = "2021"
|
|
license = "Apache-2.0"
|
|
repository = "https://github.com/Transaction-Science/open-standards"
|
|
rust-version = "1.85"
|
|
|
|
[workspace.dependencies]
|
|
joulecontract-schema = { path = "crates/joulecontract-schema" }
|
|
joulecontract-receipt = { path = "crates/joulecontract-receipt" }
|
|
joulecontract-seal = { path = "crates/joulecontract-seal" }
|
|
joulecontract-amend = { path = "crates/joulecontract-amend" }
|
|
joulecontract-wire = { path = "crates/joulecontract-wire" }
|
|
|
|
sha2 = "0.10"
|
|
base64 = "0.22"
|
|
ed25519-dalek = { version = "2", features = ["rand_core"] }
|
|
rand = "0.8"
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
hex = "0.4"
|
|
thiserror = "2"
|
|
|
|
[workspace.lints.clippy]
|
|
all = "warn"
|