···11111212### Backend
13131414-- [ ] **Add `FlaggedFollow` type** to `src-tauri/src/feed.rs` (or a new `graph.rs` module if feed.rs is getting large).
1414+- [x] **Add `FlaggedFollow` type** to `src-tauri/src/feed.rs` (or a new `graph.rs` module if feed.rs is getting large).
1515 Bitflag status field matching the spec's status table.
1616-- [ ] **Implement `audit_follows` command.** Paginate `com.atproto.repo.listRecords` for the follow collection, batch-resolve via `getProfiles` (25/batch, bounded concurrency via semaphore), individually resolve missing DIDs via `getProfile` + DID document handle resolution.
1616+- [x] **Implement `audit_follows` command.** Paginate `com.atproto.repo.listRecords` for the follow collection, batch-resolve via `getProfiles` (25/batch, bounded concurrency via semaphore), individually resolve missing DIDs via `getProfile` + DID document handle resolution.
1717 Emit `follow-hygiene:progress` events per batch. Return only accounts with non-zero status.
1818-- [ ] **Implement `batch_unfollow` command.** Accept a `Vec<String>` of follow AT-URIs.
1818+- [x] **Implement `batch_unfollow` command.** Accept a `Vec<String>` of follow AT-URIs.
1919 Extract rkeys, build `Delete` operations, chunk into groups of 200, send via `applyWrites`. Return `BatchResult` with deleted count and any failed URIs.
2020-- [ ] **Rate-limit handling.** Add inter-batch delays and respect `429` / `Retry-After` headers in the audit scan.
2020+- [x] **Rate-limit handling.** Add inter-batch delays and respect `429` in the audit scan.
2121 Log warnings on rate-limit hits.
22222323### Frontend
24242525+#### Core
2626+2527- [ ] **Create `FollowHygienePanel` component** (`src/components/profile/FollowHygienePanel.tsx`). Local state via `createStore<FollowHygieneState>`. Phases: idle → scanning → ready → unfollowing → done.
2628- [ ] **Progress bar.** Listen to `follow-hygiene:progress` Tauri events during scan. Determinate bar with animated fill.
2729- [ ] **Flagged account list.** Scrollable list with per-row checkbox, handle, DID, status label chip. Selected rows get background tint. Use `For` (not map).
2830- [ ] **Category filter sidebar.** Sticky sidebar with visibility toggles and select-all checkboxes per status category. Selection counter.
2929-- [ ] **Unfollow flow.** Confirmation dialog before destructive action. Invoke `batch_unfollow`, remove completed rows with exit animation, show result summary.
3030-- [ ] **Entry points.** Add "Audit follows" button to the authenticated user's own profile panel. Add secondary entry in Settings > Account section.
3131+- [ ] **Unfollow flow.** Confirmation dialog before destructive action should invoke `batch_unfollow`, remove completed rows with exit animation, show result summary.
3232+- [ ] **Entry points.** Add "Audit follows" button to the authenticated user's own profile panel.
3333+ - [ ] Add secondary entry in Settings > Account section.
31343232-### Polish
3535+#### Polish
33363437- [ ] Keyboard shortcuts: `Space` toggle, `Ctrl+A` select all, `Escape` close
3538- [ ] `Motion` staggered fade-in on scan results, exit animation on unfollow