From 9672cb5e53864369cf93c62d94d56ea89caf4c6c Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Sat, 26 Sep 2026 01:49:21 -0700 Subject: [PATCH] AGENTS.md, CLAUDE.md, dependencies: the shared crate is bxcore Co-Authored-By: Claude Opus 5.5 (1M context) --- AGENTS.md | 4 ++-- CLAUDE.md | 7 ++++--- docs/dependencies.md | 10 +++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 03a2935..0562b4d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,8 +38,8 @@ Unix sockets. You are implementing it one task at a time. - No dependency that the task file does not name. All external dependencies are declared in the root `Cargo.toml` under `[workspace.dependencies]`, used with `name.workspace = true`, and have a row in `docs/dependencies.md`. -- `proto` depends on no workspace crate. Every other crate depends on `proto` only, never on - another role crate. +- `bxcore` (formerly `proto`) depends on no workspace crate. Every other crate depends on `bxcore` + only, never on another role crate. - No source file over 500 lines. - Library code never panics on input: no `unwrap`, `expect`, `panic!`, indexing that can go out of bounds, or `as` casts that can lose data on untrusted values. Tests may use them. diff --git a/CLAUDE.md b/CLAUDE.md index 58a5837..53e7481 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -96,14 +96,15 @@ Separate binaries in one Cargo workspace. Each role holds as little authority as `!approve`/`!deny` replies over the WebSocket. - `inferproxy` is a ~100-line byte forwarder from a Unix socket to the shared `llama-server` router on the host. It is required, because `loopd` has no network. -- `proto` holds shared types. `toolkit` holds tool container entrypoints. +- `bxcore` (formerly `proto`) holds shared types, and from M5b the secret store and the + sanitizer. `toolkit` holds tool container entrypoints. Structural rules that span crates: -- No crate depends on another role's crate. Crates depend only on `proto`. +- No crate depends on another role's crate. Crates depend only on `bxcore`. - Authority is encoded in types. A tool can't run without a `Decision`. It is defined in `brokerd` with a private field and no `Deserialize`, so only the policy module can construct - one (covered by a compile-fail test). `proto` carries a plain `DecisionRecord`. + one (covered by a compile-fail test). `bxcore` carries a plain `DecisionRecord`. - No source file over 500 lines. - Files are the source of truth (`sessions/`, `memory/`, `grants/`, `audit/`). SQLite is only for rebuildable indexes and queues. diff --git a/docs/dependencies.md b/docs/dependencies.md index 60fecce..8055885 100644 --- a/docs/dependencies.md +++ b/docs/dependencies.md @@ -4,11 +4,11 @@ Every external crate has a row here. `scripts/check-dep-docs.sh` enforces it. | Crate | Version | Used by | Why | |---|---|---|---| -| `serde` | 1.0.229 | `proto`, `brokerd`, `toolkit`, `gatewayd` | Derives serialization for every shared type. MIT OR Apache-2.0. | -| `serde_json` | 1.0.151 | `proto`, `brokerd`, `toolkit`, `gatewayd` | JSON for frames and log files. MIT OR Apache-2.0. | -| `humantime` | 2.4.0 | `proto` | RFC 3339 timestamps. No dependencies of its own. MIT OR Apache-2.0. | -| `toml` | 1.1.6 | `proto` tests; `brokerd` and `bxctl` from M3, `gatewayd` from M4a | Parses grant files. MIT OR Apache-2.0. | -| `emsha` | 1.0.4 | `proto` | SHA-256. Written by the owner; no dependencies, no `unsafe`. Checked against `sha256sum` on 3,204 inputs. | +| `serde` | 1.0.229 | `bxcore`, `brokerd`, `toolkit`, `gatewayd` | Derives serialization for every shared type. MIT OR Apache-2.0. | +| `serde_json` | 1.0.151 | `bxcore`, `brokerd`, `toolkit`, `gatewayd` | JSON for frames and log files. MIT OR Apache-2.0. | +| `humantime` | 2.4.0 | `bxcore` | RFC 3339 timestamps. No dependencies of its own. MIT OR Apache-2.0. | +| `toml` | 1.1.6 | `bxcore` tests; `brokerd` and `bxctl` from M3, `gatewayd` from M4a | Parses grant files. MIT OR Apache-2.0. | +| `emsha` | 1.0.4 | `bxcore` | SHA-256. Written by the owner; no dependencies, no `unsafe`. Checked against `sha256sum` on 3,204 inputs. | | `rustls` | 0.23.45 | `gatewayd` | TLS to Mattermost over the tailnet (M4a, owner's decision). `default-features = false` with `ring`, `std`, `tls12`. With its dependencies on Linux: `ring` (Apache-2.0 AND ISC; builds C and assembly), `rustls-webpki` and `untrusted` (ISC), `rustls-pki-types`, `subtle` (BSD-3-Clause), `zeroize`, `once_cell`, `getrandom`, `libc`, `cfg-if`. Apache-2.0 OR ISC OR MIT. | | `rustls-native-certs` | 0.8.4 | `gatewayd` | The host's trusted certificates, so a CA installed on the host is trusted too; adds `openssl-probe`. Apache-2.0 OR ISC OR MIT. | | `zeroize` | 1.9.0 | `gatewayd` | Wipes a secret's memory when it is dropped (`Secret`). Already a dependency of `rustls`. Apache-2.0 OR MIT. |