Adds a deploy test binary in crates/vibescrobble-index/tests/deploy/. It starts an index on a data directory in the order the binary does, against a relay, a didbot server, a non-didbot bot and a person. The tests compare everything a reader can ask for: /view, every leaderboard key and span, /usage, and /ledgers. They pin five things. A restart, and a second one, keep every total and the stream cursor, and read no repository again. A cold start and a restored start agree on view, kinds, burn and weeks; so does a start from an old state.json alone, with in-window burn right before the fill. Every data dir in the new vectors/data-dir, which this release wrote, is read whole. Every file widened as a newer release may (new fields, journal lines, columns) is read the same. A denylist entry or a takedown removes a shown, dormant or released account from every surface, through a restart. state::restore now seeds the burn store and sweeps, as the binary did after it, so the tests run the binary's own restore. The suite takes about a second. The data-disk converge case (#338) was already covered by poller_outlives_docker.
Each test was shown to fail by breaking the code, then restoring it. Ignoring released journal lines failed the restart, cold-vs-restored and fixture tests: the released account left the agent leaderboard and its tree's totals. Dropping the seed (#330) failed the state-alone test's "restored, before the fill" check. Skipping the kinds pass (#337/#344) left registeredKind: "host" null. Dropping the restored cursor (#346) failed "the stream resumes where it was". Forgetting which accounts were filled made the restart's fill read 5 pages, not 0. Renaming a journal line kind failed only the fixture test, because the writer and the reader agree. deny_unknown_fields on Agent failed the newer-release test. Removing #373's burn delete for a denied released account, or the takedown's unrelease, left it on /leaderboard?by=agent.
The new tests found three bugs, filed as issues and pinned by #[ignore]d tests: 3myrrithsun2l, a burn store let go at a restart never reads back accounts let go for room. 3myrrmihbq52n, Usage is deny_unknown_fields in burn.json, so a new usage field would stop a rolled-back index. 3myrrqcqybr2s, the denylist leaves the weekly ledgers of a released account.
🤖 Generated with Claude Code