diff --git a/.beads/interactions.jsonl b/.beads/interactions.jsonl index 65b2292..338f9cf 100644 --- a/.beads/interactions.jsonl +++ b/.beads/interactions.jsonl @@ -8,3 +8,5 @@ {"id":"int-a4d53813","kind":"field_change","created_at":"2026-06-29T14:35:55.325922806Z","actor":"dawn","issue_id":"nucleus-bkx","extra":{"field":"status","new_value":"closed","old_value":"open","reason":"Epic complete: all list virtualizations rewritten to use TanStack Virtual."}} {"id":"int-3ef022dd","kind":"field_change","created_at":"2026-06-29T15:44:24.7334854Z","actor":"dawn","issue_id":"nucleus-huf","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Converted global notificationStream, jetstream, and pulsingPostId stores to Svelte 5 state objects."}} {"id":"int-fb44cac5","kind":"field_change","created_at":"2026-06-29T16:02:53.45125394Z","actor":"dawn","issue_id":"nucleus-bwr","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Fixed Svelte 5 Date and Set lint errors by using Date.parse, SvelteDate, and SvelteSet."}} +{"id":"int-0e35bdb1","kind":"field_change","created_at":"2026-06-29T16:32:22.208395256Z","actor":"dawn","issue_id":"nucleus-20e","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Implemented gcPosts function and background interval to prune unreferenced posts."}} +{"id":"int-2be9147c","kind":"field_change","created_at":"2026-06-29T16:34:32.902566131Z","actor":"dawn","issue_id":"nucleus-cfv","extra":{"field":"status","new_value":"closed","old_value":"in_progress","reason":"Converted settings store to Svelte 5 state and updated all usages across components and pages."}} diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 305eb09..6dde17f 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -1,3 +1,5 @@ +{"_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} diff --git a/src/components/BskyPost.svelte b/src/components/BskyPost.svelte index 84cf38c..f1ff6d2 100644 --- a/src/components/BskyPost.svelte +++ b/src/components/BskyPost.svelte @@ -454,7 +454,9 @@ placement="bottom-end" > {@render dropdownItem('heroicons:link-20-solid', 'copy link to post', () => - navigator.clipboard.writeText(`${$settings.socialAppUrl}/profile/${did}/post/${rkey}`) + navigator.clipboard.writeText( + `${settings.current.socialAppUrl}/profile/${did}/post/${rkey}` + ) )} {@render dropdownItem(undefined, 'copy at uri', () => navigator.clipboard.writeText(post.uri) diff --git a/src/components/FeedSelector.svelte b/src/components/FeedSelector.svelte index 6356d39..ef3d330 100644 --- a/src/components/FeedSelector.svelte +++ b/src/components/FeedSelector.svelte @@ -14,7 +14,7 @@ let isOpen = $state(false); - const savedFeeds = $derived($settings.feeds); + const savedFeeds = $derived(settings.current.feeds); const sortedFeeds = $derived( [...savedFeeds].sort((a, b) => (b.pinned ? 1 : 0) - (a.pinned ? 1 : 0)) ); diff --git a/src/components/RichText.svelte b/src/components/RichText.svelte index 1e79a63..65bcacb 100644 --- a/src/components/RichText.svelte +++ b/src/components/RichText.svelte @@ -58,7 +58,7 @@ {:else if feature.$type === 'app.bsky.richtext.facet#tag'} {@render plainText(text)} diff --git a/src/components/SettingsView.svelte b/src/components/SettingsView.svelte index d00d613..42faf04 100644 --- a/src/components/SettingsView.svelte +++ b/src/components/SettingsView.svelte @@ -1,6 +1,6 @@