{"_type":"issue","id":"nucleus-20e","title":"Implement post cache garbage collection","description":"Add a gcPosts function to state.svelte.ts that runs periodically to prune orphaned post records from allPosts map and clean up secondary indexes.","status":"closed","priority":1,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T16:31:45Z","created_by":"dawn","updated_at":"2026-06-29T16:32:22Z","started_at":"2026-06-29T16:31:54Z","closed_at":"2026-06-29T16:32:22Z","close_reason":"Implemented gcPosts function and background interval to prune unreferenced posts.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nucleus-cfv","title":"Modernize settings store to Svelte 5 state","description":"Convert settings store in settings.ts to Svelte 5 state object, update imports and usage in BskyPost, FeedSelector, RichText, SettingsView, and +page.svelte.","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T16:32:01Z","created_by":"dawn","updated_at":"2026-06-29T16:34:33Z","started_at":"2026-06-29T16:32:09Z","closed_at":"2026-06-29T16:34:33Z","close_reason":"Converted settings store to Svelte 5 state and updated all usages across components and pages.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nucleus-bwr","title":"Resolve Svelte 5 Date and Set lint errors in state.svelte.ts","description":"Replace built-in Date instantiation with Date.parse or SvelteDate, and built-in Set instantiation with SvelteSet to satisfy Svelte 5 lint rules.","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T16:01:47Z","created_by":"dawn","updated_at":"2026-06-29T16:02:53Z","started_at":"2026-06-29T16:01:55Z","closed_at":"2026-06-29T16:02:53Z","close_reason":"Fixed Svelte 5 Date and Set lint errors by using Date.parse, SvelteDate, and SvelteSet.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nucleus-huf","title":"Modernize state stores to Svelte 5 Runes","description":"Convert notificationStream, jetstream, and pulsingPostId from Svelte 4 writables to Svelte 5 state/derived runes, updating components and routes.","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T15:41:52Z","created_by":"dawn","updated_at":"2026-06-29T15:44:25Z","started_at":"2026-06-29T15:42:02Z","closed_at":"2026-06-29T15:44:25Z","close_reason":"Converted global notificationStream, jetstream, and pulsingPostId stores to Svelte 5 state objects.","dependency_count":0,"dependent_count":0,"comment_count":0}
{"_type":"issue","id":"nucleus-9ot","title":"Clean up @tutorlatin/svelte-tiny-virtual-list and verify build/lints","description":"Uninstall unused dependency, run linter and build to make sure everything works perfectly","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:27:01Z","created_by":"dawn","updated_at":"2026-06-29T14:35:48Z","started_at":"2026-06-29T14:33:32Z","closed_at":"2026-06-29T14:35:48Z","close_reason":"Removed old package and verified typescript / prettier formatting","dependencies":[{"issue_id":"nucleus-9ot","depends_on_id":"nucleus-3w3","type":"blocks","created_at":"2026-06-29T17:28:10Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-9ot","depends_on_id":"nucleus-ehl","type":"blocks","created_at":"2026-06-29T17:28:23Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-9ot","depends_on_id":"nucleus-fcu","type":"blocks","created_at":"2026-06-29T17:28:15Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-9ot","depends_on_id":"nucleus-ib8","type":"blocks","created_at":"2026-06-29T17:28:19Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-9ot","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:28:02Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-9ot","depends_on_id":"nucleus-xnz","type":"blocks","created_at":"2026-06-29T17:28:06Z","created_by":"dawn","metadata":"{}"}],"dependency_count":6,"dependent_count":1,"comment_count":0}
{"_type":"issue","id":"nucleus-ehl","title":"Refactor GenericTimelineView to use TanStack Virtual","description":"Replace VirtualList in GenericTimelineView.svelte with TanStack Virtual using dynamic height measurement (measureElement)","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:53Z","created_by":"dawn","updated_at":"2026-06-29T14:33:25Z","started_at":"2026-06-29T14:33:01Z","closed_at":"2026-06-29T14:33:25Z","close_reason":"refactored GenericTimelineView.svelte to use TanStack Virtual with dynamic height","dependencies":[{"issue_id":"nucleus-ehl","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:27:57Z","created_by":"dawn","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0}
{"_type":"issue","id":"nucleus-ib8","title":"Refactor FeedTimelineView to use TanStack Virtual","description":"Replace VirtualList in FeedTimelineView.svelte with TanStack Virtual using dynamic height measurement (measureElement)","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:45Z","created_by":"dawn","updated_at":"2026-06-29T14:32:55Z","started_at":"2026-06-29T14:30:44Z","closed_at":"2026-06-29T14:32:55Z","close_reason":"refactored FeedTimelineView.svelte to use TanStack Virtual with dynamic height","dependencies":[{"issue_id":"nucleus-ib8","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:27:53Z","created_by":"dawn","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0}
{"_type":"issue","id":"nucleus-fcu","title":"Refactor FollowingView to use TanStack Virtual","description":"Replace VirtualList in FollowingView.svelte with TanStack Virtual","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:39Z","created_by":"dawn","updated_at":"2026-06-29T14:30:37Z","started_at":"2026-06-29T14:30:20Z","closed_at":"2026-06-29T14:30:37Z","close_reason":"refactored FollowingView.svelte to use TanStack Virtual","dependencies":[{"issue_id":"nucleus-fcu","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:27:49Z","created_by":"dawn","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0}
{"_type":"issue","id":"nucleus-3w3","title":"Refactor SettingsModerationTab to use TanStack Virtual","description":"Replace VirtualList in SettingsModerationTab.svelte with TanStack Virtual","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:33Z","created_by":"dawn","updated_at":"2026-06-29T14:30:14Z","started_at":"2026-06-29T14:29:56Z","closed_at":"2026-06-29T14:30:14Z","close_reason":"refactored SettingsModerationTab.svelte to use TanStack Virtual","dependencies":[{"issue_id":"nucleus-3w3","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:27:44Z","created_by":"dawn","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0}
{"_type":"issue","id":"nucleus-xnz","title":"Refactor SettingsFeedsTab to use TanStack Virtual","description":"Replace VirtualList in SettingsFeedsTab.svelte with TanStack Virtual","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:24Z","created_by":"dawn","updated_at":"2026-06-29T14:29:50Z","started_at":"2026-06-29T14:29:19Z","closed_at":"2026-06-29T14:29:50Z","close_reason":"refactored SettingsFeedsTab.svelte to use TanStack Virtual","dependencies":[{"issue_id":"nucleus-xnz","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:27:40Z","created_by":"dawn","metadata":"{}"}],"dependency_count":1,"dependent_count":2,"comment_count":0}
{"_type":"issue","id":"nucleus-n16","title":"Install @tanstack/svelte-virtual","description":"Add @tanstack/svelte-virtual package using deno install and update package.json","status":"closed","priority":2,"issue_type":"task","assignee":"dawn","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:18Z","created_by":"dawn","updated_at":"2026-06-29T14:29:06Z","started_at":"2026-06-29T14:28:39Z","closed_at":"2026-06-29T14:29:06Z","close_reason":"installed @tanstack/svelte-virtual","dependency_count":0,"dependent_count":7,"comment_count":0}
{"_type":"issue","id":"nucleus-bkx","title":"Epic: Rewrite nucleus to use TanStack Virtual","description":"Replace @tutorlatin/svelte-tiny-virtual-list with @tanstack/svelte-virtual, getting rid of custom height measurement hacks and improving scroll/list performance.","status":"closed","priority":2,"issue_type":"feature","owner":"90008@klbr.net","created_at":"2026-06-29T14:26:11Z","created_by":"dawn","updated_at":"2026-06-29T14:35:55Z","closed_at":"2026-06-29T14:35:55Z","close_reason":"Epic complete: all list virtualizations rewritten to use TanStack Virtual.","dependencies":[{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-3w3","type":"blocks","created_at":"2026-06-29T17:27:16Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-9ot","type":"blocks","created_at":"2026-06-29T17:27:33Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-ehl","type":"blocks","created_at":"2026-06-29T17:27:29Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-fcu","type":"blocks","created_at":"2026-06-29T17:27:20Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-ib8","type":"blocks","created_at":"2026-06-29T17:27:24Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-n16","type":"blocks","created_at":"2026-06-29T17:27:07Z","created_by":"dawn","metadata":"{}"},{"issue_id":"nucleus-bkx","depends_on_id":"nucleus-xnz","type":"blocks","created_at":"2026-06-29T17:27:12Z","created_by":"dawn","metadata":"{}"}],"dependency_count":7,"dependent_count":0,"comment_count":0}
