From b380c8c7acb3b46a16fb0044c08202f1baa646c4 Mon Sep 17 00:00:00 2001 From: nerdalytics <97166791+nerdalytics@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:16:34 +0200 Subject: [PATCH 1/6] fix(handbook): stop calling resolve('') in root-landing check --- handbook/src/routes/+layout.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handbook/src/routes/+layout.svelte b/handbook/src/routes/+layout.svelte index 1e890bb..c150273 100644 --- a/handbook/src/routes/+layout.svelte +++ b/handbook/src/routes/+layout.svelte @@ -14,7 +14,7 @@ let scrollContainer: HTMLElement | undefined = $state() - let isRootLanding = $derived(page.url.pathname === resolve('/') || page.url.pathname === resolveHref('')) + let isRootLanding = $derived(page.url.pathname === resolve('/')) let isVersionLanding = $derived.by(() => { const prefix = getVersionPrefix(page.url.pathname) if (!prefix) return false From 14b50b065daed4c3778a08d58de1f7be9b9c0119 Mon Sep 17 00:00:00 2001 From: nerdalytics <97166791+nerdalytics@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:26:39 +0200 Subject: [PATCH 2/6] fix(handbook): derive version prefix and current page from route.id --- handbook/src/lib/components/DocLayout.svelte | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/handbook/src/lib/components/DocLayout.svelte b/handbook/src/lib/components/DocLayout.svelte index 02bc9c2..8eeae7e 100644 --- a/handbook/src/lib/components/DocLayout.svelte +++ b/handbook/src/lib/components/DocLayout.svelte @@ -23,11 +23,9 @@ if (articleEl) addCopyButtons(articleEl) }) - let versionPrefix = $derived(getVersionPrefix(page.url.pathname) ?? '') + let versionPrefix = $derived(getVersionPrefix(page.route.id ?? '') ?? '') let allPages = $derived(getAllPages(versionPrefix)) - let currentIndex = $derived( - allPages.findIndex((item) => resolveHref(item.href) === page.url.pathname) - ) + let currentIndex = $derived(allPages.findIndex((item) => item.href === page.route.id)) let prevPage = $derived(currentIndex > 0 ? allPages[currentIndex - 1] : null) let nextPage = $derived(currentIndex < allPages.length - 1 ? allPages[currentIndex + 1] : null) From cf24016017ad32f89a2b2ac99f83dd5b46191ea7 Mon Sep 17 00:00:00 2001 From: nerdalytics <97166791+nerdalytics@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:26:39 +0200 Subject: [PATCH 3/6] docs(handbook): route hooks cross-references through VersionLink --- handbook/src/routes/latest/batch/+page.md | 6 +++++- handbook/src/routes/latest/derive/+page.md | 6 +++++- handbook/src/routes/latest/effects/+page.md | 6 +++++- handbook/src/routes/latest/hooks-api/+page.md | 6 +++++- handbook/src/routes/latest/hooks-catalog/+page.md | 6 +++++- handbook/src/routes/latest/hooks-overview/+page.md | 6 +++++- handbook/src/routes/latest/state/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/batch/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/derive/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/effects/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/hooks-api/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/hooks-catalog/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/hooks-overview/+page.md | 6 +++++- handbook/src/routes/v2000.0.0/state/+page.md | 6 +++++- 14 files changed, 70 insertions(+), 14 deletions(-) diff --git a/handbook/src/routes/latest/batch/+page.md b/handbook/src/routes/latest/batch/+page.md index 70f8dc7..10a9a96 100644 --- a/handbook/src/routes/latest/batch/+page.md +++ b/handbook/src/routes/latest/batch/+page.md @@ -2,6 +2,10 @@ title: Batch description: Group multiple state updates into a single notification cycle --- + + `batch()` collapses multiple state mutations into a single notification cycle. Without batch, each mutation triggers its own propagation — effects see intermediate states. With batch, all mutations apply first, then effects run once with the final state. @@ -12,7 +16,7 @@ description: Group multiple state updates into a single notification cycle function batch(fn: () => T, hooks?: BatchHooks): T ``` -Returns the value returned by `fn`. See [Hooks](/latest/hooks-overview) for the optional hooks parameter. +Returns the value returned by `fn`. See Hooks for the optional hooks parameter. ## Basic usage diff --git a/handbook/src/routes/latest/derive/+page.md b/handbook/src/routes/latest/derive/+page.md index 4c4a068..12b381c 100644 --- a/handbook/src/routes/latest/derive/+page.md +++ b/handbook/src/routes/latest/derive/+page.md @@ -2,6 +2,10 @@ title: Derive description: Compute derived values that cache results and auto-update --- + + `derive()` creates computed values that update automatically when their dependencies change. It memoizes the result and only recalculates when necessary. @@ -20,7 +24,7 @@ type ComputedValue = { - `value` — the cached computed result (read-only) - `reactive` — controls the internal effect lifecycle; set to `false` to dispose, `true` to recreate -See [Hooks](/latest/hooks-overview) for the optional hooks parameter. +See Hooks for the optional hooks parameter. ## Basic usage diff --git a/handbook/src/routes/latest/effects/+page.md b/handbook/src/routes/latest/effects/+page.md index 2e69019..4c83a53 100644 --- a/handbook/src/routes/latest/effects/+page.md +++ b/handbook/src/routes/latest/effects/+page.md @@ -2,6 +2,10 @@ title: Effects description: Write side effects that auto-run when their dependencies change --- + + `effect()` creates reactive functions that re-run automatically when their dependencies change. Effects bridge reactive state to side effects — logging, network requests, DOM updates, and so on. @@ -16,7 +20,7 @@ type EffectName = string type Unsubscribe = () => void ``` -Returns a dispose function. Call it to stop the effect and clean up all subscriptions. See [Hooks](/latest/hooks-overview) for the optional hooks parameter. +Returns a dispose function. Call it to stop the effect and clean up all subscriptions. See Hooks for the optional hooks parameter. ## Basic usage diff --git a/handbook/src/routes/latest/hooks-api/+page.md b/handbook/src/routes/latest/hooks-api/+page.md index 96dfe9e..e9c0aaa 100644 --- a/handbook/src/routes/latest/hooks-api/+page.md +++ b/handbook/src/routes/latest/hooks-api/+page.md @@ -2,9 +2,13 @@ title: Hooks API Reference description: Complete hook interface definitions for StateHooks, EffectHooks, DeriveHooks, and BatchHooks --- + -Complete interface definitions for all hook types. For an introduction to hooks, see the [Hooks Overview](/latest/hooks-overview). + +Complete interface definitions for all hook types. For an introduction to hooks, see the Hooks Overview. ## Base types diff --git a/handbook/src/routes/latest/hooks-catalog/+page.md b/handbook/src/routes/latest/hooks-catalog/+page.md index 1ce42ac..b2d07bd 100644 --- a/handbook/src/routes/latest/hooks-catalog/+page.md +++ b/handbook/src/routes/latest/hooks-catalog/+page.md @@ -2,11 +2,15 @@ title: Hooks Catalog description: Hook interfaces, composeHook utility, and patterns for writing your own hooks --- + + This page documents what ships in `@nerdalytics/beacon`: the hook type interfaces and the `composeHook` utility. There are no built-in hook implementations — you write your own hook functions against these interfaces. -For a conceptual overview and the composition model, see [Hooks Overview](/latest/hooks-overview). +For a conceptual overview and the composition model, see Hooks Overview. ## Hook interface reference diff --git a/handbook/src/routes/latest/hooks-overview/+page.md b/handbook/src/routes/latest/hooks-overview/+page.md index 0d029f8..eb38e48 100644 --- a/handbook/src/routes/latest/hooks-overview/+page.md +++ b/handbook/src/routes/latest/hooks-overview/+page.md @@ -2,6 +2,10 @@ title: Hooks Overview description: Zero-cost instrumentation for all four Beacon primitives --- + + All four Beacon primitives — `state`, `effect`, `derive`, `batch` — accept an optional hooks parameter as their last argument. Hooks observe internal operations without affecting behavior. @@ -288,4 +292,4 @@ const hooks = process.env.NODE_ENV === 'development' const $state = state(initial, hooks) ``` -See the [Hooks Catalog](/latest/hooks-catalog) for hook interface reference, `composeHook` documentation, and practical examples. +See the Hooks Catalog for hook interface reference, `composeHook` documentation, and practical examples. diff --git a/handbook/src/routes/latest/state/+page.md b/handbook/src/routes/latest/state/+page.md index 4ac3041..3a36ad3 100644 --- a/handbook/src/routes/latest/state/+page.md +++ b/handbook/src/routes/latest/state/+page.md @@ -2,6 +2,10 @@ title: State description: Create and manage reactive objects with automatic dependency tracking --- + + `state()` creates reactive objects. It wraps plain JavaScript objects in Proxies for automatic dependency tracking and change notification. @@ -12,7 +16,7 @@ description: Create and manage reactive objects with automatic dependency tracki function state(initial: T, hooks?: StateHooks): T ``` -Returns a Proxy-wrapped version of the input object. Passing a non-object returns the value as-is. See [Hooks](/latest/hooks-overview) for the optional hooks parameter. +Returns a Proxy-wrapped version of the input object. Passing a non-object returns the value as-is. See Hooks for the optional hooks parameter. ## Creating reactive state diff --git a/handbook/src/routes/v2000.0.0/batch/+page.md b/handbook/src/routes/v2000.0.0/batch/+page.md index be509ed..10a9a96 100644 --- a/handbook/src/routes/v2000.0.0/batch/+page.md +++ b/handbook/src/routes/v2000.0.0/batch/+page.md @@ -2,6 +2,10 @@ title: Batch description: Group multiple state updates into a single notification cycle --- + + `batch()` collapses multiple state mutations into a single notification cycle. Without batch, each mutation triggers its own propagation — effects see intermediate states. With batch, all mutations apply first, then effects run once with the final state. @@ -12,7 +16,7 @@ description: Group multiple state updates into a single notification cycle function batch(fn: () => T, hooks?: BatchHooks): T ``` -Returns the value returned by `fn`. See [Hooks](/v2000.0.0/hooks-overview) for the optional hooks parameter. +Returns the value returned by `fn`. See Hooks for the optional hooks parameter. ## Basic usage diff --git a/handbook/src/routes/v2000.0.0/derive/+page.md b/handbook/src/routes/v2000.0.0/derive/+page.md index bc775a8..12b381c 100644 --- a/handbook/src/routes/v2000.0.0/derive/+page.md +++ b/handbook/src/routes/v2000.0.0/derive/+page.md @@ -2,6 +2,10 @@ title: Derive description: Compute derived values that cache results and auto-update --- + + `derive()` creates computed values that update automatically when their dependencies change. It memoizes the result and only recalculates when necessary. @@ -20,7 +24,7 @@ type ComputedValue = { - `value` — the cached computed result (read-only) - `reactive` — controls the internal effect lifecycle; set to `false` to dispose, `true` to recreate -See [Hooks](/v2000.0.0/hooks-overview) for the optional hooks parameter. +See Hooks for the optional hooks parameter. ## Basic usage diff --git a/handbook/src/routes/v2000.0.0/effects/+page.md b/handbook/src/routes/v2000.0.0/effects/+page.md index af5f225..4c83a53 100644 --- a/handbook/src/routes/v2000.0.0/effects/+page.md +++ b/handbook/src/routes/v2000.0.0/effects/+page.md @@ -2,6 +2,10 @@ title: Effects description: Write side effects that auto-run when their dependencies change --- + + `effect()` creates reactive functions that re-run automatically when their dependencies change. Effects bridge reactive state to side effects — logging, network requests, DOM updates, and so on. @@ -16,7 +20,7 @@ type EffectName = string type Unsubscribe = () => void ``` -Returns a dispose function. Call it to stop the effect and clean up all subscriptions. See [Hooks](/v2000.0.0/hooks-overview) for the optional hooks parameter. +Returns a dispose function. Call it to stop the effect and clean up all subscriptions. See Hooks for the optional hooks parameter. ## Basic usage diff --git a/handbook/src/routes/v2000.0.0/hooks-api/+page.md b/handbook/src/routes/v2000.0.0/hooks-api/+page.md index 00fe675..e9c0aaa 100644 --- a/handbook/src/routes/v2000.0.0/hooks-api/+page.md +++ b/handbook/src/routes/v2000.0.0/hooks-api/+page.md @@ -2,9 +2,13 @@ title: Hooks API Reference description: Complete hook interface definitions for StateHooks, EffectHooks, DeriveHooks, and BatchHooks --- + -Complete interface definitions for all hook types. For an introduction to hooks, see the [Hooks Overview](/v2000.0.0/hooks-overview). + +Complete interface definitions for all hook types. For an introduction to hooks, see the Hooks Overview. ## Base types diff --git a/handbook/src/routes/v2000.0.0/hooks-catalog/+page.md b/handbook/src/routes/v2000.0.0/hooks-catalog/+page.md index cfce50b..b2d07bd 100644 --- a/handbook/src/routes/v2000.0.0/hooks-catalog/+page.md +++ b/handbook/src/routes/v2000.0.0/hooks-catalog/+page.md @@ -2,11 +2,15 @@ title: Hooks Catalog description: Hook interfaces, composeHook utility, and patterns for writing your own hooks --- + + This page documents what ships in `@nerdalytics/beacon`: the hook type interfaces and the `composeHook` utility. There are no built-in hook implementations — you write your own hook functions against these interfaces. -For a conceptual overview and the composition model, see [Hooks Overview](/v2000.0.0/hooks-overview). +For a conceptual overview and the composition model, see Hooks Overview. ## Hook interface reference diff --git a/handbook/src/routes/v2000.0.0/hooks-overview/+page.md b/handbook/src/routes/v2000.0.0/hooks-overview/+page.md index 8c56c35..eb38e48 100644 --- a/handbook/src/routes/v2000.0.0/hooks-overview/+page.md +++ b/handbook/src/routes/v2000.0.0/hooks-overview/+page.md @@ -2,6 +2,10 @@ title: Hooks Overview description: Zero-cost instrumentation for all four Beacon primitives --- + + All four Beacon primitives — `state`, `effect`, `derive`, `batch` — accept an optional hooks parameter as their last argument. Hooks observe internal operations without affecting behavior. @@ -288,4 +292,4 @@ const hooks = process.env.NODE_ENV === 'development' const $state = state(initial, hooks) ``` -See the [Hooks Catalog](/v2000.0.0/hooks-catalog) for hook interface reference, `composeHook` documentation, and practical examples. +See the Hooks Catalog for hook interface reference, `composeHook` documentation, and practical examples. diff --git a/handbook/src/routes/v2000.0.0/state/+page.md b/handbook/src/routes/v2000.0.0/state/+page.md index b990d41..3a36ad3 100644 --- a/handbook/src/routes/v2000.0.0/state/+page.md +++ b/handbook/src/routes/v2000.0.0/state/+page.md @@ -2,6 +2,10 @@ title: State description: Create and manage reactive objects with automatic dependency tracking --- + + `state()` creates reactive objects. It wraps plain JavaScript objects in Proxies for automatic dependency tracking and change notification. @@ -12,7 +16,7 @@ description: Create and manage reactive objects with automatic dependency tracki function state(initial: T, hooks?: StateHooks): T ``` -Returns a Proxy-wrapped version of the input object. Passing a non-object returns the value as-is. See [Hooks](/v2000.0.0/hooks-overview) for the optional hooks parameter. +Returns a Proxy-wrapped version of the input object. Passing a non-object returns the value as-is. See Hooks for the optional hooks parameter. ## Creating reactive state From 13ad3ae099e04fb3e3942773cd7ad9a0e553af96 Mon Sep 17 00:00:00 2001 From: nerdalytics <97166791+nerdalytics@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:26:39 +0200 Subject: [PATCH 4/6] fix(handbook): let prerender HTTP errors fail the build --- handbook/svelte.config.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/handbook/svelte.config.js b/handbook/svelte.config.js index 8159ac6..3cfe480 100644 --- a/handbook/svelte.config.js +++ b/handbook/svelte.config.js @@ -63,9 +63,6 @@ const config = { paths: { base: process.argv.includes('dev') ? '' : process.env.BASE_PATH, }, - prerender: { - handleHttpError: 'warn', - }, }, preprocess: [ vitePreprocess(), From 5d57f3064ca8c3d9ba12454653e671b073517146 Mon Sep 17 00:00:00 2001 From: nerdalytics <97166791+nerdalytics@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:47:27 +0200 Subject: [PATCH 5/6] chore(core): update mise node to 24.21.0 --- mise.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mise.toml b/mise.toml index 9cc5d57..884e9f8 100644 --- a/mise.toml +++ b/mise.toml @@ -1,5 +1,5 @@ [tools] -node = "24.14.1" +node = "24.21.0" [env] NODE_COMPILER_CACHE = "$TMPDIR/.node-cache" From eea4c25805a03c2dd17fcf42d46eb2d12c4293c5 Mon Sep 17 00:00:00 2001 From: nerdalytics <97166791+nerdalytics@users.noreply.github.com> Date: Tue, 13 Oct 2026 15:47:27 +0200 Subject: [PATCH 6/6] chore(core): remove CLAUDE.md symlink to AGENTS.md --- CLAUDE.md | 1 - 1 file changed, 1 deletion(-) delete mode 120000 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 120000 index 47dc3e3..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -AGENTS.md \ No newline at end of file