# To do ## Trim the state database From an audit of the database layer and a read-only copy of production on 2026-09-12. The data itself was clean: no leftover tables or indexes, 47 free pages, one stray `entry_state` row. Check each against the code before cutting it. - [x] **`migrate()`'s add list.** All eight columns arrived in 0.2.0, and 0.5.0 only supports upgrades from 0.3.0 on. Drop the list and its loop; keep the `retired` drop loop, which a database coming from 0.4.0 still needs. (`src/db.rs`) - [x] **`Db::subscribed_feed_ids`.** No callers; its doc says the scanner walks it, and it does not. (`src/db.rs`) - [x] **`Db::subscriber_count`.** One caller, which only asks whether it is above zero: `subscriber_counts()?.contains_key(&id)`. (`src/db.rs`, `src/web.rs`) - [x] **The `created` columns** on `users`, `subscriptions` and `sessions`. Written on every insert, never read. Add them to `retired` and drop them from the inserts. (`src/db.rs`) - [x] **`Managed.orphaned`.** Selected by `managed_feeds()` on every call and never read; `FeedSummary.orphaned` is what the UI uses. (`src/db.rs`) ## Popular - [x] **Popular lists feeds the way Directory does**: the feeds inside an OPML or a Patreon creator, never the collection itself. (`src/web.rs`, `web/index.html`) After these: `cargo test`, `node tests/page-smoke.js`, `npx playwright test`. Copy `state.db` aside before deploying: `migrate()` drops columns on the first start.