atproto git client
atgc plan logs.md
14 kB · 215 lines


id: logs title: What atgc did to somebody else's service is on disk afterwards status: open repos: [atgc] dependsOn: [] exitCriterion: > Every request atgc makes — to an authorization server, a PDS, a knot or a git subprocess — is recorded with no credential in it, and readable back by invocation. #

logs #

Three logs exist: oauth.jsonl, pds.jsonl and git.jsonl. Each is written at the transport rather than at the call site, so no caller can forget to log and none can be added without being logged, and each is read back by one generic renderer.

They exist because of an incident. A session was destroyed three times before anything was recording, and the third time the log was running: bsky.social refused the refresh in its own words, under a client_id fingerprint with no redirect URI, and jacquard deleted the session on the spot. atgc logs oauth --incident reproduces the whole of it.

The invariant is that a credential appears only as a fingerprint. That is a type — Fp — everywhere it can be, and one audited function where it cannot, which is an argv.

What it needs #

Done #