mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-26 18:31:34 +01:00
Replace the source-regex board-key route inventory with an enumeration of the real Express router stack that createApp mounts. Express 5 does not keep the mount path string on a mounted layer, so a probe records it as each router is mounted; the inventory then walks the built app and reconstructs every final normalized path, including nested routers. Runtime-only surfaces (handlers injected through createApp options, plugin sub-apps) are declared through an explicit registration hook; anything mounted at runtime that is not registered resolves to undeclared and stays denied. The runtime set is compared bidirectionally with the explicit registry inventory so a reachable route without metadata (missing) and a declared row with no live route (stale) both fail CI. A regression registers a direct app.post and proves the gate fails on it. Declare the top-level /_plugins and /llms surfaces the runtime walk newly surfaces as explicit denials; deny and concealment behavior are unchanged. Co-Authored-By: Paperclip <noreply@paperclip.ing>