diff --git a/changelog/cli/0.10.36.md b/changelog/cli/0.10.36.md
new file mode 100644
index 00000000..5ddcdb14
--- /dev/null
+++ b/changelog/cli/0.10.36.md
@@ -0,0 +1,17 @@
+---
+package: "@webjsdev/cli"
+version: 0.10.36
+date: 2026-07-09T14:00:00.000Z
+commit_count: 4
+---
+## Features
+
+- **close coverage-gate deferred gaps with real scaffold demos** ([#870](https://github.com/webjsdev/webjs/pull/870)) [`e62d7e41`](https://github.com/webjsdev/webjs/commit/e62d7e41)
+- **add a tier-2 scaffold teaching-coverage gate for core exports** ([#861](https://github.com/webjsdev/webjs/pull/861)) [`35d180d2`](https://github.com/webjsdev/webjs/commit/35d180d2)
+- **add a boundaries gallery demo and harden the scaffold-sync skill** ([#854](https://github.com/webjsdev/webjs/pull/854)) [`5f7bd1f0`](https://github.com/webjsdev/webjs/commit/5f7bd1f0)
+
+## Fixes
+
+- **fresh saas scaffold passes typecheck and axe out of the box (#877, #878)** ([#879](https://github.com/webjsdev/webjs/pull/879)) [`72bb3611`](https://github.com/webjsdev/webjs/commit/72bb3611)
+ * Rewrite the `onBeforeCache` import to `#lib/utils/dom.ts` (it kept a registry-relative `../lib/dom.ts` and failed TS2307), and resolve `AUTH_SECRET` through a typed const with a production fail-fast guard (it was assigned as `string | undefined` to a required `string`).
+ * Give every generated page exactly one `
`, raise the gallery label text to full `text-muted-foreground` contrast, and add accessible names to the file-upload and ref-focus inputs, so a fresh app returns zero axe violations.
diff --git a/changelog/server/0.8.46.md b/changelog/server/0.8.46.md
new file mode 100644
index 00000000..6c4e50bc
--- /dev/null
+++ b/changelog/server/0.8.46.md
@@ -0,0 +1,11 @@
+---
+package: "@webjsdev/server"
+version: 0.8.46
+date: 2026-07-09T14:00:00.000Z
+commit_count: 1
+---
+## Fixes
+
+- **route(module) auto-applies an action's declared middleware and validate (#876)** ([#879](https://github.com/webjsdev/webjs/pull/879)) [`72bb3611`](https://github.com/webjsdev/webjs/commit/72bb3611)
+ * The `route()` REST adapter only ran the `middleware` / `validate` passed via its `opts`, so an action's declared `export const middleware` protected the RPC boundary but not the REST one (a function reference cannot reach its sibling config exports).
+ * `route()` now also accepts the action's module namespace (`import * as postActions from '...'; export const POST = route(postActions)`) and auto-applies the declared `middleware` and `validate`, so a guard declared once beside the action protects both boundaries. The bare-function form is unchanged, and an explicit `opts` value still overrides the declared config.
diff --git a/package-lock.json b/package-lock.json
index f7b7b6a8..dc1efd0d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6975,7 +6975,7 @@
},
"packages/cli": {
"name": "@webjsdev/cli",
- "version": "0.10.33",
+ "version": "0.10.36",
"license": "MIT",
"dependencies": {
"@webjsdev/mcp": "^0.1.0",
@@ -6991,7 +6991,7 @@
},
"packages/core": {
"name": "@webjsdev/core",
- "version": "0.7.30",
+ "version": "0.7.32",
"license": "MIT",
"devDependencies": {
"esbuild": "^0.25.0"
@@ -7039,7 +7039,7 @@
},
"packages/server": {
"name": "@webjsdev/server",
- "version": "0.8.43",
+ "version": "0.8.46",
"license": "MIT",
"dependencies": {
"@webjsdev/core": "^0.7.1",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 19686931..93cb6eee 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@webjsdev/cli",
- "version": "0.10.35",
+ "version": "0.10.36",
"type": "module",
"description": "webjs CLI - dev, start, create, db",
"bin": {
diff --git a/packages/server/package.json b/packages/server/package.json
index 7a1b300a..8d8c8f10 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,6 +1,6 @@
{
"name": "@webjsdev/server",
- "version": "0.8.45",
+ "version": "0.8.46",
"type": "module",
"description": "webjs dev/prod server: SSR, router, API, server actions, live reload",
"main": "index.js",