Zoomed in to measure, a markup keeps the size it has at 100% while the sheet keeps growing. A new Length can start on an existing one, and its dimension line stays a short step off the span. Set Scale asks from the top bar, opens the distance beside the second click in ft' in", and gives a custom page value back as typed. A snap on a corner reaches a little farther and shows which corner it caught.
Line weights, dashes, arrowheads, caps, ticks, measurement numbers and their pills, and count dots stop growing above 100%. The sheet still grows, so a close zoom is for reading the drawing, not for a number taller than the window. At 100% and below, nothing changes. Export, print, the flattened PDF and Snapshot stay at the 100% size. Text boxes, callouts, highlights and pictures still grow with the page, and so do fills and hatch. (#826, ENG-345)
With a markup tool armed, a click on an existing markup draws over it. Two Lengths can share a point. A drag on the one you just drew still moves or edits it. The second click of a double-click that just finished a markup, and a Count click on the dot it just placed, still do what they did. A new Length's dimension line sits 14 screen pixels off the span at any zoom. Lengths already on the sheet keep the line they have. (#826, ENG-345)
While you click the two points, the prompt sits in the top bar: which axis, which click, Shift for a straight span, and Option (Alt on Windows) for no snap. Esc steps back one stage. The distance box opens in ft' in" beside the second click, follows that point when you pan or zoom, and stays on the canvas above the page strip. The two points and the dashed line stay drawn while you type. The short-span note and its Zoom in button are gone. Dropdown lists open upward when they would otherwise run off the bottom of the window. (#821, #822, #824, ENG-343, ENG-342)
A page value finer than 1/16", such as 3/32" = 1'-0", used to read back as 0.09" = 1'-0". Opening Set Scale again and saving that readout stored the rounded number, about 4% off. The card now gives back what you typed. Presets and older scales print an exact fraction down to 1/128", or a six-place decimal. The page box accepts 1/8, 1/8", 1 1/2 and 1-1/2, and a mm or cm suffix switches the unit. The real-world box accepts feet-inches marks in whatever unit is picked, so 1'-0" with feet selected is 1 ft. (#825, ENG-344)
On a sheet with its own Y scale, such as a profile, calibrating X used to drop Y's points-per-unit and leave one scale, with no warning. Y now stays, converted when the sheet unit changes, and each axis still reads in the unit it was set in. (#825, ENG-344)
A drawing corner, a line end or a crossing, reaches 16 screen pixels and wins over a closer point along a line inside that reach. A click just short of an arrow tip takes the tip. Points along a line, and markup vertices, still reach 10 pixels, so a Count click beside an existing count does not land on it. The marker is a square on an end, an × at a crossing, a triangle at a midpoint, and a ring along a line. (#825, ENG-344)
./layr eval run reads a labeled plan set through the same detector production uses and grades each mark, and the link derived from it, with a report of what was missed and why. ./layr eval review and ./layr eval approve take picked pages. ./layr benchmark references is retired. Production's published links are unchanged. (#818, ENG-333, ENG-331)
supabase/migrations is unchanged from 0.32.0. Dev had nothing new to apply, and production applies nothing new when this release merges. Do not apply anything by hand../layr benchmark references and reference-sweep are gone. Score sheet-link detection with ./layr eval run. It writes local run files and one line of verification/evals/runs.jsonl. A cache miss calls OpenRouter; --max-usd defaults to 2.00 per run and refuses further paid calls past that. No page in the committed truth is approved, so a run scores nothing until you pass --include-drafts or approve pages.