Measure and mark up drawings with more consistent tools, organize specifications and drawing sheets, and repair existing PDFs without losing saved work. This release also reduces unnecessary work when opening saved markups.
Length, Polylength, Perimeter, Diameter, Radius and Angle share more consistent snapping, handles and labels. Polylength shows segment and total lengths. Text, callouts, clouds, lines, arrows, polygons, rectangles, ellipses and highlights use page-based geometry, with a pinned tool belt and an All Tools drawer.
Choose a preset, enter a custom ratio or calibrate from the drawing. Separate horizontal and vertical scales support profile views, and saved scale regions handle details drawn at a different scale.
Specification pages render with PDF.js and save markups on the server. The specification pane survives a reload through its URL, and documents with reliable section information are grouped by CSI division and section. Drawing navigation uses source-PDF structure, positioned text and drawing indexes.
Reprocess rebuilds stored pages from the original upload before refreshing text and folders. Page IDs, saved names, rotations, measurements and markups remain in place. Failed repairs resume from their checkpoint. The processing screen provides one Reprocess or Try again action per PDF and shows progress before the editor opens.
Sheet rotation now separates display orientation from saved geometry. Source-based orientation recalculation can be repeated while keeping markup coordinates fixed; stale saves are rejected instead of overwriting a newer rotation or another author's work.
Page and version reads overlap, unchanged authorized shared layers can reuse a bounded cache, and opening a page no longer schedules a save just because its state finished loading. Fresh access and version checks still run.
| Area | What to know |
|---|---|
| Migrations 073–078 | Separate specifications from drawing membership; add versioned PDF structure, positioned navigation, specification sections and drawing-index groups; resume stalled imports. Existing manual sheet order is preserved. |
| Migration 076 data change | Clears existing active plan/vendor sheet codes and titles and queues text v2, based on the original assumption that those fields contain automatic guesses. Confirm the production inventory before merging if data has been added. Text reprocessing uses stored page artifacts; use the new Reprocess action to repair damaged artifacts from the intact source. |
| Migrations 079–084 | Scope page rosters by project, bound queue-status reads, retain grouping diagnostics, reject obsolete navigation/grouping results, publish text and navigation together, and add renewable processing reservations. |
| Migrations 085–086 | Add durable orientation/rebuild runs and service-role functions for atomic state saves, presentation changes and resumable source-based repairs. They do not rewrite existing markup geometry during migration. |
| Hosted deployment | Dev has applied migrations through 086. Production needs the pending migrations in 073–086; CI applies them before deploying the web app and Modal workers. Check both deployment jobs: web publication and worker publication run in parallel. Do not apply migrations or deploy by hand for this release. |
| Worker configuration | The Modal layr-pipeline secret must include OPEN_ROUTER_API_KEY. Deployment checks the key's presence without printing its value. Fresh drawing-index inference may incur API cost; accepted reusable results can be rematched without another inference request. |
| Default tools | preAdamP1ToolsOnly defaults to true, including for older configuration that omits it. This restricts creation to the supported 17-tool list; change it at /admin to restore the wider toolbox. Takeoff and components retain their existing feature settings. |
| Access and saves | Project-processing upgrades require read access to inspect and write access to start. Specification pages use source-document project ownership. Rotation and scale regions are shared sheet properties; markups remain author-owned. New saves check both shared and user state together. |