--- id: index title: One service watches every vouched server and says what changed status: declined crates: [] dependsOn: [] exitCriterion: > A browser opening the canvas sees the same agents, tree and work groups as one connected for an hour, from a service that found the servers itself. --- # index Discovery from vouches, a firehose subscription with a repository sweep behind it, work clustering, and a query service that mirrors it for browsers. Ingest must not drop an event; serving is many short-lived readers. One process would make a slow client an ingest problem. **This epic is declined here, not abandoned.** The index and the query service were split out to vibescrobble.com on 2026-08-28 and the leftover crates deleted from this repository; `crates: []` in the frontmatter above is what is left of them. This repository holds everything that writes — the PDS, the hook, the swarm, setup, keys, attestation, agent accounts — and the reading side is somebody else's checkout. The open items below are recorded because they are real questions somebody has to answer, and because a decision that is not written down gets made again; they are not work this repository is going to do. `didbot_stack::ServiceKind::Index` and `::Query` still exist so a development profile can point at one running out of the other checkout. Walking the vouch chain mixes two different questions — which servers exist, and which agents an owner is accountable for — and what each vouch actually proves, versus what this index merely reports because a server said so, is [vouch](vouch.md). - [ ] **Incremental discovery.** Follow a server's `/events` rather than re-surveying it. - [ ] **Hear vouches rather than being told them.** The voucher list is configuration because there is no relay to hear a vouch on. - [ ] **A public ledger of policy changes.** Policy records only have to say what is true now; making the sequence of changes visible is a reader's job, and doing it here means the history is kept by somebody other than the party being audited. - [ ] **Query lexicons, if the read endpoints are ever to be XRPC**. - [ ] **Serve what a running agent asks.** [mentions](mentions.md) is the first such query. - [ ] **Group ids do not survive a restart**. Persisting fingerprints would change the answer, not just its label. ## Done **Correction, not new work:** this section previously ticked nine items. Seven of them — the vouch-chain discovery walk, the firehose subscription and its sweep backstop, the work clustering, lineage learned from records, the query service's reader endpoints, `/health`, the three firehose filter modes, and `View::agent_by_handle` — described code in `didbot-index` and `didbot-query`. Both crates were removed from this repository in `build!: remove didbot-index, didbot-query and the canvas`; the reading side now lives at vibescrobble.com. Nothing in this workspace walks a vouch chain, subscribes to another server's firehose, or clusters work, and `grep` for `SimHash`, `FilterMode` or `View::agent_by_handle` finds nothing. They are unticked here rather than left standing, because a tick against code that is not in the tree is what sent three agents to reimplement work that was never here. One survives, because it landed in a crate that stayed: - [x] **`handle_did` and `did_document` no longer walk the whole account store per request.** `Registry::handle_did` and `Registry::did_document` in `crates/didbot-pds/src/provision.rs` read a `HostIndex` kept in step with the account store on every provision and delete, rather than scanning it. Landed from `agent-accounts`, which is why it is recorded here; it is also the only entry in this list whose code is still in this repository.