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