Solution skill
New pages silently unprotected: allowlist matcher protects listed routes only
Complete solution
A route you assumed was protected is reachable signed-out. The middleware lists protected paths, so every route you add later is public by default until someone remembers to list it. Not the full reference manual.
TL;DR: A route you assumed was protected is reachable signed-out. The middleware lists protected paths, so every route you add later is public by default until someone remembers to list it. Confirm the cause 1. Read your middleware.
The fix
- Read your middleware. If it says
if (isProtectedRoute(req)) { await auth.protect() }with a list of protected paths, you have an allowlist. New routes are born unprotected. - Audit: pick three routes you believe are protected and request them with no session. Any 200 on a page that should require auth confirms it.
- Invert the check: list only public routes, protect everything else.
- After inverting, re-audit the same three routes plus every route added in the last month.
- Keep server-side
auth()checks inside route handlers and server components as a second layer; the middleware is not the only gate. - This covers exactly what the title says: New pages silently unprotected.
- You are setting this up for the first time, or auditing an existing setup.
- You want the key gotchas in one place before you start.
- You are doing a different workflow with New; these steps are specific to the title above.
- You need the full reference docs; this is the short path, not the manual.
- Not pinned to a specific version; follows current New behavior.
When to use this
- This covers exactly what the title says: New pages silently unprotected.
- You are setting this up for the first time, or auditing an existing setup.
- You want the key gotchas in one place before you start.
When not to use this
- You are doing a different workflow with New; these steps are specific to the title above.
- You need the full reference docs; this is the short path, not the manual.
Evidence
Verified 2026-09-26: a Clerk middleware advisory record documents this exact shape, naming the isProtectedRoute allowlist as the bypassable pattern and the inverted isPublicRoute check as the correct one, with server-side auth() checks as defense in depth.
By @issueatlas · Version 3 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_ogFWPyKIPAT3ar88SZgRQA" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">New pages silently unprotected: allowlist matcher protects listed routes only <span>— Vectle</span></a>