From 39bcf2b3b8f07d05c599f9c11d1fda47485c9b50 Mon Sep 17 00:00:00 2001 From: Tom Wright Date: Tue, 20 Oct 2026 18:40:42 +0100 Subject: [PATCH] Build Rust through Oxide Rust selectors use oxide (Cargo with managed, budgeted build storage off the laptop SSD); rust:check:cargo, rust:clippy:cargo and rust:test:cargo are the plain-Cargo fallback. AGENTS.md gains the oxide init block and points agents at oxide. Templates and consumer instructions unchanged. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 23 ++++++++++++++++++----- effigy.toml | 20 +++++++++++++------- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 065be0fc..536a75e5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -69,8 +69,10 @@ covers how to route by job. What is specific to Underlay: there, so its warnings are not a fresh regression signal. - Northstar AGENTS reviews use `effigy qa:docs:agent-defaults` here. This repo does not ship `check:agent-instructions`. -- Fall back to raw `cargo`, `bun`, or `vitest` only when the needed operation is - not represented in `effigy.toml`. +- Fall back to raw `oxide`, `bun`, or `vitest` only when the needed operation is + not represented in `effigy.toml`. Rust goes through `oxide` (Cargo with + managed build storage), not `cargo`; `rust:check:cargo`, `rust:clippy:cargo` + and `rust:test:cargo` are the plain-Cargo fallback if `oxide` misbehaves. - First-time local bring-up from outside this repo: `effigy bootstrap git@github.com:inflatable-cookie/underlay.git` @@ -81,11 +83,11 @@ for the change and run each required check once; do not repeat a passing run. ```bash effigy health # cheap baseline -effigy rust:check # cargo check --workspace --all-features +effigy rust:check # oxide check --workspace --all-features effigy rust:clippy # denies warnings effigy rust:test # filter {args} to the touched crate/package -effigy fmt:rust:check # cargo fmt --all --check; read-only -effigy fmt:rust # cargo fmt --all; mutates the workspace +effigy fmt:rust:check # oxide fmt --all --check; read-only +effigy fmt:rust # oxide fmt --all; mutates the workspace effigy fmt:ts -- ts/src/client/format.ts # format the named TypeScript files effigy fmt:ts:check -- ts/src/client/format.ts # read-only formatting check effigy test:unit # vitest, filter {args} to the touched code @@ -168,3 +170,14 @@ Reference docs: - Graph workflows: `docs/guides/076-code-graph-and-agent-workflows.md` - JSON contracts: `docs/guides/017-json-output-contracts.md` + + +## Rust commands: use `oxide` + +- Write `oxide` wherever you would write `cargo`: `oxide check`, `oxide test`, `oxide run -- `, `oxide add `. +- Profiles: `quick` (default), `--profile debug` for a debugger, `--release`. Oxide places build output, so it refuses `--target-dir`. +- A `waiting for …` line means another build holds a slot; let it wait. `oxide status` shows the pool, slots and waits. +- Use `oxide clean`, not `cargo clean`. + +Managed by `oxide init`; edits between these markers are replaced. + diff --git a/effigy.toml b/effigy.toml index 265bed87..56722465 100644 --- a/effigy.toml +++ b/effigy.toml @@ -34,7 +34,7 @@ setup = ["bootstrap:deps"] [tasks] "bootstrap:deps" = [ "bun install", - "cargo fetch", + "oxide fetch", ] check = "cd {repo} && bun x svelte-check --tsconfig ./ts/tsconfig.json" @@ -47,12 +47,18 @@ check = "cd {repo} && bun x svelte-check --tsconfig ./ts/tsconfig.json" "check:workspace-shape" = "cd {repo} && bun x vitest run ts/tests/tools/workspace-shape.test.ts ts/tests/tools/merge-pr-closeout-cleanup.test.ts" "check:env-authority" = "cd {repo} && bun x vitest run ts/tests/tools/env-authority.test.ts" "check:consumer-conformance-fixtures" = "cd {repo} && bash scripts/test-consumer-conformance-fixtures.sh" -"rust:build" = "cd {repo} && cargo build --workspace" -"rust:check" = "cd {repo} && cargo check --workspace --all-features" -"rust:clippy" = "cd {repo} && cargo clippy --workspace --all-targets -- -D warnings" -"rust:test" = "cd {repo} && cargo test --workspace --all-features" -"fmt:rust" = "cd {repo} && cargo fmt --all" -"fmt:rust:check" = "cd {repo} && cargo fmt --all --check" +# Rust goes through Oxide (Cargo with managed, budgeted build storage off the +# laptop SSD). The `:cargo` selectors are the plain-Cargo fallback if Oxide +# misbehaves; they write to the checkout's `target/`. +"rust:build" = "cd {repo} && oxide build --workspace" +"rust:check" = "cd {repo} && oxide check --workspace --all-features" +"rust:clippy" = "cd {repo} && oxide clippy --workspace --all-targets -- -D warnings" +"rust:test" = "cd {repo} && oxide test --workspace --all-features" +"rust:check:cargo" = "cd {repo} && cargo check --workspace --all-features" +"rust:clippy:cargo" = "cd {repo} && cargo clippy --workspace --all-targets -- -D warnings" +"rust:test:cargo" = "cd {repo} && cargo test --workspace --all-features" +"fmt:rust" = "cd {repo} && oxide fmt --all" +"fmt:rust:check" = "cd {repo} && oxide fmt --all --check" "fmt:ts" = "cd {repo} && ./node_modules/.bin/prettier --write {args}" "fmt:ts:check" = "cd {repo} && ./node_modules/.bin/prettier --check {args}" "test:unit" = "cd {repo} && bun x vitest run {args}"