TRACEBUILD3.194
What's new

Every version of TRACEBUILD, newest first.

Currently 3.194 - released 2026-09-12. Written for the estimator, not the compiler.

3.194 #

Curved measurements, live

  • Draw measurements with curved boundaries. While tracing an Area, Perimeter, Length, Volume or Wall measurement, press and drag to pull the boundary into a smooth curve - the same gesture as the Pen. Curved measurements price exactly from the true curve mathematics, cutouts subtract precisely, and everything works with undo, save, reopen and PDF export like any other measurement.
  • Fixed: the Cutout tool could not find a curved measurement. Drawing a cutout inside a curved area reported "not drawn inside any Area" even though the shape was right there. Cutouts now attach to curved and straight measurements alike, using the same containment test the priced number uses.

3.193 #

Measurements meet curves

  • Cutouts now work inside curved measurement outlines. A measured area or volume with a curved boundary deducts its rectangular cutouts exactly - the billed number comes from the true curve mathematics, never from an approximation of it - and the drawing punches precisely the holes the number subtracts, on screen and in exported PDFs. A cutout sitting ambiguously on the curved edge is refused with a plain message instead of being guessed either way.
  • Committed measurements can no longer be silently flattened. Converting a curve to a straight chord on a committed measurement - which would shrink the billed quantity without anyone noticing - is now refused with an explanation; the same conversion on an unaccepted proposal stays available, because there the drawing visibly changes before anything is billed.
  • Refused curved measurements now appear in the QA panel with the actual reason, instead of being silently invisible.
  • Internal groundwork: the measurement scale resolver that will later power multiple scaled viewports per sheet, wired in its simplest form with zero behavior change; and a curved-drawing gesture for measurement tools, built and tested behind a disabled flag pending its live review.

3.192 #

The Pen is here

  • Draw freeform curves with a real pen tool. In the Lines flyout: click for a corner, press and drag to pull out a smooth curve, click your first point to close the shape, or double-click (or Enter) to finish open. Mixed paths work naturally - one curved segment never bends the straight ones.
  • Edit curves like a professional tool. Select a curve to get its anchor and tangent handles: symmetric handles stay mirrored, smooth ones stay aligned, and holding Alt breaks a single tangent when you need a corner. Every drag is one undo step.
  • Curves render exactly on screen and in exported PDFs (the control points are written through verbatim - no approximation), and curve lengths are computed to certified precision or honestly refused, never estimated.
  • Documents with curves remain safe in older TraceBuild versions: they show as locked placeholders and pass through saves untouched.

3.191 #

Curve foundations, part two

  • Internal groundwork for freeform curves: exact cubic curve mathematics (lengths computed to certified precision or honestly refused - never silently approximated), a complete pen-drawing and handle-editing lifecycle, faithful screen and PDF rendering, and safe file round-trips - built and tested behind a disabled flag. The pen tool turns on in a future release after the same real-drawing review the arc tools passed.
  • Documents containing curves are safe everywhere: this version reads and prices them exactly; older versions show them as locked placeholders and preserve them untouched through save.
  • Arc editing groundwork: segments of an arc can be converted to editable curves on drawing markups (measurements refuse the conversion - a committed quantity never changes shape silently).

3.190 #

Arcs are here

  • Draw true circular arcs. The Lines flyout gains two arc tools: a three-point arc (start, a point on the curve, end - sweeping wide when the curve calls for it) and a center arc (center, start, end, with the sweep following your cursor). Arcs select with the same easy grab as any line, edit with endpoint and on-curve handles, move, rotate, undo, save, reopen, and print as real curves - never as chains of straight segments.
  • Arc lengths and curved measurements are computed exactly from the geometry, not approximated from screen drawings. Impossible constructions (three points on a straight line, a zero-radius circle) are refused with a plain message instead of guessing.
  • Documents containing arcs are safe in older TraceBuild versions: previous releases show them as locked placeholders and preserve them untouched through save.

3.189 #

Drawing that behaves

  • Drafting is now interruption-proof. Backspace while tracing removes your last click instead of deleting the selected room; holding Space to pan no longer throws away the shape you were drawing; and a lost pointer (screen edge, driver hiccup) can no longer leave the canvas unresponsive with a half-drawn shape stuck on screen.
  • Thin lines are easy to grab at any zoom. Selection now uses a finger-sized screen tolerance instead of the painted stroke width - a hairline is as clickable at 25% zoom as at 400%. Clicking repeatedly on stacked markups cycles through them predictably, and double-click steps into a group to edit one member (Escape steps back out).
  • Locked means locked. A locked markup now refuses every change - moves, nudges, styling, grouping, count marks - not just some of them.
  • Labels stay readable on dense sheets. Detection chips now hide only when they would actually collide on screen at your current zoom (selected and hovered labels always win), replacing the old blanket cutoff. And you can now drag a label to a better spot - the caption moves, the measurement and its value stay exactly where they were, in the app and in exported PDFs.
  • Clearing detection candidates is now a single undo step.

3.188 #

Arc foundations (not yet visible)

  • Internal groundwork for true circular arcs: exact arc mathematics (measured in closed form, never approximated), a complete drawing and editing lifecycle, faithful screen and PDF rendering, and safe file round-trips - all built and tested behind a disabled flag. Nothing changes in the app yet; every existing document behaves exactly as before. The arc tools turn on in a future release once the full lifecycle passes review on real drawings.

3.187 #

Future-proof file safety

  • Documents from newer TraceBuild versions are now safe in this one. If a future version saves shapes this build cannot understand, opening that file no longer risks silently damaging them: unknown shapes load as locked, visible placeholders, stay out of all totals, and are written back exactly as they arrived when you save. Everything you can read stays fully editable. All existing documents open and save exactly as before.
  • Groundwork for measurement viewports: per-view scales can now carry their own report units and independent X/Y calibration (metric details on an imperial sheet, anisotropic profiles), validated the same way page scales are.

3.186 #

Markup quality groundwork

  • Saving a tool now captures exactly what you styled. Saving a selected markup to the Tool Chest snapshots every property from that markup itself - arrowheads, text color, alignment, bold/italic, symbol size - instead of relying on the side panel happening to be in sync. Presets reproduce the object you saved, every time.
  • A permanent baseline now guards every markup type. A reference document containing one of every markup type is round-tripped through save and reopen on every build - byte-identical, with committed and proposed quantities checked against the totals gate. Any future change that loses a field or leaks a candidate into totals fails the build.
  • Internal: the drawing-tool inventory and interaction contract are now recorded, and the arc/curve architecture designs are drafted for review - no curve tools ship until those designs are approved.

3.185 #

Cutout math you can bill from

  • Overlapping cutouts now deduct exactly once. When two or more cutouts overlapped inside one area, the shared region could be counted back into the total - a room with three overlapping cutouts billed more area than it has. Rectangular and other convex cutouts now deduct their exact combined footprint, and the drawing shows the same shape the math uses. If your documents contain overlapping cutouts, their areas may change - they are now correct. Overlap shapes the app cannot compute exactly are refused with a plain message instead of being priced wrong.
  • Very detailed outlines are actually checked now. A boundary with more than 2,000 points used to skip the crossing-edges check entirely and could price a broken outline as if it were valid. Dense outlines are now validated the same way as simple ones; in the rare case a shape is too complex to finish checking, it is marked "quantity unverified" instead of being silently trusted.
  • Groundwork (not user-visible): reviewed detection references can now be bound to the exact source PDF they were drawn on, and server deployments verify byte-for-byte that the running service is the build that was shipped.

3.184 #

The audit round: detection you can question, imports that cannot misfire

  • A broken room outline now says so. A room whose boundary crosses itself used to display "no scale" on a perfectly calibrated sheet, and the quality panel suggested fixing the calibration. The app now tells the outline apart from the calibration: broken outlines are named plainly, flagged as geometry problems to repair, and cannot be accepted into totals until fixed.
  • Only plausible doors make the door schedule. Accepting a room no longer silently certifies every attached opening as a door: openings with a zero or physically impossible width - or a width that cannot be verified because the sheet has no scale - move to a clearly labeled "needs review" list in every export instead of being counted.
  • The accuracy gate now checks shape, not just size. A detected room with the right area in the wrong place, or two rooms overlapping the same floor area, used to pass the accuracy check. The scorer now enforces outline fidelity and refuses double-counted area, and a reviewed reference must fully identify its source sheet - a missing field fails instead of silently weakening the check.
  • The account import can no longer misread a damaged export. An account row that arrives damaged is now proof the account exists - it can never be mistaken for a deleted account and removed, under any option. Unidentifiable damaged rows stop the cleanup step entirely until the export is fixed.
  • Server dependencies patched to close published security advisories; zero known advisories remain.

3.183 #

Account migration you can trust

  • The account import is all-or-nothing. Moving accounts between databases now happens in a single transaction: if anything fails partway - a bad row, a dropped connection, an interrupted run - nothing changes at all, instead of leaving some accounts refreshed and others stale.
  • Deleted accounts stay deleted. The import now notices accounts that were removed at the source and reports them; an explicit option removes them from the destination in the same all-or-nothing run. A safety guard refuses any run that would delete more than a fifth of existing accounts - a truncated export can never silently wipe real users.
  • Administrators can suspend and restore accounts through a proper authenticated endpoint: suspension signs the account out everywhere immediately, admins cannot suspend themselves, and every action is logged. (Accounts groundwork - not yet serving traffic.)

3.182 #

Honest measurement, hardened accounts groundwork

  • The accuracy reference now demands real review. The clinic labeling tool no longer marks rooms verified just because you touched them: each room gets an explicit review tick, editing a reviewed room clears its tick, and an export only counts as reviewed truth when every room is ticked and you confirm it deliberately. Exports say plainly what they are - reviewed rectangle labels, not traced polygons.
  • Accuracy scoring is bound to its sheet. The scorer now checks that a reviewed reference names the exact source document, page, and scale it was drawn on, and that every reference outline is genuinely measurable - a mismatched or malformed reference fails instead of passing silently. The real-sheet accuracy check now runs in the standing verification battery on every build, at the reference sheet's own calibration.
  • Earlier release notes described the clinic consistency check as if it were independent accuracy; the 3.180 entry now says what it measured.
  • Accounts groundwork (not yet serving traffic): unknown account states are now refused rather than treated as active, status changes validate their input, the service reports its exact build version and database health, and deployments fail loudly unless the service proves healthy.

3.181 #

A hardening pass over everything the last releases touched

  • Multi-view sheets get their full wall-face graph. A coordinate-frame slip could silently strip the drawn wall lines from the face set on sheets with more than one plan view; those views now project with the same fidelity as single-view sheets.
  • Doorway actions are one clean step. Flipping a door's room - from the panel or by clicking the door on the plan, which previously skipped the area re-allocation entirely - changing a door's allocation, or switching the doorway policy is now a single undo step, always shows the room-by-room area change before touching a committed number, and cancel changes nothing.
  • Doorways in L- and U-shaped rooms side correctly. The crossing at an inner-wall door now reads the room's geometry at the opening itself, so a concave room can no longer gain or lose a sliver of the wall cavity.
  • Rotated measurements bill true on profile sheets. On sheets calibrated with different horizontal and vertical scales, rotating a length, wall, radius, or diameter markup now measures what you see - previously a rotated line could report the unrotated distance. Station labels agree.
  • Collaboration is harder to break. A malformed markup from a session peer can no longer crash page rotation or force export columns; peer data now passes the same checks as opened files.
  • Excel workbooks now carry the same area-basis declaration as the CSV; re-running the reference-sheet derivation no longer disturbs its record; and the account-migration and standby-server groundwork picked up session-safety fixes ahead of any cutover.

3.180 #

Wall-face areas are now the standard for new detections

  • New rooms commit on the wall-face basis by default. The wall-face projection introduced in 3.179 is now on: where a detected outline genuinely rides the drawing's walls, it commits snapped to the finished faces and says so ("gross (wall face)"); where it cannot - furniture-lined boundaries, scans - it stays a declared outline. Nothing already in your documents changes: existing quantities remain frozen exactly as measured.
  • Consistency-checked on our public clinic sheet before flipping: today's detection matches the sheet's machine-derived reference record on all 25 rooms with under 1% area drift and zero wrongly-committed quantities. That reference is derived from detection itself, so this measures pipeline stability, not independent accuracy - a human-reviewed reference and the accuracy scores against it are the next milestone.
  • The reference sheet's room-by-room record now carries both bases (wall-face and raw outline), so future accuracy scoring judges each detection against the basis it actually declares.

3.179 #

Areas you can stand behind - and corrections that stay corrected

  • Your corrections now survive every re-detect. Dragging a detected room's corner, moving it, or adding a vertex marks it as yours - the next Detect Spaces run leaves it alone, exactly like an accepted room. Committed rooms from older documents are never silently swept and recomputed either.
  • Every room area now declares what it stands on. New detections can commit on a wall-face basis - the outline snapped precisely onto the drawing's own wall faces instead of the raster-hugging trace - and every room is labeled honestly: "gross (wall face)", "outline (not projectable)", "legacy outline", or "as drawn". Existing quantities are frozen as-is and never recomputed. Exports gain a Basis column and an AREA BASIS declaration line - only when a document actually carries wall-face rooms, so existing exports are unchanged. (Wall-face commit ships OFF by default while we finish measuring it.)
  • Doorway areas are now an explicit choice. Measure ▸ Doorways: excluded / split / owner decides who counts the floor inside each doorway - a straight line across the opening at the finished wall faces, never a guess. Each door can override the sheet policy from the Detected Spaces panel, changing a committed room's number always asks first, and no square foot is ever counted twice.
  • Small closets recover more reliably: the high-resolution second look now respects rooms you have accepted or corrected, and sizes its search window to the sheet's scale instead of a fixed guess.

3.178 #

Doorways the detector finds for you - and asks about first

  • Auto-proposed doorway seals. Detect Spaces now reads the door swings drawn on the sheet - including the ones CAD software flattens into short line runs, which most plan sets use - and where a swing marks an opening the normal pass could not close (a jogged or cased doorway), it draws a short dashed red seal PROPOSAL there instead of guessing. Nothing changes in your takeoff until you accept: Measure ▸ Confirm proposed seals shuts every proposed opening and re-detects; Discard clears them. On our dense clinic test sheet this proposes nine real 3'-0" doorways, every one at the sheet's standard door width.
  • Doors now say how they were found. Each detected door records whether a drawn door swing corroborates it or it was inferred from a wall gap alone - 11 of the clinic sheet's 28 doors carry swing evidence - groundwork for the review workbench.
  • Proposals are conservative by construction: a swing only proposes a seal when its hinge and leaf both land on wall-verified jambs and the swing radius matches the opening - furniture arcs, counters and leader curves are rejected by that test.

3.177 #

A wall schedule you can trust at a glance

  • Walls that bound no room hold back for review. Trace Walls now checks every candidate against the rooms detected on the sheet: a wall that actually bounds a room keeps its confidence, while line-work that bounds nothing - cabinet runs, dimension rails, stray parallel geometry - commits as a weak candidate that a bulk Accept deliberately skips. On our two-view test sheet that kept every one of the 24 off-boundary candidates out of the one-click schedule while all real walls stayed confident. Nothing is deleted: weak candidates remain on the sheet for your review.
  • "Not a wall" sticks. Select a wall candidate that should never have been traced and discard it - the app remembers that judgment with the document, and no re-trace will propose the same line again. Bulk discards stay a clean sweep and record nothing.
  • Every traced wall now also records which detection pass produced it (drawn line-work or the solid-wall scan), groundwork for the coming review workbench.

3.176 #

Teach detection where a room really ends

  • Seal an opening. When detection keeps leaking a closet or side room through a doorway, drag one short line across the opening (Measure ▸ Seal an opening). The line snaps to the jambs, becomes a permanent barrier saved with the document, and the sheet re-detects immediately with the opening shut - every future re-detect respects it too.
  • Split an open plan. Where two areas share one open space - kitchen and living, or dining flowing into a hall - drag a room separator across the transition. Both sides re-detect as separate areas. A regular separator makes cautious FUNCTIONAL ZONES that never slip into a bulk Accept (you accept each side deliberately); a hard separator is for boundaries you are certain of and produces two full room candidates.
  • Seals show as solid marks and separators as dashed lines right on the sheet, undo like any edit, travel safely inside shared files, and one menu action clears a sheet's lines without touching the confirmed drawing-view layout.

3.175 #

Multi-view sheets detect one drawing at a time

  • No more double rooms from combo sheets. On a sheet that carries a floor plan beside its ceiling or electrical plan, Detect Spaces used to find every room twice - once per drawing. The app now reads the sheet first: it finds the separate drawing views by their printed titles, shows you what it found, and after one confirmation detects the floor plan alone. The ceiling view stays on the sheet, labeled and linked, and never double-counts a room. On our two-view test sheet this took the result from 12 rooms (5 of them duplicates) to the correct 7 - and ran four times faster, because each view is read at its own sharper resolution.
  • Sheets with one drawing are untouched. Single-view sheets detect exactly as before, with no prompt. When the app cannot confidently tell the views apart, it asks instead of guessing - and your answer is remembered with the document, so every re-detect after that is silent.
  • Verified against three real plan sets before shipping: the two-view farmhouse sheet (duplicates eliminated), a dense 32-room clinic sheet (identical results, zero prompts), and a residential permit sheet (identical results, one confirmation).

3.174 #

The app learns to read a sheet before detecting on it

  • Groundwork: one sheet, many drawings. A lot of construction sheets carry two or more drawings side by side - a floor plan next to its ceiling and electrical plan is the classic layout - and detection used to read the whole sheet as one drawing, so every room came back twice. The app can now recognize the separate drawing views on a sheet, tell a floor plan from a ceiling plan by its own printed title, and aim detection at the floor plan alone while keeping the ceiling view for reference. This ships switched off while it is validated against real plan sets; nothing changes in detection behavior yet.
  • Corrections that stick. The groundwork also includes a place for your own instructions to the detector - confirmed view layouts, sealed doorways, room dividers - that saves with the document, survives every re-detect, travels with shared files safely, and can be undone like any other edit. The tools that write these instructions arrive in the next releases.

3.173 #

Trace Walls you can actually read

  • Wall chips no longer bury the drawing. On a sheet with many traced walls, the per-wall type and length chips appear only for the wall you select; a small boxed trace (12 walls or fewer) stays fully labeled, and hand-drawn walls always keep their labels. Each chip also now sits at the true middle of its wall instead of piling up on the corner it shares with its neighbors.
  • Multi-view sheets classify sensibly. A sheet that carries two drawings - a floor plan beside a ceiling or electrical plan - used to grade nearly every wall as interior, because "exterior" was judged against one box drawn around both views. Each connected wall network is now judged against its own outline, so both views keep their real exterior shells. Small isolated fragments can never masquerade as their own building.
  • The Clear chip now covers everything detection makes. The always-visible chip at the bottom of the sheet counts detected walls, runs, and estimated fittings alongside spaces ("12 spaces · 75 walls on this sheet"), so one click sweeps a mis-fired trace the same way it already swept mis-fired rooms. Accepted and hand-edited items are never touched.

3.172 #

Detected takeoff is review-first, everywhere

  • Detected runs, traced walls, and estimated fittings are candidates until you accept them. Detect Runs and Trace Walls now propose their results the same way Detect Spaces proposes rooms: dashed on the sheet and excluded from every total, export, and estimate until you accept them (Measure ▸ Accept detected runs & walls). Untagged line-work - ink classed only by pen style - is marked weak and stays out of the bulk Accept, so generic linework can never slip into a bid unreviewed. Accepted items survive a re-detect without duplicating.
  • No floor is ever counted twice. Room recovery and the under-duct merge now enforce a strict ownership rule: a recovered or merged room that overlaps a room you already have is rejected outright instead of quietly double-counting the shared floor, and a boxed detection can no longer recover rooms outside the box you drew.
  • The public accuracy benchmark verifies itself before it ships. The downloadable bundle now runs both of its own checks before the site build can publish it (a missing file made the room-detection runner fail for downloaders of the previous version - the published wall numbers were unaffected), and the room runner now enforces the same geometry floors our CI enforces, so the download is never weaker than our own gate.
  • Stronger room-detection scoring. Room matching now uses an optimal assignment at any sheet size, precision counts phantom proposals against the score, and the scorer reports its matching method alongside the numbers.

3.171 #

A stability fix and a leaner, faster load

  • Room naming no longer stalls on scanned or text-labeled sheets. A crash in the auto-naming pass could stop it partway on drawings where rooms are named from the plan's own text; naming now runs to completion, and the safeguard that flags a merged room holding two room names works again.
  • Faster first load. The browser edition ships a leaner bundle by dropping 3D-viewer modules it never loads, so the app downloads and starts quicker with no change to features.
  • Privacy wording is consistent everywhere. Every page now says drawings are processed on your device *by default*, with the two optional cloud features (scanned-sheet OCR and symbol verification) clearly marked as opt-in.

3.170 #

Trust and first-run fixes from an independent quality review

  • The built-in sample plan finds its rooms. On the bundled demo drawing, room detection now keeps its four rooms (as reviewable proposals) instead of discarding them as site features. A sparse-but-labeled room is proposed for your review, never silently dropped.
  • Clearer privacy disclosure. The privacy policy now spells out the two optional cloud features in the browser edition (they stay off until you turn them on), exactly what each one sends, to which provider, and how it's retained. The desktop edition keeps everything on your machine.
  • Tighter cloud-usage safeguards. Cloud OCR now keeps each document's work fully isolated, never reuses another sheet's result, and checks a request's full cost against your monthly allowance before it runs.

3.169 #

Room detection that holds up on the hard drawings

  • Doors seal on angled and near-vertical walls. Rooms on either side of a doorway now stay separate even when the wall is drawn at a slight angle, far across a large sheet, or as two offset pieces - cases where the boundary could previously leak and merge two rooms into one.
  • Sharp on high-resolution screens. Door sealing now sizes itself to the drawing, not the display, so detection is just as accurate on a 4K laptop as on a standard monitor.
  • Reads scanned-plus-CAD hybrid sheets. On a sheet that mixes a vector title block with a scanned plan body, duct and pipe tags found in the scanned area are now included in the takeoff instead of being skipped.
  • Accepted rooms stay accepted. Once you accept a detected room, re-running detection on that sheet keeps it - it no longer disappears from the by-space list or your exports.

3.168 #

A takeoff you can trust - sharper reads, safer numbers

  • Bad outlines refuse to bill instead of billing wrong. If a measured area's outline crosses itself - a stray click that makes a bowtie - the takeoff no longer quietly reports a too-small number. It flags the shape ("self-intersecting - fix outline") and leaves it out of the totals until you fix it, so a mis-click can never slip a wrong quantity into a bid.
  • Re-running detection never double-counts. Running Detect Runs or Auto-Takeoff a second time on the same sheet - after fixing the scale, say - now refreshes cleanly instead of quietly adding a second set of the same quantities to your estimate.
  • More mechanical scope reads automatically. Round duct mains in metric sizes (Ø1000 and up) now recognize, and a wider range of duct and pipe tags classify correctly - while ceiling-tile grids, door and window callouts, and stray marks are kept out of your duct quantities.
  • Every detected room stays a review candidate until you accept it. Rooms found under ductwork are proposed for your review like every other detection - nothing prices until you say so.

3.167 #

Read the sheets a scanner flattened - and catch every duct tag

  • Read scanned drawings with cloud OCR (browser). A scanned or photographed sheet with no selectable text used to be a dead end for search and takeoff. TRACEBUILD Lite can now read it through TRACEBUILD's cloud OCR service, so the sheet's words become searchable and its sizes and tags feed the takeoff. Like cloud verification, it asks your permission first, sends only the page images (nothing else from your project), and meters a monthly page allowance. The desktop app keeps every OCR read on your own machine, and always will.
  • Metric duct sizes and crowded tags now read right. The takeoff recognizes duct sizes written with the true multiplication sign (750×350), four-digit metric sizes (1000×350), and service tags drawn tight against their leader lines - so more of the mechanical scope on a sheet turns into priced quantities without a hand correction. This one helps every read, on both Lite and Pro.

3.166 #

The second opinion comes to the browser

  • Verify uncertain - now in the browser too. The AI second opinion on shaky symbol matches no longer needs the desktop app. In the browser it runs through TRACEBUILD's cloud service: it asks your permission first, tells you exactly what it sends (small cropped images of the matches - nothing else from your project), and your monthly allowance is metered. On the desktop app it still runs entirely on your machine, and always will.
  • You stay in charge of your data. Cloud verification never activates on its own: it asks once, your yes is recorded to your account, and you can withdraw it any time. Decline and nothing is ever sent.

3.165 #

The legend knows its place - and the AI gets a second look

  • Mark the legend, count the plan. New "Legend region" on the symbol bar: drag a box around the sheet's symbol legend once, and every symbol search treats what's inside as reference drawings - a legend entry can start a search but never counts itself. The marked legend is saved with your project and shows as an amber outline.
  • A second opinion on shaky matches (desktop). New "Verify uncertain": the lowest-confidence matches each get a close look from the on-device vision model - ones it doubts are pre-marked rejected for you to review, one click restores any of them. Everything runs privately on your machine, and your own clicks always outrank the AI's.

3.164 #

Symbol counting you can review - and sweep across the set

  • Reject a match with one click. After boxing a symbol, every found match is now clickable - click a box to reject it (it turns red), click again to restore it. Add counts only what you kept. No more all-or-nothing threshold guessing.
  • One symbol, every sheet. New "Sweep all sheets" on the symbol bar: box a symbol once and find it across the whole set. Review each sheet's matches the same way, then one Add counts them all - one count per sheet, one undo.
  • Your reviews make it smarter. Every accept and reject you make is remembered in the project file itself - building your own private record that future detection improvements will learn from. It stays in your file, on your machine. Nothing is sent anywhere.

3.163 #

Detection reads more of your drawings

  • Hybrid sheets finally read. A scanned plan wrapped in a CAD border used to fool the app - the title block's text made it skip reading the drawing itself. Detect Spaces and Detect Runs now notice when the plan body has no real text and read it automatically. Sheet callout links and batch redact see those pages too.
  • Split tags on scanned sheets now classify. A pipe callout that reads as two words ("2"" then "CW") used to match nothing; the words are joined back into one tag first, so scanned plumbing and conduit callouts land in the right trade.
  • Curved runs are measurable. Curved homeruns and arced runs were invisible to Detect Runs - curves now flatten into measured line-work that follows the arc.
  • Short branches survive. A fixture drop or tee that connects to a real run is kept instead of being discarded as clutter by the minimum-length filter.
  • One OCR read per sheet. Reading a sheet once now serves Find, detection and the scope scan alike - no more re-reading the same page for every feature - and any sheet a detection has read becomes searchable with Ctrl+F.
  • Batch redact refuses half-checked files. If any page's plan body could not be searched, the file now fails loudly with the reason instead of quietly redacting only what was readable - you will never get a file that looks sanitized but isn't.

3.162.2 #

Small fixes

  • The + tab opens a start page. Clicking + next to your open documents now opens a fresh start page - drag the next set of prints straight in, exactly like your first one, or click Open to browse. The document you open fills that tab; no more jumping straight to the file picker.
  • Dark mode dropdowns are readable. Selection menus (like the Theme picker) used to open a white list with white text in dark mode. Every dropdown now follows your theme.

3.162.1 #

Door schedule fixes

  • Door counts now wait for your Accept. A freshly detected door is a review candidate, just like its room - it no longer appears in the exported door schedule (CSV, MTO, JSON, Takeoff PDF) until you accept the room it belongs to. Your exports and your saved file now tell the same story.
  • Stacked sheets keep their own doors. On multi-story sets, a door directly above another door (stairs, elevators, typical units) could be wiped or flipped by an action on a different floor. Every door now carries its sheet in its identity, so re-detecting one floor never touches another - including in files saved by earlier versions.
  • Flip Owner sticks through more. Your choice of which room a door counts under now survives page rotates, page deletes and reorders, and re-detects on scanned sheets - not just a save and reload.

3.162 #

Detect Spaces now counts your doors

  • Every opening becomes a door you can count. After Detect Spaces finds the rooms, it now turns each doorway into a schedulable door - counted once, under the room it serves. The Detected Spaces panel gains a Doors section with a live count, and each door draws a small swing marker on the plan, tinted to match its room.
  • One-click Flip Owner. A door between two rooms belongs to one of them in the schedule. Click the door on the plan, or the flip button in the panel, to change which room it counts under. Your choice sticks: it survives a save and a re-detect.
  • The door schedule ships in your exports. The detected doors ride the estimate CSV, the MTO workbook (on their own Doors sheet), the takeoff JSON, and the Takeoff Summary PDF - a per-room door count you can hand a client. It works in the free tier with no pricing attached, and flattened or printed PDFs show the door markers too.
  • Counted once, even on double-line walls. A wall drawn as two parallel lines used to count each door twice; the two faces now merge into one door on the wall centerline, so the count matches the drawing.

3.161 #

A room's name can no longer hide its doubt

  • Sticky review flags. When detection doubts a room's SHAPE - its boundary barely follows walls, it claims an outsized share of the sheet, it leaks toward the exterior, or two different room labels sit inside it - that doubt now sticks to the room. Finding a printed name still labels it, but the room stays a dashed proposal until you accept it. Previously a confident-looking label could silently promote a doubtful shape into a hard quantity - the most expensive kind of wrong. Accepting a room in review is now the one action that clears the flag.
  • Same-named areas always stay separate. The last merge path that could glue two same-named areas (they touched across a paper-thin gap) is removed entirely, so results no longer depend on render resolution. Three PHARM WAIT areas are three areas; rollups by name still sum the same.

Door swings and open-plan areas (from the hero-image review)

  • Door-swing floor now heals almost everywhere. The wedge repair used to give up on a whole room whenever its walls-only flood also swept an open neighbor; the enclosure filter now does that policing per pocket instead. On the demo clinic sheet, healed rooms went from 1 to 20 of 23.
  • Waiting areas split correctly. The colonnade band that committed as one 218 SF blob is now CENTRAL WAITING, two LAB WAIT areas, PHARM WAIT, and FORMS WRITING - each named from the drawing.
  • Two-line labels read as one. "TRICARE" over "OFFICE" now names the room TRICARE OFFICE (five of them on the clinic sheet); "CENTRAL" over "WAIT." seeds the central waiting area. A modifier line joins its room-word line even when the modifier itself is not a room word.
  • Benchmark check commands are now read-only: verifying results no longer rewrites the results files (regeneration is an explicit separate step).

3.160 #

Detection stops reading spaces that aren't rooms

  • No more exterior "rooms." A hatched planting strip or walkway used to survive every filter and commit as a 750+ SF room - worse, a printed dimension figure ("250") inside it could become its *name*, which locked it in as confident. Three layers now stop this: a bare number can never name a room on a scanned/flattened sheet (a room name must contain a real room word); a new structural veto measures how much of a region's boundary actually follows wall vectors (site features are bounded by thin score lines, rooms by walls) - low coverage plus sparse ink drops the region, structural doubt alone demotes it to a dashed proposal you can keep or discard in one click.
  • Merged-room blobs get flagged, split, and shrunk. One detected "room" swallowing several real rooms (storage cells + corridor as one 400 SF "STOR 1") is the under-seeding symptom - the detector now: knows more label vocabulary (CORR, LATRINE, TLT, WAIT + prefix matching, so SUPERVISOR and RECEIVING count); reads stacked two-line labels ("PATIENT" over "ADMIN") as one name and one room; demotes any room claiming over 2.5x the sheet's median room to a reviewable proposal; and flags a room still holding two separated room-name labels the split missed. On the demo clinic sheet the storage blob split into its real rooms and every residual doubt is a dashed proposal.
  • Stairs stay stairs. Erasing stair treads (so the stairwell fills as one space) used to open the stair mouth into the corridor - the STAIR room then claimed the corridor too. The eraser now reseals each flight end where the drawing actually had ink, so the stairwell fills alone. The clinic stair shrank 33% back to its true walls.
  • Your corrections stay yours, twice over. Re-running detection already preserved edited rooms; now a fresh find that overlaps one of your edited rooms is skipped entirely (no double-counted floor), and the naming passes never rename or recolor an edited room.

3.159 #

Space labels that stay out of your way

  • No more black boxes. Space and area labels are now light chips - white with the room's own color as a border and dark text - instead of near-solid dark boxes that hid the drawing under them. A label that genuinely cannot fit its room renders as a small colored dot instead of spilling over the neighbours. Exports match the screen.
  • A visible Clear button. Once a sheet has detected or click-filled spaces, a chip appears bottom-center: *"N spaces on this sheet - Clear"*. One click sweeps them (undoable; your edited detections are kept). No more hunting the Measure menu.

Room Fill can't flood the sheet anymore

  • A click in a not-quite-enclosed room used to paint the entire page and commit a page-sized square-footage figure. The fill now recognizes a leak - it reaches the sheet border, spans the whole sheet inside the printed border frame, or covers an implausible fraction of the page - and tells you the room isn't enclosed instead of committing a phantom area.

Door swings finally count as floor

  • Detected rooms now include the floor under each door swing. The door glyph (leaf + arc) walls that wedge off from the room flood; a per-room reclaim pass reopens it - and only it: a reclaimed pocket must be fully enclosed by walls, the room, or a doorway, so the fix can never grow a room into a corridor.
  • Room Fill gets the same treatment: the door leaf no longer masquerades as a wall (real walls form a connected network; a leaf's swing tip floats free), so the swing wedge fills with the room.

Re-run detection now preserves your edits

  • The invariant. A detected markup you have edited - moved, renamed, re-costed, changed the trade or tag on - is never removed or overwritten by re-running the detector. The old behaviour swept every detected:true markup in the region regardless. If you correct 8 rooms and re-run Detect Spaces to catch a missed one, your 8 corrections survive.
  • Sweep predicates on Detect Spaces, Detect Runs (every trade variant), and Trace Walls all now skip a userEdited:true markup. The detector naming its own finds does not count as your edit, so Clear still sweeps pristine detections.
  • **Measure ▸ Clear detected** also preserves edited items and reports the count kept, so a sledgehammer on this sheet cannot wipe your corrections.
  • Rejection tombstones are wired in the store (per-page, persist through save/reload/tab-swap/page-reorder). The UI that creates them - a sidebar Review section with bulk accept/reject/reassign and a [Review] button on the symbol bar - ships next release.

3.158 #

What's new page + Help ▸ What's New in the app

  • New What's new page on the marketing site (/whats-new), linked from the header pill and the footer's Company column. Every shipped version, newest first, written for the estimator.
  • Help ▸ What's new in the app opens a reading modal with the latest four versions. A small ! dot appears on the version chip in the header when there's something you haven't read yet - click the chip (or Help ▸ What's new) to open, and the dot clears.
  • Single source of truth: repo-root CHANGELOG.md (Keep a Changelog format). scripts/build-changelog.mjs regenerates the marketing page + the app data on every web build, so a version bump plus a changelog entry updates both surfaces together.

3.157 #

Civil / sitework - rebar, polish, and a hardening pass

  • Rebar (concrete reinforcing) is now a first-class trade. ASTM #3 through #18 bar weights, per-ton pricing, and a slab-mat area (#4 @ 12" EW etc.) that explodes straight into fabricated-steel tonnage. New Measure ▸ Civil ▸ Rebar weight readout: pick a bar size and the selected runs report LF + tons on the spot.
  • Earthwork results panel replaced the terse status line - Average-end-area and grid/borrow-pit each open a cut / fill / net table with a surplus-or-import hint and a one-click Export CSV of the summary.
  • Flexible profile calibration - the H/V picker now has a Custom - 1 in = … ft entry per axis, so profile verticals like 1"=5' (not in the preset list) work without a workaround.

Correctness - 20 defects fixed from an adversarial review of my own recent work

  • Bid-schedule pay quantity no longer includes earthwork swell/shrink (loose CY stays in the loaded unit price, plan quantity is bank neat-line).
  • A per-ton item paired with a measured geometry that has no density (volume) or weight-per-foot (length) contributes zero and shows a wrong unit - not billed chip, instead of silently billing the raw ft³ or LF as tons.
  • Rotating a profile sheet ±90° now swaps the horizontal and vertical scales along with the geometry - every length on the rotated profile reads the right axis.
  • Report-area-in ▸ Apply to all pages patches only the display unit; other pages' calibrations are left alone (a mixed-scale set no longer gets rescaled).
  • Cross-section station field accepts station notation ("10+50") - not just plain feet.
  • Trench shoring / trench box now bids for a 5-ft trench, matching OSHA (previously strictly greater than 5).
  • Grid earthwork paste rejects ragged or non-numeric input instead of silently mis-placing nodes.
  • Station labels like "10+100.00" (the carry overflowing) can no longer be produced.
  • Sheet-extents label on a profile page reads per-axis (was the geomean, ~3× off in the reported width and height).

3.156 #

  • Civil delivery tools wired: Measure ▸ Civil menu with Bid schedule (CSV), Average-end-area earthwork, Grid cut/fill, Stationing, plus a Profile scale (H/V) calibrator and a Detect sitework one-click bundle.
  • New Cross-section property (Cut/Fill + station) on Area markups so the AEA report can roll them up.
  • The full civil roadmap (Tiers 1, 2, 3) is now user-facing.

3.155 #

  • Grid / borrow-pit earthwork core (gridVolume - the classic (a/4)(Σh₁+2Σh₂+4Σh₄) with cut and fill kept separate).
  • Stationing module: parse & format 10+50 notation, station values along an alignment by real arc length, station-equation-aware physical length.

3.154 #

  • Trench assembly - a buried pipe run explodes into trench excavation, bedding, and backfill CY based on width × depth.
  • Bid-schedule export (DOT pay-item schedule with plan quantities, agency pay-item codes, and per-line provenance back to the source markups).
  • Structure base + additional depth per vertical foot for manholes / inlets.
  • Average-end-area earthwork core (cut/fill CY between stations, kept separate - no netting at the section).

3.153 #

  • Civil area units: report area in acres, hectares, SY, or the default square units of your calibration - the priced quantity stays canonical.
  • Div 31 / 32 / 33 site-work cost seed: excavation, structural fill, riprap (per ton), asphalt lifts, concrete curb & gutter, a paving assembly, and the civil symbol pack (drop inlet, utility pole, sign, valve box).
  • Tons-via-density on volume takeoffs (riprap and similar).
  • Bank / loose / compacted volume state with swell or shrink percent, on the property bar for any volume markup.

3.152 #

  • Metric georeference reports the sheet unit correctly (previously an mm-calibrated sheet reporting metres was scaled 1000× by the georef).
  • Share and account rate-limiter hardening (fail-closed timing, per-IP + per-account buckets on the auth endpoints).

3.151 #

  • Georeferenced coordinate placement now reconciles the page scale to the georeference it derived, so a real-length measurement equals the real length you typed.

3.150 #

  • Room Fill / Detect Spaces reclaims the floor area under door swings and wall-mounted fixtures (toilets, sinks, water closets) - the gross-area rooms report matches the built floor SF instead of subtracting the swing arc.

3.149 #

  • Self-service account management: Profile page (change your name and email), Change password, and Delete account with confirmation (soft-delete for 30 days, then purged).

3.148 #

  • Detect a fixture button in the symbol picker - pick a symbol from the plan, auto-detect every match on the current sheet.
  • Set wall height now works per wall-type or all-walls in one gesture, from the wall property bar.

3.147 #

  • On-device vision AI: the bundled Qwen3-VL-4B lets the estimator ask the drawing natural-language questions ("what's on this sheet?") without shipping any pixels off the device.
  • Symbol bounding boxes are tighter (fewer over-wide false positives on dense trade sheets).
  • Rotated vertex editing on measurement polygons (was previously flipped on rotated pages).
  • 23-item punch list from an external design review - reworked and shipped.