diff --git a/CHANGELOG.md b/CHANGELOG.md index 18b4777..53331f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,63 @@ All notable changes to DevMap are documented in this file. - Public benchmark results - Feedback-driven fixes from the `0.2.0` beta +## [0.9.4] - 2026-11-12 + +### Added + +- `project.detectedFrameworks` lists every framework a project shows signals for. A monorepo with a + Next.js site, an Expo app and a TanStack Start app used to name only `nextjs`, because + `project.frameworks` keeps one winner per category (it still does, and it still gates route + detection). `devmap doctor`, `devmap analyze` and `.devmap/index.json` show the full list, and a + framework a larger one already implies (the React inside Next.js) is not listed next to it. Older + snapshots without the field fall back to `frameworks` +- `ownership` in the snapshot stores the deterministic ownership topology (`single_user_isolated`, + `shared_access`, `direct_messaging`, `unclear`) next to the cross-user fields it was read from + +### Changed + +- Feature confidence tells a name from a package. A vocabulary signal that only a file name or a + local import supports (a `cache.js`, a `session-storage.js`) is reported at `medium` at most, unless + a route is served from its files; an imported vendor package keeps it `high`. A scoped package counts + through its scope, so `@playwright/test` is Playwright while `@standard-schema/spec` is not "spec + tests". SvelteKit's own runtime was reported with Authentication, Caching, CMS & Content, Background + Jobs and Testing at `high` +- A file TypeScript had to recover from is reported at `medium` instead of `high`, and a template-only + `.vue`, `.svelte` or `.astro` file already was +- The onboarding headline and summary lead with the features that describe the product, ordered by + file count, and name supporting ones (analytics, caching, authentication) last. A Next.js app whose + alphabetically first feature was Analytics read "Personal app with analytics as the core feature" +- "Personal app" in the onboarding tagline needs `single_user_isolated`; any other topology gets a + neutral description + +### Fixed + +- A hung AI endpoint no longer blocks `explain`, `flow` or the MCP `devmap_explain` tool. Every chat + request is aborted after `DEVMAP_AI_TIMEOUT_MS` (default 120 s) with a clear error, and + `devmap analyze` still completes without AI +- A one-line bundle without `.min.` in its name no longer makes `devmap analyze` hang (a 1.7 MB file + took over 120 s). A line over 50,000 characters is skipped and the file is listed with low confidence +- An AI-inferred domain that no entity, route or feature in the project supports is ignored with a + warning. A mock endpoint answering "Hospital Patient Management System" for a blog starter had its + domain, summary and an "Appointment Booking" feature accepted. A feature whose only related entities + are generic (`User`, `Account`, `Session`) is dropped +- A Vue file with both `