Conversation
This was referenced May 19, 2026
Merged
zmanian
added a commit
that referenced
this pull request
May 20, 2026
Lands the four-PR stack (#124, #125, #126, #127) as a single squash commit on main. ## What's in this squash **1. `trace-commons-operator-client` foundation crate** (was #124) - `Client` wrapper around `reqwest::Client` with bearer-token resolution from env, host allowlist enforcement, typed error mapping for `{"error": "<Label>"}` refusals. - Error taxonomy: `BearerMissing`, `InvalidEndpoint`, `HostNotAllowed`, `Transport`, `HttpFailure`, `ServerLabel`, `MalformedResponse`. `Error::user_diagnostic()` strips query strings + fragments. - `HostAllowlist` (CSV, exact-match, case-insensitive) sourced from `--allowed-hosts` or `TRACE_COMMONS_ALLOWED_HOSTS`. - Output helpers: `JsonEnvelope` wrapper for `--json` mode, ASCII table renderer, key-value block renderer. **2. `trace-commons-review` (8 cmds) + `trace-commons-admin` (12 cmds)** (was #125) - Single shared bearer per binary (`TRACE_COMMONS_REVIEWER_BEARER`, `TRACE_COMMONS_ADMIN_BEARER`). - 37 binary tests across both (parse-through, body validation, wiremock round-trips). **3. `trace-commons-worker` (8 cmds) + `trace-commons-tenant` (11 cmds)** (was #126) - Worker uses per-subcommand bearer envs (8 distinct env vars, one per route gate). Verified by `worker_per_route_bearer_resolution_uses_distinct_envs`. - Tenant uses single shared `TRACE_COMMONS_TENANT_BEARER`. - Operator runbook at `docs/operator/operator-binaries.md`. - CI smoke job `operator-binaries-smoke` in `.github/workflows/ci.yml`, sibling to `pilot-bootstrap-smoke`. **4. Privacy-filter-canary port** (was #127) - New `trace_commons_operator_client::privacy_filter` module: `PrivacyFilterAdapter` trait, `CommandPrivacyFilterAdapter`, `SafePrivacyFilterRedaction`, `adapter_from_env`, `canary_leaked_tokens`. Wire shapes byte-identical to Ironclaw's sidecar protocol. - Dual-name env-var compat: `TRACE_COMMONS_PRIVACY_FILTER_*` canonical, `IRONCLAW_TRACE_*` legacy fallback with warn-on-use. - `trace-commons-tenant privacy-filter-canary` stub replaced with the real handler. ## Operator surface added | Binary | Cmds | Bearer model | |---|---:|---| | `trace-commons-review` | 8 | Single `TRACE_COMMONS_REVIEWER_BEARER` | | `trace-commons-admin` | 12 | Single `TRACE_COMMONS_ADMIN_BEARER` | | `trace-commons-worker` | 8 | Per-subcommand defaults | | `trace-commons-tenant` | 11 | Single `TRACE_COMMONS_TENANT_BEARER` | | **Total** | **39** | | These mirror the 39 operator commands removed from Ironclaw in nearai/ironclaw#3738. ## Verification ``` cargo check --workspace --all-targets (-D warnings) # clean cargo test --workspace --no-run (-D warnings) # clean cargo clippy --workspace --all-targets (-D warnings) # clean cargo test -p trace-commons-operator-client # 39 passed cargo test -p trace-commons-server --bins # all green bash scripts/operator/operator-smoke.sh # SmokeOperatorBinariesOK ``` Superseded PRs (closed): #124, #125, #126.
This was referenced May 20, 2026
Collaborator
Author
|
Superseded by #127. The trace-commons-server stack (#124 → #125 → #126 → #127) was squash-merged top-down per the project's stacked-PR merge convention; #127's squash captures this PR's full diff ( Closing as superseded. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
PR #3 of the three-PR stack. Completes the trace-commons-server side of the operator-binaries migration kicked off by nearai/ironclaw#3738 (the prune). Adds the remaining 19 operator commands across two binaries, plus the operator runbook + CI smoke wiring.
Stack: #124 (foundation) → #125 (review + admin) → this PR (worker + tenant + docs + CI).
Merge order: top-down — #125 first (it's the head of the stack at this point), then this PR.
What lands
trace-commons-worker(8 cmds) — per-subcommand bearer envPer CLAUDE.md, each worker route has its own bearer-token gate. Each subcommand exposes its own
--bearer-token-env <NAME>with a per-route default:worker-utility-creditTRACE_COMMONS_UTILITY_CREDIT_WORKER_BEARERworker-retention-maintenanceTRACE_COMMONS_RETENTION_WORKER_BEARERworker-vector-indexTRACE_COMMONS_VECTOR_WORKER_BEARERworker-benchmark-convertTRACE_COMMONS_BENCHMARK_WORKER_BEARERworker-replay-dataset-exportTRACE_COMMONS_EXPORT_WORKER_BEARERworker-ranker-training-candidatesTRACE_COMMONS_RANKER_WORKER_BEARERworker-ranker-training-pairsTRACE_COMMONS_RANKER_WORKER_BEARERprocess-evaluation-submitTRACE_COMMONS_PROCESS_EVALUATION_WORKER_BEARERVerified per-route by test `worker_per_route_bearer_resolution_uses_distinct_envs` (sets 8 distinct env vars to 8 distinct tokens, fires each handler against wiremock, asserts each routed the right `Authorization: Bearer ...`).
`trace-commons-tenant` (11 cmds) — single shared bearer
Default `TRACE_COMMONS_TENANT_BEARER`. Subcommands: `tenant-policy-get`, `tenant-policy-set`, `tenant-access-grants-list`, `tenant-principal-ref`, `tenant-access-grant-create`, `tenant-access-grant-revoke`, `ranker-training-candidates`, `ranker-training-pairs`, `audit-events`, `list-traces`, `privacy-filter-canary`.
Operator runbook — `docs/operator/operator-binaries.md`
214 lines. Covers: overview, install, env-var matrix, common workflows (claim/decide/release a review lease; admin vs. worker retention; rotate tenant policy + grants; benchmark convert + lifecycle), defense-in-depth, troubleshooting (one row per error kind). Linked from `docs/operator/README.md`.
CI smoke — `scripts/operator/operator-smoke.sh` + `.github/workflows/ci.yml`
New `operator-binaries-smoke` job, sibling to `pilot-bootstrap-smoke`. Builds all four binaries and exercises `--help` / `--version` plus a happy-path parse-through per binary. Required check on every PR.
Stubbed
Divergence from Ironclaw reference
Tests
Verification
```
RUSTFLAGS="-D warnings" cargo check --workspace --all-targets # clean
RUSTFLAGS="-D warnings" cargo test --workspace --no-run # clean
cargo test -p trace-commons-server --bins # 109 passed (21+24+27+37)
cargo clippy -p trace-commons-server --bins -- -D warnings # clean
cargo build --bin trace-commons-worker # builds standalone
cargo build --bin trace-commons-tenant # builds standalone
bash scripts/operator/operator-smoke.sh # SmokeOperatorBinariesOK
```
Net diff
7 files, +3,647 LOC.
Stack now complete
After this PR lands, the four-binary operator surface in `trace-commons-server` matches the 39 commands Ironclaw lost in nearai/ironclaw#3738:
Out of scope
🤖 Generated with Claude Code