v0.6
Current releasev0.6 is a hardening release: no new PRD features, every item repairs a defect found in the v0.5 full-product sweep, docs/reports/FEATURE_REPORT_v0.5.md §4 (30 defects, D-1…D-30). An independent acceptance pass re-ran every defect's original reproduction against a rebuilt stack and reported PASS — none reproduce any more (see the report's "v0.6 addendum" for the fixed-in commit of each). The four features the v0.5 sweep graded PARTIAL — Upload (FR-3), Conversion progress (FR-4), Review queue (FR-6) and Guided pipeline state (FR-15) — were re-graded PASS.
Defect classes fixed:
- Upload & conversion tracker. "Start conversion" can no longer fire while sheets are still uploading — it silently converted only the sheets committed at that instant before. The ten-stage tracker now renders a
failedstage with its own icon, sub-label and duration instead of going blank. A background-tab completion notification fires once per job, not twice. The header CTA no longer flashes stale immediately after a conversion auto-navigates to the workspace. - Review & version integrity. On the mesh route, two flagged openings sharing a host wall now render distinct evidence tiles, each localised to its own element instead of the whole host wall. The toolbar's IFC download always matches the version selected on screen, never silently the latest. A freshly flagged room's review card shows its area immediately, without waiting for a re-export. The sticky "N corrections pending" indicator survives a hard reload or a Dashboard round-trip. The "N of M reviewed" counter is server-truth and no longer resets on reload. The isometric fallback no longer lets an unfilled roof/slab outline swallow clicks meant for a space underneath.
- Admin & usage. The Usage and Admin screens now have automated test coverage. The seat count no longer flashes a wrong number while loading (and Invite is disabled until it settles); usage/quota gauges show an honest "N over quota" instead of a misleading "0 remaining"; the run ledger defaults to 50 rows instead of the whole table; the dashboard windows its render with a "Load more" control instead of mounting every building's card at once; usage gauges follow the active project; user deletion asks for confirmation; Section/Elevation upload chips show a real titleblock descriptor where the sheet carries one.
- Viewport legends & copy. The element-count chip follows the active storey filter; the properties header no longer collapses the building name to a zero-width sliver next to the version selector; the by-source legend lists only the sources actually present; the by-class legend gains a Space swatch; the "No selection" empty state mentions spaces; the sign-in footer reads the real app version instead of a stale hardcoded one.
- Evaluation screen. A class a route sets no threshold for (2D Roofs) now reads "Not graded" and is excluded from the pass banner's class count, instead of a vacuous "1.00/1.00 · Pass" on a 0-of-0 measurement.
- Shared links.
GET /shared/{token}/sheet-outlinesnow serves the real, token-guarded outline data instead of a permanent 404 stub, so a shared link can show the FR-16 drawing ghost. - Mock-adapter honesty. If an uploaded sheet's content hash differs from the one recorded in its canned trace, the conversion now records a loud assumption saying so, instead of silently replaying a judgment keyed only on filename.
Behavior changes (DECISIONS D-042 — the only intentional output drift in this release; geometry, GUIDs, fixture IFC bytes and eval metrics are otherwise byte-stable):
- Plan-only sheet sets now convert. A sheet set with no elevation levels no longer hard-fails at stage 5 — it converts using PRD §8's documented 3000 mm storey-height default, with a building-scoped assumption recording it. (The pre-existing "neither plans nor mesh present" failure is unchanged.)
- The slab-thickness assumption's basis is re-cited. The audit trail no longer claims "PRD §8 default" for the 250 mm value PRD §8 actually states as 150 mm; it now cites "canonical default (MODEL_SCHEMA.md, D-042)" — the deviation's real source.
- A storey-height override (FR-19) now applies only to storeys whose height came from the default/assumption path, never to a measured one — a fully-measured building records the override but changes nothing on screen, and the panel says so.
- The assumptions log is now insertion-ordered when timestamps tie, instead of falling back to arbitrary UUID order.