Adds one "why isn't my agent showing?" report with two ways in: a form on /start, and vibescrobble doctor [--as <account>]. The index builds the report, because it holds the view, the denylist and the rate cap. It answers GET /doctor/{id}, and the query service serves that publicly as GET /agents/{id}/doctor. The report lists checks in a fixed order, each with a status (ok, warn, fail or unknown), a short fact, and a hint when the status isn't ok. The checks are identity, account, label, records, moderation, rate, seen and shown. If identity fails, the rest are unknown.
The CLI prints the same rows, then checks only this machine can make: session (expiry only; no tokens printed and no refresh), spool, hook, repo, usage and clock skew. Nothing writes or keeps anything. The index answers at most four reports at once, and its outbound fetches go through the existing resolver. The moderation row only says whether the board keeps the account off; it never names a list. All hints are the placeholder quillwort, which the placeholder guard holds until copy is written. The guard also now reads the index's source, and skips test-only modules.
The first commit is the same clippy fix as in #788, so the two PRs apply cleanly in either order.
🤖 Generated with Claude Code