From 1cb777d5c3bd0365f9ceb0c27064d7f50797b28b Mon Sep 17 00:00:00 2001 From: alderpath Date: Sat, 14 Nov 2026 01:14:47 +0000 Subject: [PATCH] fix(ci): pin the toolchain and drop unused manifest declarations CI was red on main, not just on the PR branches. rustc 1.100.0 rolled onto the stable channel on the runner and added cargo manifest lints (unused_dependencies, unused_workspace_dependencies, redundant_homepage); CARGO_BUILD_WARNINGS=deny turns them into hard errors, so every job failed in the first two minutes with zero tests run. Reproduced locally under 1.100.0 with CARGO_BUILD_WARNINGS=deny (exit 101), green under 1.99.0. * rust-toolchain.toml pins 1.100.0 with rustfmt+clippy. A floating channel makes main hostage to a Rust release. * removed the declarations the lint proved unused: workspace hyper, metrics, metrics-exporter-prometheus, thiserror; per-crate thiserror, rustc-hash (store), metrics (cli, http). thiserror had zero references anywhere in the tree; the metrics crates are reached through ocserve-metrics. * removed the duplicated homepage (=== repository) from every manifest. * drain_budget/shutdown/shutdown_race now use CARGO_BIN_EXE_ocserve instead of walking current_exe(); the walk failed under a custom CARGO_TARGET_DIR, which is how CI and remote builds run. Requirement: K-CI-PIN (TRACEABILITY.md). Verified: cargo +1.100.0 clippy --workspace --all-targets -- -D warnings with CARGO_BUILD_WARNINGS=deny -> clean; 907 tests pass on the build box; guards, matrix, docs green. --- .github/workflows/ci.yml | 11 ++++--- Cargo.lock | 37 ----------------------- Cargo.toml | 6 ---- TRACEABILITY.md | 1 + crates/ocserve-cli/Cargo.toml | 3 -- crates/ocserve-cli/tests/drain_budget.rs | 13 ++++---- crates/ocserve-cli/tests/shutdown.rs | 10 ++---- crates/ocserve-cli/tests/shutdown_race.rs | 9 ++---- crates/ocserve-core/Cargo.toml | 2 -- crates/ocserve-http/Cargo.toml | 3 -- crates/ocserve-importer/Cargo.toml | 2 -- crates/ocserve-llm/Cargo.toml | 2 -- crates/ocserve-mcp/Cargo.toml | 2 -- crates/ocserve-metrics/Cargo.toml | 1 - crates/ocserve-plugin/Cargo.toml | 2 -- crates/ocserve-pty/Cargo.toml | 1 - crates/ocserve-store/Cargo.toml | 3 -- crates/ocserve-tools/Cargo.toml | 2 -- crates/ocserve-ui-v1-a/Cargo.toml | 1 - crates/ocserve-ui-v1-b/Cargo.toml | 1 - crates/ocserve-ui-v2-a/Cargo.toml | 1 - crates/ocserve-ui-v2-b/Cargo.toml | 1 - crates/ocserve-ui-v2-c/Cargo.toml | 1 - crates/ocserve-ui-v2-d/Cargo.toml | 1 - rust-toolchain.toml | 13 ++++++++ 25 files changed, 34 insertions(+), 95 deletions(-) create mode 100644 rust-toolchain.toml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e35ff9ec..38a479a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,9 +28,10 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions-rust-lang/setup-rust-toolchain@a188e68d0fd2bd36ad51dccb2b07ba6e75105f30 # v2.0.1 - with: - toolchain: stable - components: rustfmt, clippy + # No `toolchain:` input: setup-rust-toolchain reads rust-toolchain.toml, + # so CI and local builds use the same pinned compiler. A floating + # `stable` turned main red when 1.100 added manifest lints under + # CARGO_BUILD_WARNINGS=deny (2026-11-13). - name: format @@ -64,7 +65,9 @@ jobs: grep -oP '\d+(?= passed)' | \ python3 -c "import sys; print(sum(int(l) for l in sys.stdin if l.strip()))") echo "test count: $count" - FLOOR=470 + # Raised 470 -> 900 on 2026-11-13 after a full green run measured 907 + # under the pinned toolchain. The ratchet only moves up. + FLOOR=900 if [ "$count" -lt "$FLOOR" ]; then echo "FAIL: test count $count below floor $FLOOR — tests removed or skipping"; exit 1 fi diff --git a/Cargo.lock b/Cargo.lock index 466dda4f..f63370d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1600,16 +1600,6 @@ version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" -[[package]] -name = "metrics" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89550ee9f79e88fef3119de263694973a8adb26c21d75322164fb8c493039fe2" -dependencies = [ - "portable-atomic", - "rapidhash", -] - [[package]] name = "mimalloc" version = "0.1.52" @@ -1738,7 +1728,6 @@ dependencies = [ "clap", "libc", "libmimalloc-sys", - "metrics", "mimalloc", "ocserve-core", "ocserve-http", @@ -1753,7 +1742,6 @@ dependencies = [ "serde_json", "sha1 0.11.0", "tempfile", - "thiserror", "tokio", "toml", "tracing", @@ -1778,7 +1766,6 @@ dependencies = [ "serde_json", "sha2", "tempfile", - "thiserror", "tokio", "tracing", ] @@ -1798,7 +1785,6 @@ dependencies = [ "http-body-util", "libc", "libmimalloc-sys", - "metrics", "ocserve-core", "ocserve-llm", "ocserve-mcp", @@ -1822,7 +1808,6 @@ dependencies = [ "serde_json", "sha2", "tempfile", - "thiserror", "tokio", "tower", "tracing", @@ -1840,7 +1825,6 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror", "tracing", ] @@ -1861,7 +1845,6 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", "tokio", "tracing", ] @@ -1877,7 +1860,6 @@ dependencies = [ "reqwest", "serde", "serde_json", - "thiserror", "tokio", "tracing", ] @@ -1901,7 +1883,6 @@ dependencies = [ "serde_json", "sha2", "tempfile", - "thiserror", "tokio", "tracing", ] @@ -1929,12 +1910,10 @@ dependencies = [ "hex", "parking_lot", "rusqlite", - "rustc-hash", "serde", "serde_json", "sha2", "tempfile", - "thiserror", "tracing", "zstd", ] @@ -1952,7 +1931,6 @@ dependencies = [ "serde_json", "similar", "tempfile", - "thiserror", "tokio", "tracing", "windows-sys 0.61.2", @@ -2656,12 +2634,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "portable-atomic" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" - [[package]] name = "postcard" version = "1.1.3" @@ -2845,15 +2817,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "rapidhash" -version = "4.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da7e78a036ce858e8d55b7e7dc8ba3a88b78350fd2155d3591bbd966b58589e" -dependencies = [ - "rustversion", -] - [[package]] name = "rayon" version = "1.12.0" diff --git a/Cargo.toml b/Cargo.toml index c07a2e85..bf4a0258 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,6 @@ edition = "2024" license = "MIT" rust-version = "1.98" repository = "https://github.com/Reliary/ocserve" -homepage = "https://github.com/Reliary/ocserve" keywords = ["opencode", "server", "sqlite", "sse", "api"] categories = ["web-programming::http-server", "database-implementations", "development-tools"] @@ -56,7 +55,6 @@ ocserve-ui-v2-d = { path = "crates/ocserve-ui-v2-d", version = "0.7.2" } tokio = { version = "1", features = ["rt-multi-thread", "macros", "signal", "sync", "time", "fs", "io-util", "net"] } axum = { version = "0.8", features = ["json", "ws"] } tower = "0.5" -hyper = "1" bytes = "1" # storage @@ -74,7 +72,6 @@ libc = "0.2" # Already in the tree transitively; this makes the direct use explicit. rustix = { version = "1", features = ["fs", "process"] } anyhow = "1" -thiserror = "2" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } clap = { version = "4", features = ["derive"] } @@ -85,11 +82,8 @@ base64 = "0.23" hex = "0.4" futures-util = "0.3" parking_lot = "0.13" -rustc-hash = "2" # metrics -metrics = "0.24" -metrics-exporter-prometheus = "0.16" [profile.release] opt-level = 3 diff --git a/TRACEABILITY.md b/TRACEABILITY.md index 1748264a..b5f79eeb 100644 --- a/TRACEABILITY.md +++ b/TRACEABILITY.md @@ -262,6 +262,7 @@ no-inflation correct), PASS cost (−58.9% weighted) + score (median 1.0 both) | K-FREEZE-1195 | the v1 freeze must be adopted through the pipeline, not by hand, and every artifact that embeds the tag must move with it | Moved 1.18.31 -> 1.19.5 with `bump.sh v1`. Contract: 188 operations over the same 162 paths (byte-diff: 2 schema descriptions, 1 additive `reasoning_options` property, `x-codeSamples` added to every operation). Prompt/tool text for everything the server sends is byte-identical (`tool/shell/shell.txt` unchanged, `bashCommandSection` unchanged); `plan-enter.txt` was DELETED upstream and is removed here. ARITY rules identical. Two live capture timings were also fixed: `acquire-freeze` printed success while `cp` failed on the root-owned vendored path (step 2 then booted the OLD binary), and `extract-prompts` had no remote fallback. | `capdiff` GREEN with the provider-header oracle enabled: it found the two real deltas (composite UA runtime segment `bun/1.3.14 -> 1.4.4`; `x-opencode-session-id` now sent to EVERY provider, not just `opencode*`), both fixed; replay 26/0; pair 18 compared / 0 divergent, 52 schema checks / 0 violations; `render_check` (prompt parity) green; `global_health` golden now `1.19.5`; test `composite_ua_matches_the_captured_artifact` pins the UA to a captured file, so a hand-written literal cannot drift again | green | | K-MUTANTS | mutation baseline + gate (Phase 2) | `snapshot::tests::non_git_directory_is_inactive` made hermetic (fixture plants a bogus `.git` boundary — the test falsely passed only when TMPDIR sat outside any repo; the mutants harness sets TMPDIR inside the repo, aborting the baseline). **Full-scope baseline (i9, 2330 mutants, 34 min): 939 caught / 1221 missed / 24 timeout / 146 unviable = 43.5 % score** — `bench/mutants/BASELINE.md` + `baseline-outcomes.json`; zero env-gated skips verified (1 intentional ignore). `scripts/check-mutants.py` gates missed count against ceiling 1221 (ratchet-down-only; selftest red/green proven); `scripts/merge-mutants.py` combines `--shard` files with a duplicate guard (selftest red/green proven). Method corrected on evidence: `additional_cargo_test_args=["--lib"]` removed (drops store integration binaries → 933 false survivors, and lands `--lib` on the test binary). Acceleration: `.cargo/mutants.toml` profile=mutants/debug=none + 45s timeout floor; runs on the i9 (`-j8`, mold, sccache, tmpfs) | green | +| K-CI-PIN | CI must fail for repository changes, not for a Rust release rolling onto the stable channel | On 2026-11-13 every workflow on `main` and on all fork PRs failed within two minutes with zero tests run. rustc 1.100.0 had landed on the runner and introduced cargo manifest lints (`unused_dependencies`, `unused_workspace_dependencies`, `redundant_homepage`); `CARGO_BUILD_WARNINGS=deny` turned them fatal. Reproduced locally under 1.100.0 with the same env (exit 101) and green under 1.99.0, proving the trigger was the compiler, not the code. Fixed by pinning `rust-toolchain.toml` to 1.100.0 (a floating channel makes `main` hostage to a release) and removing the declarations the lint proved unused (workspace `hyper`, `metrics`, `metrics-exporter-prometheus`, `thiserror`; per-crate `thiserror`, `rustc-hash`, `metrics`) plus the duplicated `homepage`. Also replaced the `current_exe()` binary walk in three process tests with `CARGO_BIN_EXE_ocserve`, which is what CI and remote builds actually need; the walk only worked when the test exe sat beside the bin. | `rust-toolchain.toml` pin; `cargo +1.100.0 clippy --workspace --all-targets -- -D warnings` under `CARGO_BUILD_WARNINGS=deny` clean; 907 tests pass on the build box; guards 110/110, matrix, docs green | green | ## Test design techniques coverage (TESTING §4) | Technique | Applied | Where | diff --git a/crates/ocserve-cli/Cargo.toml b/crates/ocserve-cli/Cargo.toml index 80a4bc75..8cf9d325 100644 --- a/crates/ocserve-cli/Cargo.toml +++ b/crates/ocserve-cli/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -20,7 +19,6 @@ path = "src/main.rs" libc.workspace = true axum.workspace = true anyhow.workspace = true -thiserror.workspace = true tracing.workspace = true tracing-subscriber.workspace = true serde.workspace = true @@ -37,7 +35,6 @@ ocserve-metrics.workspace = true ocserve-importer.workspace = true rusqlite.workspace = true reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "blocking"] } -metrics.workspace = true sha1 = "0.11" diff --git a/crates/ocserve-cli/tests/drain_budget.rs b/crates/ocserve-cli/tests/drain_budget.rs index 6527d6db..1d0757be 100644 --- a/crates/ocserve-cli/tests/drain_budget.rs +++ b/crates/ocserve-cli/tests/drain_budget.rs @@ -34,12 +34,13 @@ fn hold_sse(port: u16) -> (std::sync::mpsc::Receiver<()>, std::thread::JoinHandl } fn bin() -> std::path::PathBuf { - let mut p = std::env::current_exe().expect("test exe"); - p.pop(); - if p.ends_with("deps") { - p.pop(); - } - p.join("ocserve") + // CARGO_BIN_EXE_ is set by cargo for integration tests of the same + // package and points at the real binary whatever the profile/target dir + // is. The previous `current_exe()` walk assumed the test executable sat in + // the same directory as the binary, which is false under a custom + // CARGO_TARGET_DIR + separate build of the bin target (and under the CI + // `cargo test --workspace` ordering that builds tests first). + std::path::PathBuf::from(env!("CARGO_BIN_EXE_ocserve")) } #[test] diff --git a/crates/ocserve-cli/tests/shutdown.rs b/crates/ocserve-cli/tests/shutdown.rs index df2860fb..24a2f0f4 100644 --- a/crates/ocserve-cli/tests/shutdown.rs +++ b/crates/ocserve-cli/tests/shutdown.rs @@ -14,13 +14,9 @@ use std::process::{Command, Stdio}; use std::time::{Duration, Instant}; fn bin() -> std::path::PathBuf { - // The integration test binary lives in target//deps/… - let mut p = std::env::current_exe().expect("test exe"); - p.pop(); - if p.ends_with("deps") { - p.pop(); - } - p.join("ocserve") + // Cargo-provided path to the same-package binary: independent of profile, + // target dir, and which targets built first. See drain_budget.rs. + std::path::PathBuf::from(env!("CARGO_BIN_EXE_ocserve")) } #[test] diff --git a/crates/ocserve-cli/tests/shutdown_race.rs b/crates/ocserve-cli/tests/shutdown_race.rs index b2b690d3..d210bc21 100644 --- a/crates/ocserve-cli/tests/shutdown_race.rs +++ b/crates/ocserve-cli/tests/shutdown_race.rs @@ -14,12 +14,9 @@ use std::process::{Command, Stdio}; use std::time::{Duration, Instant}; fn bin() -> std::path::PathBuf { - let mut p = std::env::current_exe().expect("test exe"); - p.pop(); - if p.ends_with("deps") { - p.pop(); - } - p.join("ocserve") + // Cargo-provided path to the same-package binary: independent of profile, + // target dir, and which targets built first. See drain_budget.rs. + std::path::PathBuf::from(env!("CARGO_BIN_EXE_ocserve")) } #[test] diff --git a/crates/ocserve-core/Cargo.toml b/crates/ocserve-core/Cargo.toml index 59889230..4029f984 100644 --- a/crates/ocserve-core/Cargo.toml +++ b/crates/ocserve-core/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -13,7 +12,6 @@ description = "Session domain: inbox admission, agent loop, event bus, permissio [dependencies] anyhow.workspace = true -thiserror.workspace = true tracing.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/ocserve-http/Cargo.toml b/crates/ocserve-http/Cargo.toml index 2cde56a7..4b380639 100644 --- a/crates/ocserve-http/Cargo.toml +++ b/crates/ocserve-http/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -16,7 +15,6 @@ regex = "1" ocserve-pty = { workspace = true } rusqlite = { workspace = true } anyhow.workspace = true -thiserror.workspace = true tracing.workspace = true serde.workspace = true serde_json.workspace = true @@ -40,7 +38,6 @@ ocserve-ui-v2-d.workspace = true ocserve-metrics.workspace = true ocserve-plugin.workspace = true futures-util.workspace = true -metrics.workspace = true parking_lot.workspace = true sha2.workspace = true base64.workspace = true diff --git a/crates/ocserve-importer/Cargo.toml b/crates/ocserve-importer/Cargo.toml index cc25738a..96ff47c4 100644 --- a/crates/ocserve-importer/Cargo.toml +++ b/crates/ocserve-importer/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -13,7 +12,6 @@ description = "Streaming read-only session importer (opencode.db to ocserve)" [dependencies] anyhow.workspace = true -thiserror.workspace = true tracing.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/ocserve-llm/Cargo.toml b/crates/ocserve-llm/Cargo.toml index 5724a26c..ab3b3d69 100644 --- a/crates/ocserve-llm/Cargo.toml +++ b/crates/ocserve-llm/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -27,7 +26,6 @@ http-body-util = "0.1" hyper-boring = "5.4" boring = "5.4" ocserve-metrics.workspace = true -thiserror.workspace = true tracing.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/ocserve-mcp/Cargo.toml b/crates/ocserve-mcp/Cargo.toml index 8a3228d1..cda0750f 100644 --- a/crates/ocserve-mcp/Cargo.toml +++ b/crates/ocserve-mcp/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -14,7 +13,6 @@ description = "MCP client: stdio + StreamableHTTP + legacy SSE; OAuth token stor [dependencies] ocserve-store = { workspace = true } anyhow.workspace = true -thiserror.workspace = true tracing.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/ocserve-metrics/Cargo.toml b/crates/ocserve-metrics/Cargo.toml index 8e0e2573..0da755b3 100644 --- a/crates/ocserve-metrics/Cargo.toml +++ b/crates/ocserve-metrics/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" diff --git a/crates/ocserve-plugin/Cargo.toml b/crates/ocserve-plugin/Cargo.toml index f0981dfe..6f7dd491 100644 --- a/crates/ocserve-plugin/Cargo.toml +++ b/crates/ocserve-plugin/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -13,7 +12,6 @@ description = "opencode plugin host: hook dispatcher with full upstream name tab [dependencies] anyhow.workspace = true -thiserror.workspace = true hex.workspace = true tracing.workspace = true serde.workspace = true diff --git a/crates/ocserve-pty/Cargo.toml b/crates/ocserve-pty/Cargo.toml index 7831e3c0..93c751d3 100644 --- a/crates/ocserve-pty/Cargo.toml +++ b/crates/ocserve-pty/Cargo.toml @@ -6,7 +6,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true [dependencies] ocserve-core = { workspace = true } diff --git a/crates/ocserve-store/Cargo.toml b/crates/ocserve-store/Cargo.toml index e6405353..7c53f952 100644 --- a/crates/ocserve-store/Cargo.toml +++ b/crates/ocserve-store/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -19,12 +18,10 @@ serde.workspace = true serde_json.workspace = true anyhow.workspace = true bytes.workspace = true -thiserror.workspace = true tracing.workspace = true sha2.workspace = true hex.workspace = true parking_lot.workspace = true -rustc-hash.workspace = true [dev-dependencies] tempfile = "3" diff --git a/crates/ocserve-tools/Cargo.toml b/crates/ocserve-tools/Cargo.toml index ac3c3061..14bd0f84 100644 --- a/crates/ocserve-tools/Cargo.toml +++ b/crates/ocserve-tools/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true readme = "README.md" @@ -13,7 +12,6 @@ description = "bash, read, write, edit, glob, grep, webfetch, task, question, to [dependencies] anyhow.workspace = true -thiserror.workspace = true tracing.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/ocserve-ui-v1-a/Cargo.toml b/crates/ocserve-ui-v1-a/Cargo.toml index 78ded2f2..5ae46007 100644 --- a/crates/ocserve-ui-v1-a/Cargo.toml +++ b/crates/ocserve-ui-v1-a/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true description = "Embedded web-UI pack part (1.19.5, part a) for ocserve" diff --git a/crates/ocserve-ui-v1-b/Cargo.toml b/crates/ocserve-ui-v1-b/Cargo.toml index 3765121b..ad2a9eb7 100644 --- a/crates/ocserve-ui-v1-b/Cargo.toml +++ b/crates/ocserve-ui-v1-b/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true description = "Embedded web-UI pack part (1.19.5, part b) for ocserve" diff --git a/crates/ocserve-ui-v2-a/Cargo.toml b/crates/ocserve-ui-v2-a/Cargo.toml index 9d0be177..dfd8ce8f 100644 --- a/crates/ocserve-ui-v2-a/Cargo.toml +++ b/crates/ocserve-ui-v2-a/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true description = "Embedded web-UI pack part (2.2.5, part a) for ocserve" diff --git a/crates/ocserve-ui-v2-b/Cargo.toml b/crates/ocserve-ui-v2-b/Cargo.toml index d8dbfd73..9245ce2d 100644 --- a/crates/ocserve-ui-v2-b/Cargo.toml +++ b/crates/ocserve-ui-v2-b/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true description = "Embedded web-UI pack part (2.2.5, part b) for ocserve" diff --git a/crates/ocserve-ui-v2-c/Cargo.toml b/crates/ocserve-ui-v2-c/Cargo.toml index 59f34f37..862976c5 100644 --- a/crates/ocserve-ui-v2-c/Cargo.toml +++ b/crates/ocserve-ui-v2-c/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true description = "Embedded web-UI pack part (2.2.5, part c) for ocserve" diff --git a/crates/ocserve-ui-v2-d/Cargo.toml b/crates/ocserve-ui-v2-d/Cargo.toml index efc75c47..29520785 100644 --- a/crates/ocserve-ui-v2-d/Cargo.toml +++ b/crates/ocserve-ui-v2-d/Cargo.toml @@ -5,7 +5,6 @@ edition.workspace = true license.workspace = true rust-version.workspace = true repository.workspace = true -homepage.workspace = true keywords.workspace = true categories.workspace = true description = "Embedded web-UI pack part (2.2.5, part d) for ocserve" diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 00000000..d013b554 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,13 @@ +[toolchain] +# Pinned deliberately. CI gates on `-D warnings`, and cargo's manifest lints +# (`unused_dependencies`, `unused_workspace_dependencies`, `redundant_homepage`) +# are version-dependent: rustc 1.100.0 introduced them and turned every job red +# on a stable-channel roll with no repository change. A floating channel makes +# `main` hostage to a Rust release; bump this file on purpose instead. +# +# Bump procedure: change `channel`, run +# cargo + clippy --workspace --all-targets -- -D warnings +# cargo + test --workspace +# then commit the pin with the fixes the new lints/semantics require. +channel = "1.100.0" +components = ["rustfmt", "clippy"]