Release planning

CadCraft 0.9 impact map

Every fix and feature lined up for 0.9, and what each one touches: which apps, and which layers of the stack.

ProjectCadCraft
Sheet0.9 impact
Items273
Date2026-11-09
115Fix
147Feature
4Spike
0Platform
0Site ops
0Sanity check
7Decision
≈ 0days in the written 0.9 plans
  • Planned 0 on the plan for the release it is filed under
  • Built 271 built and working in /lab (the dev builds). Whether the public has it is its reach: "in the lab", "Live" (the last gate) or "switched off"; see docs/REACH-LIVE.md
  • Partly built 1 part of it is built in /lab; the rest waits (see "Waits on")
  • Promised 0 the live site already says it is coming
  • Moved 0 moved here from an earlier release or wishlist
  • Found 0 bug found after a release shipped; fixed in a point release or the next one
  • Candidate 0 recommended in a spike or session log; owner to choose
  • Community please test 0 built and in /use; a Discord post gives the steps and the expected result and asks people to try it on their own devices, files or know-how
  • Decision Time 0 a decision, check, file, key, flag or go only you can give; folds into the list once answered

Built means built and working in the lab. Live means the public can use it, and is the last gate: 270 Built · Live, 1 Built · in the lab.

Sheet 1 · impact areas

Where 0.9 lands

How many items touch each app and each layer, by kind. One item can touch several areas, so the rows add up to more than the item count. Pick a row to filter the schedule below.

Impact areaFixFeatureSpikePlatformSite opsSanity checkDecisionAll
Apps
CadCraft 38 36 – – – – 2 76
BimCraft 27 53 2 – – – – 82
ModelCraft 19 45 2 – – – 2 68
MarkupCraft 16 11 – – – – – 27
TakeoffCraft 18 7 – – – – – 25
CivilCraft 14 32 – – – – – 46
DetailCraft 13 13 – – – – – 26
PartCraft 18 27 1 – – – – 46
Studio 2 5 1 – – – – 8
SuperCad Studio 22 17 – – – – – 39
Layers
Site and services 7 11 – – – – 5 23
Desktop host 1 1 1 – – – – 3
App shell 2 1 – – – – – 3
App code 10 28 3 – – – 3 44
Our engines – 12 1 – – – 1 14
Vendor engines – – – – – – – 0
Drawing surface – – – – – – – 0
Help and words 1 2 – – – – 1 4
Tests and tooling – – – – – – – 0

Sheet 2 · schedule

Every fix and feature

Grouped by track. App chips carry each app’s layer colour; Studio is in ink. "Waits on" names what has to happen first; the small lines under it say who asked and where the item is written up.

Add an item Fork map (Rust and C++ forks) The roadmap

Issues sync every 10 minutes; last sync Nov 9, 2026 7:00 pm.

ItemWhatAppsLayersStatusDaysWaits onIssues
Fixes 104
FixFX.23 Link to FX.23Comment on FX.23 CadCraft: moving a hatch left its pattern behind

MOVE, ROTATE and SCALE moved a hatch's outline but its pattern stayed anchored where it was, so the lines shifted inside the shape. geom.js txEntity now takes the origin along, and for built-in patterns the angle and scale on a turn or scale. Mirror keeps the pattern angle. Found while building PLAN2D.1. Test tools/cadcraft-test/plan2d.mjs. Not tested: patterns from a file (custom lines) under rotation, which keep their angle.

CadCraft Built · Live – – From: Discord community (Discord) Discord, a Discord member, 2026-11-02
FixFX.47 Link to FX.47Comment on FX.47 Hatch pattern files (.pat) in CadCraft

Asked on Discord by a Discord member: does hatching work, and can .pat files be used? Hatching already worked (16 built-in patterns, scale, angle, origin, islands, associative, and a DXF/DWG file's own patterns). New: the HATCH command has a Pattern file option (F) that reads a .pat file (one or many patterns, comments, dashes and dots), and the patterns can be used by name (P, ? lists them). The hatch keeps its pattern with it, so it still draws on another computer and still takes scale and angle in Properties; DWG save writes its lines. A .pat file has no unit: sizes are taken as drawing units. New file: a Discord member/patfile.js; hatch.js patternFamilies; test: 'Hatch pattern files' (6 checks). Not done / untested: no pattern picker with previews; a patterns library that stays between sessions (the file is read again next time); a real .pat file from another program (tested with files written to the format only); DXF export still writes the outline only (as for every hatch).

CadCraft Built · Live 1 – From: Discord community (Discord) Discord, a Discord member, 2026-11-05
FixFX.3 Link to FX.3Comment on FX.3 CadCraft: Thai text prints in a PDF plot (was "?")

Reported on CadCraft 0.7.1 in the browser: PLOT to PDF printed every Thai character as a question mark (command line: '219 characters the PDF font has no glyph for'). Cause: plot.js embedded Liberation Sans (Latin, Greek, Cyrillic) and fell back only to the CJK font, which has no Thai. Fixed in the a Discord member build: a Thai font (Noto Sans Thai, OFL 1.1, Thai + Latin + digits, ~220 KB, assets/vendor/thai-sans, current symlink) is fetched only when a plot has Thai text, subset to the glyphs used and embedded with a ToUnicode map. Thai tone marks are placed by pdf-font.js (the font has no layout engine here): centred over upper vowels, over sara am's ring (น้ำ), left of tall consonants (ป่ ฝ่ ฟ้), lower vowels under ญ ฐ. Checked by rendering a PDF (ที่ นี้ ผู้ ก็ ป่า น้ำ ห้องน้ำ พื้น ชั้น) and by 6 new tests in bin/test-cadcraft.mjs (2772 pass). Not covered: characters the Thai font lacks (± and ⌀ print "?" in a Thai plot and are counted in the report); one font per file, so a drawing with Thai and Chinese together keeps whichever leaves fewer "?"; Arabic, Hebrew and Indic scripts still have no font; SVG / PNG plots use the browser's fonts and were not changed. LIVE in the browser edition since 2026-11-03 as CadCraft 0.8.2 (0.8.1 plus only these files; docs/releases/0.8.2.md). Studio and the desktop apps get it with the next Studio build.

CadCraft Built · Live – – From: site feedback (Site) support email 2026-11-03, CadCraft 0.7.1 browser
FixFX.10 Link to FX.10Comment on FX.10 SRK bubble point lands on a wrong root near the critical region

lib/process: SRK methane/propane 40/60 at 30 bar flashes two-phase at 230 K, yet the bubble point at 30 bar is 269.8 K; the vapour-fraction flash inherits it. Likely wrong root near the critical region. Not fixed yet (docs/0.9-sessions/cape-open-09.md). engineer-09 2026-11-05: Reproduced (SRK methane/propane 40/60, 30 bar): bubbleT 269.77 K while flashPT was already two-phase from about 215 K. Cause found: not the cubic's root choice. The saturation scan starts at 30 K, where the incipient vapour collapses onto the feed (the trivial solution); that collapsed composition was carried as the warm start to every later grid point, so the residual stayed the 'no second phase' flag (-1) up to 269.8 K, where the flag flipped to a real residual and the bisection took the flip as the root. Fixed in lib/process/thermo.js: a trivial warm start is thrown away and the Wilson seed tried; every sign change on the grid is a candidate and the first one that passes the stability condition (Michelsen tangent-plane test: stable just on the liquid side, unstable on the other) is returned (result.stable). Now 214.43 K; flashPVF(30 bar, V of the 230 K flash) gives back 230.000 K (was 269.77). Reference (measured, not typed from memory): May et al., J. Chem. Eng. Data 60 (2015) 3606-3620, doi 10.1021/acs.jced.5b00610, via NIST TRC ThermoML data sets 3-4, 243.62 K isotherm: x(C1) 0.3442 at 3909 kPa -> SRK (kij 0) 3943 kPa (+0.86 %); x 0.071 at 891 kPa -> 908 (+1.96 %). Tests: node tools/process-test/test.mjs 132/0 (10 new FX.10 checks), all 13 other process-engine suites one at a time, real page: node tools/process-test/browser-fx10.mjs 4/0 (/lab/cadcraft, the Flash and saturation calculator) and tools/capeopen-test/browser.mjs 13/0. Copies synced to cadcraft and bimcraft a Discord member/process.

CadCraft Built · Live – – Found by session cape-open-09, 2026-11-03
FixFX.59 Link to FX.59Comment on FX.59 CadCraft 2D plan walls: joins are found by position at each edit, not stored; same edit rules as BimCraft wanted

Wall tool spec (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Assessed 2026-11-05 as part of FX.57. CadCraft's plan walls (lib/plan2d/walls.js, used by app/walls-cmd.js) have their own engine. followMoves already carries a wall joined end to end and slides a T end along its own line, which is more than BimCraft's Move does. But joins are still guessed from end positions each time (no join record), there is no Disallow join or Split that keeps joins, and a typed length or a thickness change has not been checked against the five rules (joined walls follow and stay joined, selected wall moves and the reference holds, location line holds, one undo step, Length and dimension name their reference). Wanted: run the spec's nine tests (they are plan-view, they apply as written) against CadCraft, fix what fails, and share the join record with FX.60. Not tried yet; nothing changed. Page 3 check (2026-11-05): followMoves puts a shared end at the moved end and leaves the far end, so a neighbour turns when a wall is moved sideways (finding 2 applies here too: FX.63); T ends already slide (finding 3 does not apply). Move already follows joins (finding 1 does not apply). walls-plan-09 2026-11-06 (done): Built in /lab: CadCraft plan walls store their joins. Each wall has its own id and the join records (end meets start, end meets mid for a T, mid meets mid for a crossing: the same record as BimCraft, rules in lib/walls/joins.js, checked equal to BimCraft's wall-joins.js); both walls carry it, in the... see docs/0.9-sessions/walls-plan-09.md.

CadCraft Built · Live 1 Hand check is community test WTPLAN-HAND (not blocking) From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (page 2)
FixFX.65 Link to FX.65Comment on FX.65 BimCraft thickness / type change: the corner follows only when exactly one straight wall meets the end

Wall tool spec page 3 (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Code checked in the a Discord member source 2026-11-05 (the spec read commit a538e43). Found while checking the 'Already right, keep it' list on page 3: updateWall, the location-line shift (changes.justification not centre): neighbours are looked up and then skipped unless nbs.length === 1 and the neighbour is not curved. So a thicker wall at a three-wall node, at a T, or next to a curved wall keeps its old corner and the junction is left open or overlapped, while the two-wall straight corner case Duncan tested works. Wanted: spec test 5 (set the location line to the exterior face, thicken the wall: exterior face does not move, wall grows inward, joins clean up) at L, T, X and curved neighbours. Not reproduced yet; nothing fixed. Other apps: the same question applies to CadCraft's plan walls (thickness change) and goes into FX.59's test run. walls-09 2026-11-06: Fixed in /lab: a location line that holds now moves the centre line square with the join solver (squareMove), so the corner follows at an L, at a node of three walls, at a T (the partition comes with it) and next to a curved wall. Spec test 5 Pass: node (--walltools) and the real page (outside face held at -92.1 with 300 thickness, both corners follow).

CadCraftBimCraft Built · Live 1 – From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (page 3)
FixFX.66 Link to FX.66Comment on FX.66 Wall + Move / Copy: a moved or copied group of rooms does not stretch the joined walls outside the group

Wall tool spec page 9, 'How other tools combine with the wall' (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Code checked in the a Discord member source 2026-11-05. Spec: move or copy a group of rooms and every joined wall outside the group stretches to stay joined (Place in space -> Join solver -> Follow; today Partly). Cause, from reading: Move is carryJoined: false (FX.62), and a copy goes through addWall (model-modify.js), so the copied walls are new walls that are not joined to anything outside the group, and nothing stretches. Wanted: Move stretches the outside neighbours (their ends slide along their own line, FX.63 / FX.60); Copy leaves the originals alone and makes the copies joined among themselves. Acceptance: spec test 1 style on a two-room plan, one undo step. OTHER APPS: CadCraft plan walls Move already follows joins (FX.59 notes the turning problem); Copy there is not checked. Not started. walls-09 2026-11-06: Checked, no code change needed after FX.62: a Move of a group of walls (one room of two) keeps the group's corners and the walls outside stay joined; Copy leaves the originals and the copies are joined among themselves (two corners). One undo step. Test: node bin/test-bimcraft.mjs --walltools (FX.66 block). Real page: the Move tool's group move was not driven in a browser by this session.

CadCraftBimCraft Built · Live 1 – From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (page 9)
FixFX.67 Link to FX.67Comment on FX.67 Wall Length and typed dimension: no choice of fixed end, no marker for the fixed side, no modifier-key drag to break a join

Wall tool spec pages 11-12 (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Checked in the a Discord member source 2026-11-05. Page 11 'BimCraft must' column, three things the code does not do: (1) Changing length: 'start end fixed by default; toggle to grow from the other end or the centre'. setLength (wall-square.js) always keeps the start end and moves the end; there is no toggle. (2) Typing a dimension value: 'a marker shows the fixed side before Enter'. No marker exists; the fixed side is not shown. (3) Breaking a join: 'only by Split, Disallow join, delete, or a modifier-key drag'. No modifier-key drag breaks a join (Split and Disallow join are WT.4 and WT.5). Wanted: a Grow from control on the Length field (start | end | centre) with the fixed side drawn on the plan while the field is focused, and a modifier-key drag (Revit's Move with Disjoin) that moves a wall without carrying its joins and keeps the wall's id. Spec tests 3 and 9. OTHER APPS: CadCraft plan walls have no Length field or toggle either (FX.59). Not started. walls-09 2026-11-06: Built in /lab: Properties › Grow from (Start holds | End holds | Centre holds) next to Length; the side that holds is marked on the plan while the Length field is in use; Alt + drag of the middle grip moves the wall free of its joins (they break, the id stays). Tests: --walltools (grow from end and centre, marker point), browser-walltools (grow from end, marker, Alt-drag).

CadCraftBimCraftSuperCad Studio Built · Live 1 – From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (page 11)
FixFX.72 Link to FX.72Comment on FX.72 CadCraft: the object snap menu cannot be reached (status bar Snap, OSNAP command)

Emailed report 2026-11-05 (desktop build): clicking or right-clicking the Snap button in the status bar opened nothing, and OSNAP, DDOSNAP, SHORTCUTMENU and CMDDIA answered Unknown command; only OSMODE (numeric) worked. The snap kinds list existed but only behind a small chevron at the end of the status bar. Changed (a Discord member): a right-click on Snap opens the snap menu (closes on an outside click); OSNAP, DDOSNAP, OSNAPSETTINGS and SHORTCUTMENU open it too (commands.js, cadcraft.js, lang/en.json, English only for now). CMDDIA stays a system variable, not a command. Untested in a browser or the desktop app. Reporter has no account yet: invite mailed 2026-11-05 to create one for a lab pass.

CadCraft Built · Live 1 – email 2026-11-05
FixFX.76 Link to FX.76Comment on FX.76 Documents opens as a centered dialog, not a box in the corner

Owner 2026-11-06: Documents seemed to do nothing, and on large screens the placement was wrong. It opened as a small box pinned to the top right of the drawing area, far from the button. It is now a modal dialog centered on the window with the page dimmed, in BimCraft, PartCraft and CadCraft through lib/vault. Esc, the X or a press on the dimmed page closes it. Opening a file or a copy closes it so the file can be seen. Tested at 1280 to 3840 wide in the standard, Vector and Duncan layouts on SwiftShader; not on a real large monitor or in a Studio build.

CadCraftBimCraftPartCraft Built · Live – –
FixFX.77 Link to FX.77Comment on FX.77 Studio and browser-edition packers: stale file lists (suite stubs, hub files, docinfo and About modules)

Found by mounts-09 2026-11-06 while building the Studio suite for the undo test. (1) studio/pack/suite-stubs.php WORKSPACE_MODULES lacked app-workspace-icons.js and app-workspace-vector.js, so node pack/suite.mjs stopped with "a plain re-render differs from the edition's index.html" for every app: a Studio rebuild could not have been made. (2) pack/suite.mjs HUB_FILES did not copy the new hub/undo-journal.js. (3) tools/shell-test/test-packed-imports.mjs failed 6 checks: devshell/edition.php and devshell/pack.php lacked docinfo.js, app-docinfo.js and app-about.js (DI.1, ABT.1), so packaged editions would have asked for files that are not there. All three lists fixed; the suite packs for cadcraft, detailcraft and takeoffcraft and the test reports "all packers list every imported shell file". The full eight-app suite was not rebuilt here.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 0.5 – docs/0.9-sessions/mounts-09.md
FixFX.78 Link to FX.78Comment on FX.78 Tests: the team button sits in a folded panel section; add-on buttons are not registry commands

mounts-09 2026-11-06: tools/bimcraft-test/browser-r5.mjs clicked [data-model-team] while the shell's panel accordion had its section folded (a person opens the section first; the test now does too). tools/shell-test/browser-input-apps.mjs's "every toolbar button is a registry command" no longer lists add-on buttons (data-addon-tool), as print-09 asked; ModelCraft's 3D Print button passes. Still failing there, not from this session: "Move the Tools toolbar" (the toolbar tear grip) and the Settings style-card radio that is not visible; and tools/civil-mount-test/browser.mjs la4 clicks the first of two "Ground modifiers" menu items, which is hidden.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 0.5 – docs/0.9-sessions/mounts-09.md
FixFX.83 Link to FX.83Comment on FX.83 Settings > Layout: the layouts are a drop-down of two-line choices, not a long radio list

The layout list (built-ins plus add-on and imported layouts) grew into a long radio column. Now a button shows the chosen layout (icon, name, hint) and opens a pop-up list of two-line choices, scrolling past 24rem. The radios stay inside the pop-up, so picking, the extras list, Remove and the keyboard (arrows between layouts) work as before; Esc, a pick or a click elsewhere closes it; without JS the list just shows. Files: app-settings.inc, app-settings.js (wsCur, wsOpen), app-shell.css. Checked: syntax and php -l; not yet tried in a browser. Owner tried it in /lab 2026-11-06: works.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraftSuperCad Studio App shell Built · Live – – From: owner (Owner) owner request 2026-11-06
FixFX.92 Link to FX.92Comment on FX.92 CadCraft: text styles (STYLE) and a font for every text

STYLE (ST, TEXTSTYLE; -STYLE on the command line; Draw > Text > Text style): named styles with font, height (0 = ask each time), width factor and oblique angle, kept in the file's STYLE table (DXF/DWG already read and wrote it). New TEXT and MTEXT take the current style's font, width and slant and carry its name; changing a style changes the text that uses it in one undo step; Apply to selected text; New / Set current / Delete (a style in use and Standard are refused). Text objects now have their own font (e.font) drawn and measured in that face (canvas measurement; monospace fallback). Files: textstyles.js, textstyle-ui.js, font.js, geom.js, view.js, mtext-draw.js, plot.js, commands.js. Tests: bin/test-cadcraft.mjs section Text styles and fonts; tools/cadcraft-test/browser-textstyle.mjs. Known limit: the plotted PDF sets text in Helvetica whatever the font (the screen and the plot preview show it).

CadCraft App code Built · Live – in /lab; outcome waits on the requester's lab pass (hand check: a font that is not installed falls back; plotted PDFs still set other fonts in Helvetica) From: Mohammad Imtaar (Staff) email 2026-11-06 (Mohammad Imtaar)
FixFX.93 Link to FX.93Comment on FX.93 CadCraft: MTEXT editor with font, size, bold, italic, underline, colour, alignment

The paragraph text box (MTEXT, TEXTEDIT, a double-click on text) is now a formatted editor: font list, size (the selection, or all of it with nothing selected), B / I / U / strike, colour, left / centre / right, degree, plus-minus and diameter signs, Ctrl+Enter to finish. It writes the MTEXT codes (mt) and the plain text (s), so find, snap, DXF and DWG keep working; text left unchanged keeps its own codes untouched; paste is text only. Files: mtext-edit.js, cadcraft.js (editText), commands.js, cadcraft.css. The command line's height (suggestion 1083, SU.1083) is the third point of the email: the handle on its top edge, or COMMANDLINE, or one line plus F2. Tests: bin/test-cadcraft.mjs; tools/cadcraft-test/browser-textstyle.mjs (headless Chromium).

CadCraft App code Built · Live – in /lab; outcome waits on the requester's lab pass (not built: bullet and numbered lists, the tab ruler, justify) From: Mohammad Imtaar (Staff) email 2026-11-06 (Mohammad Imtaar)
FixFX.96 Link to FX.96Comment on FX.96 CadCraft GRIDMOVE carried a whole plan wall that only starts on the grid line

Found by walls-plan-09 while locking walls to grid lines (WT.7): GRIDMOVE treats a block reference whose insert point lies on the line as a column and moves it whole, and a plan wall is a block reference, so a wall that merely STARTS on the grid line (the room's north wall at its east end) travelled away whole instead of being stretched. Fixed in gridmove.js: a plan wall is judged by its ends: an end on the line goes with it, both ends on the line move the wall whole, otherwise the wall stays. Test: node tools/cadcraft-test/walls-plan.mjs (WALLGRID then GRIDMOVE: east wall follows, south and north walls shorten, west wall stays). In /lab, not hand-tried: part of WTPLAN-HAND.

CadCraft Built · Live – – walls-plan-09 2026-11-06
FixFX.109 Link to FX.109Comment on FX.109 Accuracy: exact-equality comparisons reviewed, 7 given a tolerance, the rest tagged (new Changes tab)

Prompted by a community comment that floating-point == / === comparisons in the apps look suspect. All 367 candidates on /accuracy/comparisons were read. 7 now compare within a tolerance (1e-9 relative): electrical add-on (2 places), process dispersion, process vessel, PartCraft lattice, PDF rectangle corners (isAxisRect), window cut-list part merge. The other 277 were left exact on purpose (whole numbers, copied values, zero guards, typed codes, triangulation and ordering tie-breaks) and tagged with the reason in plain words. Every change is on /accuracy/changes with before, after, UTC time and a revert command (node tools/accuracy-equality/fix.mjs revert EQ-n). a Discord member (/lab) only. Not done: live shared shell (engines/risk/weibull.js, calc.js:240) waits for a release go; 6 needs-review items (EQ-0094, 0209, 0215, 0248, 0273, 0279) still to decide; app suites not re-run, edited files only checked to parse; reviewers' reasons come from reading code, not running it.

CadCraftPartCraft Built · Live – – From: community (Site) community comment, accuracy review 2026-11-07
FixBot obtainedFX.111 Link to FX.111Comment on FX.111 CadCraft help: "Not built yet" said a hatch cannot follow its boundary; .pat files had no help

PLAN2D.1 links a hatch to its boundary and FX.47 loads .pat files, but "Not built yet" still listed both as missing and hatch.md did not mention .pat. Rows corrected (gradient fills stay listed; a link made in another program is not read), a Pattern files paragraph added to the Hatch topic (only files written to the usual format were tried). Help rebuilt. Checked by reading; no test.

CadCraft Built · Live – – closing 2026-11-07
FixFX.112 Link to FX.112Comment on FX.112 CadCraft: the grid was drawn only inside the drawing limits even with the limits OFF

Drawing limits set (LIMITS) held the grid inside the rectangle whether the limits were on or off. Now the grid is held inside only while the limits are ON; OFF shows the full grid, and the limits outline stays, dashed. view.js drawGrid + limits.js note. Checked in the browser (tools/cadcraft-test/browser-aids.mjs, grid pixels outside the rectangle with limits off). Not checked: a drawing opened from a DWG that carries $LIMCHECK.

CadCraft Built · Live – – From: Mohammad Imtaar (Site) email 2026-11-07
FixFX.113 Link to FX.113Comment on FX.113 CadCraft: no Snap to grid (F9)

The status bar had only Object snap (called Snap, F3) and Grid (F7, display only). Added Grid snap (F9): picked points go to the nearest grid point of the UCS (the grid step on screen) when no object snap took the point; button in the status bar and every layout, F9, the keys registry (aids.gsnap), saved with the settings. Checked in the browser (browser-aids.mjs). Not built: a separate snap spacing apart from the grid (SNAPUNIT) and an isometric snap.

CadCraft Built · Live – – From: Mohammad Imtaar (Site) email 2026-11-07
FixFX.114 Link to FX.114Comment on FX.114 CadCraft: the object snap list could not be opened in the ribbon, toolbox and other layouts

The Object snaps list (chevron beside Snap) opened upward inside a block that clips its content (ribbon, status bar), so only Classic showed it. The list is now placed on the screen itself, up or down as there is room, and kept inside the window. Checked in the browser in all seven layouts (standard, docked, toolbox, autorev, duncan, vector, sketch): list fully visible and clickable. Not checked: a pop-out window of the aids.

CadCraft Built · Live – – From: Mohammad Imtaar (Site) email 2026-11-07
FixFX.115 Link to FX.115Comment on FX.115 CadCraft: long block list ran off the screen; INSERT gave no near names; FILLET radius prompt did not say clicks measure it

From four asks in one message. The block list in the side panel now scrolls inside its panel (max 24 rem / 45% of the window). INSERT: a name that is no block lists the blocks that start with or hold what was typed ("Did you mean"), and a name that is a block while others start the same way ("1" and "10", "12") says so. FILLET: the radius prompt says a value is typed or two clicks measure it (it already did). Already there and answered: UCS (UCS command), STRETCH by crossing window (select with C or drag right to left). Not built: a dropdown of candidates under the command line. Checked by reading + syntax; browser-aids.mjs covers the other fixes only.

CadCraft Built · Live – – From: young Ryu (Site) support message #1300 2026-11-07
FixFX.117 Link to FX.117Comment on FX.117 Accuracy Changes tab: search, filters, and a before/after check on each fix (1,000,000 inputs)

Owner 2026-11-07. /accuracy/changes now has a search box, tag chips and App / What happened / Before and after filters (server-side, 50 a page). Each of the 7 fixes was run before and after on 1,000,000 generated inputs (tools/accuracy-equality/verify.mjs, one recipe per change in checks/): all 7 show 'Corrected' (the old text was wrong on 13 to 45 percent of inputs, the new text on none) and link to /accuracy/changes/EQ-n with counts, samples and the seed; the raw file is /accuracy/changes/EQ-n.json and lives in core/data/equality-results/ so it can be copied to a CDN (.env NUMERICS_RESULTS_CDN makes the links point there). Limits: it runs the changed comparison text with generated inputs, not the whole app; the 'right answer' is within 1e-12 relative, which is my definition; 277 tag-only entries have nothing to compare. Not done: no revert button on the page; app suites not re-run.

CadCraftPartCraft Built · Live – – From: owner (Site) owner request 2026-11-07
FixFX.122 Link to FX.122Comment on FX.122 CadCraft: MTEXT OK button and part-text height, Text style in Annotate, command drop-down list, Multiline tool

Lab pass 37 feedback (Mohammad Imtaar, 2026-11-07) listed what still failed. Fixed in a Discord member: (1) the MTEXT box had no OK or Cancel button (they were made but never added to the box); (2) a new size typed for a selected part of the text was lost because the size box took the focus and the selection with it, so the whole text changed or nothing did; the selection is now kept the moment the box takes focus, and Enter leaves the box once; (3) the Text style tool was missing from the Draw toolbar's buttons, so the ribbon's Annotate tab had nothing to press, and the Ribbon style's Annotate tab had no text group; both added (Text, Paragraph, Text style); (4) typing in the command line now shows a drop-down list of every command that starts with the letters (arrows + Enter, or a click); (5) MLINE did not exist: new multiline (parallel polylines, Scale, Lines 2-8, Justification, Close, Undo) with a Multiline button in Draw. Test: tools/cadcraft-test/browser-fx94.mjs (9).

CadCraft Built · Live – – From: Mohammad Imtaar (Site) lab pass 37 feedback 2026-11-07
FixBot obtainedFX.130 Link to FX.130Comment on FX.130 CadCraft: DXF R12 export was refused by AutoCAD (dimension styles)

Reported on the Discord: a CadCraft R12 DXF would not open in AutoCAD, which said 'Unknown group 1001 for table' and then 'Omitted group 4'. Cause, in dxf.js: each DIMSTYLE record carried CadCraft's own settings as xdata (1001 CADCRAFT), which R12 tables do not allow, and the record left out groups R12 requires (DIMAPOST, group 4, when the style had no alternate text; also 46, 145, 175, plus a 270 R12 does not have). Now every record lists all the groups R12 lists, once each, in its order (dwg-props.js r12DimstyleItems), and the settings R12 has no variable for travel in a CADCRAFT_DIMSTYLES block the way the classes and Laser panel data do; files written before 0.9 still read. Tested: bin/test-cadcraft.mjs (record layout, round trip, old files). Not opened in AutoCAD here (none on the server): the reporter's AutoCAD is the check.

CadCraft Built · Live – – Discord #bug-reports, 2026-11-08
FixBot obtainedFX.131 Link to FX.131Comment on FX.131 Add-ons publish with the release: one command, held until the apps carry what they need

Owner 2026-11-08: add-ons that are ready must not wait for someone to remember them. bin/addon-package.php --release=0.9 checks every add-on against the add-on API 1.4 the 0.9 apps report and publishes it only when every app it targets has 0.9 (or newer) as current AND that build holds every engine:/host: file the package imports; until then it is listed as HELD with the reason (pid, lighting and harness are held now: CadCraft current is 0.8.2). After the release moves current: sudo -u www-data php bin/addon-package.php --release=0.9 --apply. Also: add-on help compiles per language (help/help.<locale>.js, build-help.php --addon) and the add-on loader picks the page's language (hvac and piping 0.9.0, 11 languages, machine drafts). Run sheet: docs/0.9-sessions/first-builds-09.md § Add-ons at release.

CadCraft Built · Live – – Owner, 2026-11-08
FixFX.137 Link to FX.137Comment on FX.137 Arc: all ten methods (3-Point, Start/Center/End/Angle/Length, Start/End/Angle/Direction/Radius, Center/Start/End/Angle/Length) and Continue

The Arc tool only offered a start point or a centre. Now every method is there, in CadCraft, ModelCraft, PartCraft sketches, MarkupCraft and TakeoffCraft, from one shared library (lib/arcs, copies via tools/arcs/sync.mjs). Arcs run counter-clockwise; a negative angle or chord length takes the clockwise arc, a negative radius the major arc. Angle, length, radius and direction can be clicked or typed. CadCraft also has Continue (Enter at the start point) tangent to the last line, arc or polyline, and a split button listing the methods. MarkupCraft and TakeoffCraft keep their saved arc formats; PartCraft arcs stay centre/start/end so constraints work. Tests: tools/arcs/test.mjs, test-cadcraft, test-markupcraft, test-takeoffcraft, tools/partcraft-test/test-sketch-arcs.mjs, tools/modelcraft-test/tools07.mjs. Not yet checked by hand in a browser: MarkupCraft and TakeoffCraft pointer flow, PartCraft split face label, ModelCraft on a tilted face.

CadCraftModelCraftMarkupCraftTakeoffCraftPartCraft App code Built · Live – The reporter to try it in /lab. From: a CadCraft user (Staff) email 2026-11-08
FixFX.142 Link to FX.142Comment on FX.142 CadCraft: Plans.dwg (200,000 3D faces) and any DXF over about 70,000 entities failed to open with "Maximum call stack size exceeded"

Built in the lab. Two readers appended whole lists with push(...list), which puts every item on the call stack. (1) model3d.js:187 and :213 (split3d): the 3D faces a drawing's block references place, up to MAX_PLACED = 200,000, so Plans.dwg (288 objects, 50 blocks) failed in /use 0.8.2 with "Could not open Plans.dwg" after the worker had read it; wave 2 counted that open as accepted because the heap grew. (2) dxf.js:102, :162-165, :479: any DXF from about 70,000 entities (a 15 MB file) threw the same RangeError with no message. (3) The same spread in io.js:1291 (ModelCraft, and CadCraft's m3d copy) for a flattened component. All use a loop now. Measured: Plans.dwg opens in the lab build in 7.8 s (4.8 s blocking, one 4.6 s task placing the 200k faces into the 3D tab, heap 518 MB: that cost is PERF.9's); a 19 MB DXF (137,851 entities) that crashed reads in 1.4 s; 1,000,000 entities (122 MB) read in 10 s and 2.1 GB in Node, so the next wall is memory and the one-string reader (wave 3 scale rows). bin/test-cadcraft.mjs 2,847/0. Other spread-into-push sites that take whole lists remain in bimcraft res-skeleton.js:349, res-views.js:282, dwg/nongraphic-write.js:332 (every copy) and lib/cabinetcraft cornerdrill.js:113: small lists today, worth the same loop when touched. Found by the wave 3 scale and 2D tracks (docs/0.9-sessions/perf-wave3/scale-1000x.md, apps-2d.md).

CadCraftModelCraft App code Built · Live – A 0.8.3 point release if the owner wants Plans-sized drawings to open in /use before 0.9. docs/0.9-sessions/perf-wave3/
FixFX.155 Link to FX.155Comment on FX.155 CadCraft: no Arc drop-down in the default toolbar, and the ribbon Arc menu showed 6 of its 12 tools

CadCraft default toolbar (ui.inc): Arc and Circle had no drop-down; the eleven arc methods and the two circle methods sat only under Draw > More. Each now has a caret beside the button listing its ways to draw (moved out of More). FX.137 added the eleven ways to draw an arc, but the shared menu code (assets/js/app-input.js) kept only the first 6 tools of any split button, and dropped the rest without a word. CadCraft's Arc and PartCraft's sketch Arc (12 tools each) lost half their list; no other built-in split in any app is longer than 6. The limit is now 16, and a split cut to fit is reported like any other bad menu entry instead of vanishing. New test tools/shell-test/input-splits-test.mjs runs every built-in menu style of every app through the sanitiser and fails if anything is dropped (it fails on the old limit of 6, passes on 16). Installed 0.9.0 desktop builds carry their own copy of the menu code, so they need the 0.9.1 build (docs/0.9.1.md, 91.1); the web edition has the fix now.

CadCraftPartCraft App code Built · Live – The reporter to try it in /lab; the 0.9.1 build. From: a CadCraft user (Staff) email 2026-11-08
FixFX.156 Link to FX.156Comment on FX.156 Tooltips: one Bootstrap engine everywhere; the other tooltip methods are gone

Tips were drawn five ways: app-tooltips.js (Bootstrap, from title), a hand-made .ws-tooltip div in the workspace, a second Bootstrap instance for cut-off text in Settings, one each for the area badge, the download copy button and CivilCraft's narrow number boxes, and a CSS ::after bubble on the status bars. Now app-tooltips.js is the only one: it reads data-ws-reason, title or an old data-bs-title, and offers ccTooltips.showText(el, text) for text a page computes (cut-off text, Copied, a clipped number). The site footer and admin footer load it too, so public pages match the apps. Popped-out ribbon, panel and dialog windows get Bootstrap and the engine through ccTooltips.attach(win), so they show the same tips. Same look everywhere (.tooltip.cc-tip).

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft App code Built · Live – The 0.9.1 build (desktop installers carry the shared files from their pack date). From: the owner (Staff) owner 2026-11-09
FixFX.157 Link to FX.157Comment on FX.157 CadCraft: objects moved against each other while zooming in a drawing at distant coordinates (a stray object near 0,0 made hatches slide off their outlines)

A member sent a screen recording: a hatch and its outline drifted apart as they zoomed, in a drawing near E 830000 / N 4480000. They guessed a 32-bit float problem, and it is one. A canvas Path2D keeps its points as 32-bit floats and the matrix that draws them is 32-bit too. CadCraft stores paths relative to an origin, but the origin was the middle of the whole drawing's extents: with one object left near 0,0 it sat 2.3 million units from the geometry on screen, so zoomed in the digits were gone. Measured in the released 0.9 build (new tools/cadcraft-test/browser-far-coords.mjs, the real view.js in Chromium): a hatch edge 1 px off at 20 px per unit, 22 px at 200, 94 px at 1000, fill gone at 2000; without the stray object, or with one 20 km away, exact. Only the picture was wrong; coordinates, snaps, measurements and saved files are 64-bit. Fix (view.js): the cache is rebuilt around the view center once the origin is more than 160,000 px from it (FAR_PX), also for the model shown in a sheet viewport; ordinary drawings never rebuild. The test fails on 0.9 (99 px) and passes in the lab (0 px at every zoom); bin/test-cadcraft.mjs 2847 passed. /accuracy had the old origin down as keeping values small: now a 32-bit policy, Drawing far from the origin, on screen, with the measurements and an open item to test BimCraft dwg-view.js, TakeoffCraft cadset.js and CivilCraft view.js (same pattern). Installed 0.9.0 desktop builds carry their own view.js and need 0.9.1.

CadCraft App code Built · Live – The reporter to try it in /lab (send the file or a lab pass); the 0.9.1 build; the other three apps tested for the same pattern. From: Discord community (Discord) Discord 2026-11-09
Owner-reported, 2026-11-09 10
FixFX.147 Link to FX.147Comment on FX.147 All apps: a panel tab strip that does not fit scrolls (visible chevrons) instead of cutting tabs off

Owner, 2026-11-09 (MarkupCraft right panel): the tab row (Properties, Markups, Punch list, Tasks, Notes, Field, Tool chest) was cut off with no way to scroll; only widening the panel reached the last tab. Tab labels never wrap.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 1 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
FixFX.148 Link to FX.148Comment on FX.148 All apps: every panel and sub-section header is title, lock, caret at the far right (open down, closed up); lock at 50% opacity

Owner, 2026-11-09 (MarkupCraft, DetailCraft, CivilCraft, CadCraft panels): carets were on the left, lock icons hung off the title, CivilCraft's sections had neither, carets did not line up. One shared header; the direction is one CSS variable (--af-caret-open / --af-caret-closed); --cc-lock-opacity .5. A lint reads the DOM of every app. Sections that were open stay open by default.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 2 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
FixFX.149 Link to FX.149Comment on FX.149 All apps: every tooltip is a Bootstrap tooltip

Owner, 2026-11-09: the top-bar icon buttons showed the browser's native title tooltip. Rule: all tooltips are Bootstrap (local 5.3). One delegated initialiser upgrades every title in the shell; no double tooltip; keyboard focus shows it.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 1 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
FixFX.150 Link to FX.150Comment on FX.150 All apps: the row-remove x is small and shared; the start/help card has a close x

Owner, 2026-11-09 (DetailCraft Levels rows; the 'Start a model' card): the x buttons were too large, and the start card could not be dismissed. One compact .shell-x style; the start card closes, is remembered per app, and comes back from the palette.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 1 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
FixFX.151 Link to FX.151Comment on FX.151 All apps: add-on toolbar buttons look and behave like core ribbon buttons (PartCraft Print stage)

Owner, 2026-11-09: the Print stage button had no gap between icon and label and a non-standard grey fill and white border. The add-on loader mistook the right panel's pin tab for the toolbar; the button now carries the core tool class (same computed style at rest in PartCraft, BimCraft, ModelCraft).

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 1 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
FixFX.152 Link to FX.152Comment on FX.152 DetailCraft and the other apps: the mass readout ("0 kg") belongs in a panel section, not a fixed corner pill

Owner, 2026-11-09: the '0 kg' pill sat in a fixed corner and could not move; it should really be in a panel. Moves into a section of the panel (title, lock, caret) so it docks, folds and floats with the panel system; the fixed-corner widgets of the other apps are audited.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 1 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
FixFX.153 Link to FX.153Comment on FX.153 All apps: browser tab titles and favicons follow one pattern

Owner, 2026-11-09 (tab strip screenshot): DetailCraft read 'Untitled — DetailCraft' while the others read '<App> — Lab | CadCraft'; favicons missing or inconsistent. Pattern: '<App> | CadCraft' on /use, '<App> — Lab | CadCraft' on /lab, '<document> — <App> | CadCraft' with a document, '| CadCraft' always last; each app has its own icon (SVG plus raster fallbacks).

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 1 Checked 2026-11-09: in /lab and the 0.9 web folders. Desktop installers staged, not published; ship as 0.9.1 on the owner's go (docs/0.9.1.md 91.2). docs/results/0.9/2026-11-09-suites-fix-ui.md
Suggest an item

Anyone can send one; no account and no name needed. The team reads each idea, and the ones we take on appear on this page. Please leave out web addresses.