onMount is Svelte 4 idiom. In Svelte 5 runes mode $effect is the correct
primitive for side effects and it provides additional behaviour onMount
cannot:
- IndexingProgress: $effect re-runs when jobId prop changes, restarting
the polling loop for the new job. onMount would have missed prop changes.
- search/+page.svelte: $effect with untrack() reads page.url params once
on mount without tracking the URL as a reactive dependency, preventing
goto() calls inside searchDocs() from triggering an infinite re-run loop.
Restores the page store import from $app/state.
- settings/+page.svelte: $effect with no reactive reads in the body runs
exactly once on mount — equivalent to onMount but idiomatic Svelte 5.
All three verified with svelte-autofixer: no issues.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
$effect runs during SSR and re-runs on every reactive dependency change,
causing polling loops and URL reads to fire at the wrong time. onMount
runs once on the client after first render, which is the correct lifecycle
for polling, URL param reads, and async data loads.
- IndexingProgress: polling loop now starts on mount, not on reactive trigger
- search/+page.svelte: URL param init moved to onMount; use window.location
directly instead of the page store to avoid reactive re-runs
- settings/+page.svelte: config load and local provider probe moved to onMount
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace onMount with $effect for initial config loading. Add auto-dismissing
green success banner (3 s) and persistent red error banner after save attempts.
Remove inline status text in favour of full-width banners with icons.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Repository list with state badges, stats, and action buttons
- Add repository modal for GitHub URLs and local paths
- Live indexing progress bar polling every 2s
- Confirm dialog for destructive actions
- Repository detail page with versions and recent jobs
- Settings page placeholder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>