# Changelog ## 0.6.3 (2026-11-02) - **Endpoints in route tables** (#54, from @Yahhi): servers without a framework often keep their endpoints in a lookup a dispatcher reads, keyed by method and path, like `{ "GET /api/orders": listOrders }` in JavaScript or a Python dict of handlers behind a cloud function. Floorplan found no endpoints in these apps, so the website's requests weren't linked to the server. Now each key is an endpoint, named after its handler (a function, an inline function that calls one, or a wrapped one like `requireAuth(createOrder)`). Tables of other things keyed the same way, like access levels or notes, are left alone. Health doesn't judge sign-in on these endpoints, because the dispatcher or the handler checks it where Floorplan can't see. - **Fastify endpoints get their full address** (#30, from @secatech): a plugin mounted with `app.register(plugin, { prefix: '/api/tickets' })` now puts its endpoints under that prefix, including plugins registered inside other plugins and ones loaded with `import()` or `require()`. Before, every plugin's endpoints sat at the root (`GET /`, `GET /:id`), so the website's requests were often matched to the wrong part of the server. - **Django endpoints get their full address:** an app's `urls.py` included by the project (`path("api/orders/", include("orders.urls"))`) now puts its endpoints under that prefix, as `/api/orders/` rather than `/`, so the website's requests link to them. The include line itself is no longer listed as an endpoint, and the project's `urls.py` links to the app's. Fixed by @rudycelekli (#64). - **Code after a `/*` inside a string is read again:** a string such as `'/api/*'` (as in Hono's `app.use('/api/*', cors())`) was taken for the start of a comment, so every endpoint, import and web request from there to the next comment's end was missing from the map. Fixed by @rudycelekli (#61). - **Skill installation:** quote the YAML description so `npx skills add` can read it. Fixed by @Bl0ck154 (#25), and @Mason-Little sent the same fix. - **Blueprints in Codex:** the build report now says a blueprint is "planned, not built yet" in Codex too. Fixed by @owlahikit. ## 0.6.2 (2026-11-02) - **Far fewer false alarms in Health** (thanks to @samuelpullen15-droid, who reported 13 of them from one site with the new **Not a problem** button): - **Feeds and files meant for everyone:** reading `rss.xml`, `atom.xml`, `llms.txt`, `ads.txt` and similar no longer counts as an open endpoint. - **Addresses you publish yourself:** an endpoint listed in your `llms.txt`, or allowed in your `robots.txt`, is public on purpose. A catch-all route counts when something under it is listed, and a blocked or merely nearby address doesn't. - **Responses marked for everyone:** a `Cache-Control: public` response is public on purpose, including when a helper it imports sets the header. So is a Next.js route with `force-static` or `revalidate`. - **Nothing private to give:** a Next.js `GET` that reads no database, session, cookie or server secret, directly or through what it imports, is no longer reported. A rate limiter's Redis doesn't count, an import Floorplan can't follow does, and so does reading files on a route whose address the caller chooses. - **Payload CMS:** the API routes Payload generates apply its own access rules, so they no longer read as "anyone could change data". - **A "POST only" reply:** a handler that only answers 405 isn't an open endpoint or a way to send fake events. - **Webhooks locked with a shared secret:** comparing against a secret from the environment, `timingSafeEqual`, and helpers like `isAuthorized()` or `verifyWebhookSecret()` now count as checks on Next.js routes. - **A browser tracker's site token:** a token handed to a tracker's `