`[2026-08-10→12]` **secrets-broker — per-box Vaultwarden credential store, SHIPPED + consumer-confirmed.** **What.** A per-dev-box credential store over the fleet Vaultwarden (`vaultwarden.phasefinal.com`, on ana-docker, DB on pfi-postgres, in the pg_dump backup set). The `secret` CLI at eshpfi `services/secrets-broker/secret` (also installed to `~/.local/bin/secret`, on PATH for all sessions): `put / get / list / rm / backfill`. Stores into the **`infra-ops` org's Default collection** (org shared to the operator's primary account, so he sees items too), folder = hostname, item name = `/`, title-derived slug. Small text → item note; small binary → base64 hidden field; **>6000 B → a bw attachment** (Vaultwarden caps notes at ~10000 encrypted chars); sha256 + source metadata fields; idempotent upsert keyed by name. **Auth.** Bootstraps from `~/.config/secrets-broker/bootstrap.env` (0600): apikey login (`BW_CLIENTID`/`BW_CLIENTSECRET`) + master-password unlock (`--passwordenv`) → per-invocation session. That file is **secrets-zero** (it unlocks the vault, can't live in it) and is excluded from backfill. **Client = `bw`, NOT `rbw`.** rbw was the operator's first choice but its `register` returned an undebuggable 400 against this Vaultwarden despite valid creds (a direct `client_credentials` grant + both prelogin paths return 200; rbw emits no HTTP logs). Switched to the official `bw` CLI (user-prefix npm install) — clean unattended flow, full write support (org collections + attachments). **Backfill.** Local-only (each box backs up itself; NOT a fleet daemon). Scanned nh3-dev's `~/development/*/{env.sh,.env}` + `~/.config` credential files, **25 items stored + round-trip verified** (2 large via attachment). Excludes bootstrap.env / `.example` / `~/AIPA-Data` archives / cargo noise. **Post-launch (jackdaw-dev feedback).** Added **`secret rm `** (bw soft-delete to trash, recoverable) — closes the "no delete path, append-only" gap; and a **new-top-level-namespace warning** on `put` (stderr, non-blocking) — catches a typo'd/missing host prefix at store time. Chose warn-not-auto-prefix because domain-scoped names (`gitea/…`, `certs/…`) would misfire on auto-prefix. Deferred edge recorded in the contract: the warning is non-blocking, so a scripted put suppressing stderr can still mis-namespace — add an opt-in `--strict` only if scripted callers appear. **Standing directive (now GLOBAL in `~/.claude/CLAUDE.md`):** the vault is the credential source of truth — **`secret put` durable secrets into it AND `secret get` the creds a task needs FROM it** rather than reading on-disk copies. Dogfooded by pulling the gitea `vh` token from the vault to create `vh/stonehenge-park`. **Deploy shape.** Not a service / no daemon — per-box; a new dev box duplicates the stack (`services/secrets-broker/README.md`): npm-install `bw` to `~/.local`, drop a per-box `bootstrap.env`, `secret backfill`. Commits: `41359ea` (CLI + contract), `850a197` (backfill 25/25 + attachment + resilient run), `a249073` (rm + namespace warning), `a1304b7` (deferred-edge contract note). Consumer-confirmed end-to-end by jackdaw-dev. Auto-memory: `reference_secrets_broker_cli`.