diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..d7af31b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + +permissions: + contents: read + +jobs: + test: + name: cargo test (workspace) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@1.88.0 + with: + components: rustfmt, clippy + - uses: Swatinem/rust-cache@v2 + - name: Format check + run: cargo fmt --all -- --check + - name: Clippy + run: cargo clippy --locked --workspace --all-targets -- -D warnings + - name: Tests + run: cargo test --locked --workspace diff --git a/Cargo.toml b/Cargo.toml index 3696a88..9dee78e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ members = ["crates/coven-threads-core"] [workspace.package] version = "0.2.0" edition = "2021" -rust-version = "1.75" +rust-version = "1.88" license = "MIT" authors = ["Valentina Alexander "] repository = "https://github.com/OpenCoven/coven-threads" diff --git a/crates/coven-threads-core/src/audit.rs b/crates/coven-threads-core/src/audit.rs index 82b9dcc..a9572d8 100644 --- a/crates/coven-threads-core/src/audit.rs +++ b/crates/coven-threads-core/src/audit.rs @@ -634,7 +634,7 @@ fn validate_proposal_approval_detail( || detail .rationale .as_deref() - .map_or(true, |rationale| rationale.trim().is_empty()) + .is_none_or(|rationale| rationale.trim().is_empty()) { return Err("human_required approval requires an approver and rationale".into()); } diff --git a/crates/coven-threads-core/src/identity_invariants.rs b/crates/coven-threads-core/src/identity_invariants.rs index 6af8e0e..f99d888 100644 --- a/crates/coven-threads-core/src/identity_invariants.rs +++ b/crates/coven-threads-core/src/identity_invariants.rs @@ -241,8 +241,7 @@ impl IdentityInvariantSet { for mandatory in [IdentityFact::Name, IdentityFact::Person] { if !seen.contains(&mandatory) { return Err(format!( - "missing mandatory {:?} identity invariant declaration", - mandatory + "missing mandatory {mandatory:?} identity invariant declaration" )); } } diff --git a/docs/STATUS-2026-07-15.md b/docs/STATUS-2026-07-15.md index edbe205..3e04a1a 100644 --- a/docs/STATUS-2026-07-15.md +++ b/docs/STATUS-2026-07-15.md @@ -68,7 +68,7 @@ Dependency spine: Phase 2 epic (986.14) was blocked by Phase 1 work and permissi ## 5. Phase 1 + Phase 2 crate side — landed -- Root `Cargo.toml` — workspace (resolver 2, edition 2021, MSRV 1.75; deps: serde, serde_json, thiserror, uuid, blake3, time; `unsafe_code = "forbid"`, `missing_docs = "warn"`). +- Root `Cargo.toml` — workspace (resolver 2, edition 2021, MSRV 1.88; deps: serde, serde_json, thiserror, uuid, blake3, time; `unsafe_code = "forbid"`, `missing_docs = "warn"`). - `crates/coven-threads-core/` (`86550d8`) — `ids`, `strand`, `thread`, `channel`, `fray`, `pattern`, `weave`, `manifest`, `validate` (§5 receiver), plus `tests/rfc0001_s5_conformance.rs` (465 lines). - Phase 2 crate side (`5e68957`) — `audit.rs` (`ward.audit` contract, 285 lines) + `staging.rs` (DegradeToProposal records, 206 lines).