The sidecar, built to docs/design.md. It is one Rust binary. The confidential OAuth client uses atgc's vendored jacquard-oauth, and runs one session per owner with a forced daily refresh and a two-year warning. Agents are found from the didbot firehose, with a listAccounts true-up. New repos are found from Jetstream, filtered to owner declarations. Grants run through one queue per owner paced at 1 write per second. Revokes happen only on an explicit tombstone: a deleted account event, or a deprovisioned/decommissioned ledger entry. Every action goes to an audit log. Owner state changes trigger ntfy and healthchecks.io alerts. The public listener serves the client metadata, JWKS and /health over ACME TLS, and the tailnet listener serves login, callback and /status.
The design doc now covers repo events, the known-agent and known-repo sets, and tombstone-only revocation. 13 integration tests run against mock PDS, knot and didbot servers. Against the live pds.did.bot, true-up --dry-run makes only GETs, and reports what it would do with no owner session signed in.
This targets the design branch and should land after it.
🤖 Generated with Claude Code