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
Decision Time 5
DecisionAO.8 Link to AO.8Comment on AO.8 Send the add-on posts

Approve and send the drafted "Build an add-on" and Apparel news and Discord posts.

CadCraft Site and services Built · Live – You: publish From: asked of the owner by: addons-posts-draft (Session) addons-posts-draft
DecisionMEP-REL Link to MEP-RELComment on MEP-REL Release the HVAC and piping add-ons

List them on /addons; a mechanical or plumbing professional reviews the labelled defaults.

CadCraft App codeSite and services Built · Live – Review is community test MEP-REL-HAND (not blocking) From: asked of the owner by: cad-mep (Session) cad-mep
Regional standards 1
FeatureZA.1 Link to ZA.1Comment on ZA.1 South African market: SANS 10143 drawing practice + SANS 10400 building regulations

Sell into South Africa: local practice draws to SANS 10143 (building drawing practice) and builds to SANS 10400 (National Building Regulations). Full note for the 2026-10-26 meeting: docs/0.8-ZA-STANDARDS.md. Today: no SA support. BimCraft residential is hard-coded to US codes (res-stair.js IRC stair limits, res-framing.js 2x lumber + US header table, US egress window, US electrical symbols). Suggested order: 1. Built on REG.1: regulations by jurisdiction as library packs; ZA.1 delivers the South African country packs. 2. SANS 10143 drawing pack: metric mm dims, levels in m, A-series sheets, SA title block (erf, SACAP reg. no.), hatches, symbols, D1/W1 marks. 3. SA residential defaults: 230/280 cavity masonry, SA brick and block, 38x114/38x152 timber, trusses, IBR/tile roofs; Part M stair and Part O window-area checks. 4. Part XA energy check (climate zones 1-6, fenestration, R-values) and an SA municipal submission set export. The differentiator. 5. CivilCraft: Hartebeesthoek94 Lo zones with the Y-westing / X-southing axis flip; SANS 10142 electrical symbols. Business: SANS texts are copyrighted (buy, encode, cite clauses, edition dates); POPIA; ZAR + 15% VAT, regional pricing?; offline/load-shedding is a selling point. Meeting questions: 0.8 market or later? Buy the SANS set? An SA reviewer? Regional pricing? Drawing pack or XA first? Afrikaans? All SANS figures are from memory; check against purchased copies before shipping. LAB SAMPLE (2026-10-25): a small South African pack (stairs, room height, window and openable area) can be seen in /lab/bimcraft under Settings > Building regulations. Its numbers are unchecked.

CadCraftBimCraftCivilCraftDetailCraft App codeSite and servicesHelp and words Built · Live – – From: Owner docs/0.8-ZA-STANDARDS.md Read the doc
Suggestions (Track SX) 25
FeatureSU.1058 Link to SU.1058Comment on SU.1058 Project document manager: check-out, revisions, release states

Asked: a document manager like a paid PDM, without that price (#1058; again #1129: "shouldn't have to pay to manage my own files"). Built (vault-09 2026-11-06, in /lab; docs/0.9-sessions/vault-09.md): the Documents panel over a project folder in CadCraft (View > More > Documents..., or DOCUMENTS), PartCraft and BimCraft (File > Documents...), and so in SuperCad Studio, which hosts them. Check out and in with a lock file two people respect, revision letters (A.1, A.2, A, B.1; ASME skip), states (work in progress, for review, released, obsolete) with the revision table and a revision block on the sheet, history of who did what, where-used and BOM (PartCraft assemblies, xrefs, IFC links), approver list and four eyes (LC.8 merged), title-block fields VAULT.REV/STATE/DATE/APPROVER, read-only guard on Save, cloud folders in Studio (server built). Walkthrough: help topic "Documents and revisions (the vault)" in the three apps. Tested: lib/vault 141, UI 68, bridge 15, cloud 22, TWO REAL PROCESSES on one folder and on a cloud folder 86 (24 of 24 simultaneous check-outs, one winner each), walkthrough buttons 82; real pages 26+26+45 and Super 15; lock_ops.rs 4 under rustc. Found and fixed: BimCraft did not mount in Super. Not built: the sheet set's index does not show each sheet's revision; Open copy and Compare only in CadCraft; the approver is a typed name; no cloud folder in a web tab (Studio first); the commands in desktop-shell are not cargo-compiled (Windows Studio 0.9 build). Real shared-folder check with two people: SU.1058-HAND.

CadCraftBimCraftPartCraftStudio Built · Live 12 – From: site suggestion (Suggestion) docs/0.8-PART2.md (Track SX), from /admin/suggestions 2026-10-27
FeatureSU.1083 Link to SU.1083Comment on SU.1083 CadCraft: a thinner, floating command line and a smaller top area, to give the drawing more room

Asked (#1083, Oct 27, in Italian): make the command line at the bottom resizable, much thinner and floating as in AutoCAD, and shrink the top commands area, for more working space. Do: command line docks bottom or floats (drag, remembered), one-line height option with the history in a pop-up, ties into the layout-fit prompt and compact ribbon already built (WS, PANEL-COMPACT, shell.fit). **Implementation started 2026-11-02** (0.9 pick #10, second five, hardest first; session `cad-cmdline-09`, log docs/0.9-sessions/cad-cmdline-09.md). Status moves to Partly built or Built only when the code is reachable and tested (rule 49).

CadCraft Built · Live 3 – From: site suggestion (Suggestion) docs/0.9-PLAN.md § 9, from /admin/suggestions 2026-11-02
FeatureSU.1112 Link to SU.1112Comment on SU.1112 Live in every app: see each other's cursors and names while co-editing

Asked (#1112, Oct 28): collaboration where people see each other's cursors, so working in teams is easier. CadCraft's Live already shows other people's cursors and selections (live.js presence). Do: the same presence layer in the other apps' Live sessions (cursor, name colour, selection), reusing the CadCraft code through the shared Live library. Relates to DC.27 and EG.41. **Implementation started 2026-11-02** (0.9 pick #7, second five, hardest first; session `live-cursors-09`, log docs/0.9-sessions/live-cursors-09.md). Status moves to Partly built or Built only when the code is reachable and tested (rule 49). **Built 2026-11-02** (session `live-cursors-09`, log docs/0.9-sessions/live-cursors-09.md): one shared presence layer (assets/js/live-presence.js, synced by tools/shell/sync.mjs) with a thin adapter in each app's live.js; BimCraft, ModelCraft, TakeoffCraft, CivilCraft, DetailCraft and PartCraft now show cursors, names in the person's color and selections; CadCraft and MarkupCraft keep their own views on the same palette. Tested with two real pages per app (tools/live-apps-test/browser-apps.mjs) and test-presence.mjs.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live 6 – From: site suggestion (Suggestion) docs/0.9-PLAN.md § 9, from /admin/suggestions 2026-11-02
FeatureSU.1192 Link to SU.1192Comment on SU.1192 DetailCraft: UK steel sizes (UB, UC, PFC, EA, UEA, CHS, SHS, RHS) and unequal angles

Asked (#1192, Nov 3): add UK steel member sizes for UB, UC, PFC, EA, UEA, CHS, SHS, RHS. Built in /lab: 976 sizes from the Steel for Life Blue Book (hot finished and cold formed hollow sections apart) in the shared section table, in DetailCraft's profile lists, CadCraft's Standard panel, PartCraft weldments and BimCraft's rolled-shape check. Sizes typed as on drawings work (305x165x40 UB, L100x100x10). DetailCraft now handles unequal angles: both legs in IFC in and out and NC files, a mirror turns the piece end for end. Not checked yet by a UK fabricator; NC files for UEA not run on a machine.

CadCraftBimCraftDetailCraftPartCraft Built · Live 2 – From: site suggestion (Suggestion) docs/0.9-sessions/uk-sections-shop-set-09.md, from /admin/suggestions 2026-11-04
FeatureSU.886 Link to SU.886Comment on SU.886 Router carving add-on: V-carve, engrave and relief from a depth map to G-code, with an editable post and a program check

Asked (#886, Oct 21): an open-source, agent-friendly CAM for hobby CNC routers and laser cutter/engravers: 2D (DWG, DXF, SVG, image) and 3D (STEP, STL, depth map) in, G-code out; cutting, V-carving, engraving, tool library, nesting, simulation, editable post-processors, agents that can check the G-code. Suggested name CamCraft or CarveCraft. Answer (owner 2026-11-04): not a ninth app. Most of it already existed: PartCraft CAM (contour, pocket, adaptive, drill, chamfer, 3D finishing, material-removal simulation, editable posts, LC.15), laser cutting and engraving incl. picture engraving (SU.772), nesting (LC.17), cabinet G-code (SU.1035). The gap was V-carving, relief carving from a depth map, and a G-code check, so it is one add-on over a DOM-free engine in lib/carve (so SuperCad Studio and the other apps can host it). Built in /lab (CadCraft add-on `carving`, off until switched on in Settings > General > Add-ons): V-carve of closed outlines (medial-axis V-bit pass with the depth set by the width, every axis point moved onto the exact bisector; flat floor at a maximum depth cleared by a flat mill or the V-bit), engraving at a depth, relief from a grey picture (drop-cutter finishing with ball, flat or V cutters, layered roughing with a leave); G-code through an editable post-processor (GRBL, LinuxCNC, Mach3, Fanuc style, inches or millimetres); a checker that reads any program back (no feed, no spindle, rapid across the work, outside the table, too deep, no unit, no end); preview of the cut block; commands CARVE, CARVEDRAW, CARVEGCODE. Not built: text to outlines (CadCraft has no such command yet), picture to vector tracing, a tool library, tabs and lead-in arcs, arcs in the G-code, 4/5-axis and lathe, PartCraft / ModelCraft / SuperCad Studio hosts (the engine is shared, an adapter each), the Library listing. Hand checks on a real machine are the owner's.

CadCraft Built · Live 3 A real machine hand check (owner); hosts in PartCraft, ModelCraft and SuperCad Studio; text to outlines in CadCraft. From: site suggestion (Suggestion) docs/0.9-sessions/carve-09.md, from /admin/suggestions 2026-10-21
FeatureSU.1209 Link to SU.1209Comment on SU.1209 CadCraft: draw.io XML to 2D geometry (DIAGRAM reads <mxfile> / <mxGraphModel>, positions kept)

Asked (#1209, Nov 5): turn the draw.io XML a local model (Qwen coder) writes into 2D geometry, so PDF/SVG content a model reads can become drawing objects; feed it straight from a local LLM. Built in /lab: DIAGRAM (T2D), the diagram_from_text tool and its headless twin read draw.io XML: boxes, rounded, ellipse, rhombus, text, swimlane/container boxes (dashed, titled), connectors with waypoints, arrow ends, dashed; HTML labels to text; positions kept (12 px = the text height); draw.io's compressed save is inflated first. Local model: no new code, it already works through AC.7 (Ollama / LM Studio / llama.cpp recipes) calling diagram_from_text with format drawio; not tried with a real local runner (none installed). Untested on real draw.io files beyond the test fixtures; shapes of other kinds are drawn as boxes, images and loose-end connectors skipped and counted. Test: bin/test-cadcraft.mjs, 9 new checks.

CadCraft Built · Live 1 – From: site suggestion (Suggestion) docs/0.9-sessions/drawio-import-09.md, from /admin/suggestions 2026-11-05
FeatureSU.1084 Link to SU.1084Comment on SU.1084 Schematic capture and circuit simulation (a Multisim-style tool)

Asked (#1084, Oct 27): schematic simulation software without a subscription, easy like NI Multisim. Built 2026-11-06 (session circuit-09): the CadCraft add-on `circuit` (Circuit simulation, off by default) on lib/schematic and lib/em. A schematic editor (resistor, capacitor, inductor, DC, AC and pulse sources, current source, switch, diode, LED, NPN/PNP, N/P MOSFET, op-amp, ground), wiring with junctions, net names, a rule check through Problems (no ground, floating pins, duplicate names, two names joined, bad values, no DC path, source loops). DC operating point, transient and AC sweep, read with a meter, scope and plotter placed on nets. Save/Open, netlist export, example, help in English. Measured (public_html/assets/apps/cadcraft/a Discord member/addons/circuit/test/test.mjs, 87 passed; errors printed): divider 2e-9, RC step worst 1e-3 V on 5 V, RLC resonance curve 1e-10, rectifier peak vs an independent Shockley solve 6e-12, op-amp stage 1e-13, MOSFET 1e-11, BJT bias 2e-7, LED 1e-8. Real page in Chromium: test/browser.mjs, 30 passed (with the mount added by a route). Not claimed: equality with Multisim or any program; Multisim files and part models are not read; no real part library (values are typed, generic defaults); op-amp has no rails or bandwidth; no noise, sweeps or Monte Carlo; not tried on a phone or in Studio. Mounted 2026-11-06: "circuit" in CadCraft's a Discord member addons/index.json (off by default); browser test 30/0 with the real index. SuperCad Studio mounts CadCraft inline from its a Discord member build, so the add-on is listed there too. Not claimed: equality with Multisim.

CadCraft Built · Live 6 – From: site suggestion (Suggestion) docs/0.9-sessions/suggestions-sweep-09.md, from /suggest
FeatureSU.961 Link to SU.961Comment on SU.961 Sprockets for roller chain by standard (the missing third of #961)

Asked (#961, Oct 24, in Spanish): nesting of parts inside the CAD, standard profile tables as in AutoCAD Mechanical, and sprockets. Checked 2026-11-05: nesting is built and released (PartCraft's Nest flat parts, CadCraft's Nesting add-on; SU.755, NEST-CAD-PATH) and standard steel profiles are built (the shared section tables in CadCraft's Standard panel, PartCraft weldments, DetailCraft; UK sizes in /lab by SU.1192). Built 2026-11-06 (sprockets-data): sprockets are a CadCraft add-on, Roller chain sprockets (id chain, off by default, in the lab): SPROCKET draws the real tooth outline for a chain number and tooth count; CHAINS lists the table; CHAINSOURCES names the catalogues. Table lib/chain/chain-table.json: 38 chains (ANSI 25 to 240, ISO 606 A series 08A to 48A with 085, B series 04B to 48B), pitch, roller, inner width and plate height read from nine public catalogues on 2026-11-06 and kept only where two agree (tools/chain/chain-sources.mjs, build-chain-table.mjs); NOT copied from ISO 606 or ASME B29.1. Left out: ISO 04C, 06C, 36A (one catalogue only) and plate heights the catalogues dispute (null). Found by the real rows: the default tip circle let the swinging roller hit the tip edge at 25 to 28 teeth, now 0.35 p above the pitch circle. Tests: test-chain-table.mjs 3326/0 (every chain draws and seats at 9 to 80 teeth), test-chain.mjs 298/0, add-on test 14/0, browser-chain.mjs 11/0 in /lab/cadcraft, catalogue entry + listing seeded (lab). Limits: the tooth form (2 % seat clearance, 80 degree seat half angle, tip, tooth width) is our generator's, not the standard's, and no sprocket was compared with a catalogue sprocket; CadCraft only (PartCraft, ModelCraft and SuperCad Studio hosts and Library items on the owner's seed go are not done).

CadCraftPartCraft Built · Live – – From: site suggestion (Suggestion) docs/0.9-sessions/suggestions-sweep-09.md, from /suggest
FeatureSU.1087 Link to SU.1087Comment on SU.1087 ModelCraft is the SketchUp-style modeller, with CAD tools beside it in CadCraft Studio

Asked (#1087, Oct 28): SketchUp with a full CAD tool set pre-installed; the last free version (2017) is hard to find and runs badly on new machines. Covered by what is built and released (checked 2026-11-05; nothing new was built for this card): ModelCraft is our push/pull modeller in the SketchUp style, free, in the browser and in CadCraft Studio; it imports .skp files with groups, components, colours, textures, tags and soft edges (help "Bring in an SKP model"); CadCraft (2D and 3D CAD), PartCraft and the other apps are in the same CadCraft Studio. Not the same program: SketchUp extensions (Ruby plug-ins) do not run, and .skp is read, not written. Test re-run 2026-11-05: tools/skp-test/test.mjs --no-fuzz (see the log).

CadCraftModelCraft Built · Live 0 – From: site suggestion (Suggestion) docs/0.9-sessions/suggestions-sweep-09.md, from /suggest
From GitHub (to review) 2
FeatureBot obtainedGH.5 Link to GH.5Comment on GH.5 DWG reader: class list fails when a class's maintenance version is 256 or more (read as BITSHORT, spec has BITLONG)

## Summary `readClassesSection` in `app/dwg/read.js` (line 229) reads each R2004+ class record's DWG version and maintenance version as BITSHORT. The Open Design Specification for .dwg files v5.4.1, chapter 10, gives both as BITLONG. The two encodings agree for values 0 to 255 and part from 256 up: BITSHORT code 00 is followed by 16 bits and BITLONG code 00 by 32, and BITSHORT code 11 means 256 where BITLONG has no code 11. So a class whose maintenance version is 256 or more shifts every later field by 16 bits, and the read stops with `Classes could not be read: bad BITLONG code 11`. ## Where we saw it Three real R2018 (AC1032) drawings from a third party (we cannot share the files). Their class records carry DWG version 33 with maintenance version 329 for MLEADERSTYLE, ACDBDETAILVIEWSTYLE and SUN. The classes before the first of those (ACDBDICTIONARYWDFLT, MATERIAL, VISUALSTYLE, SCALE, TABLESTYLE) read fine, so the read fails on the class right after MLEADERSTYLE. A fourth R2018 drawing whose classes are all below 256 reads correctly. ## Effect - `model.classes` comes back empty, with the note `Classes could not be read: bad BITLONG code 11`. - Every class-based object then reads as unknown (`CLASS_5xx` in `report.unknown`). In our files that included two IMAGE entities inside a title block definition, which dropped out of the drawing. - `writeDwg(readDwg(bytes), { version: 'AC1032' })` leaves those objects out: "Not copied (cc-dwg cannot write them in this version, or they depend on them): 3 CLASS_501, 24 CLASS_502, 17 CLASS_503, 1 CLASS_504, 1 CLASS_505, 1 CLASS_506, 1 CLASS_507, 1 CLASS_508, 2 CLASS_511, 2 CLASS_512, 1 CLASS_513, 5 CLASS_509." Model space, layer… Opened on GitHub by a Discord member: https://github.com/getcadcraft/cadcraft/issues/5 Sweep 2026-11-05: accepted into 0.9 (planned). cad-fix-09 2026-11-05 (done): see docs/0.9-sessions/cad-fix-09.md.

CadCraft Built · Live – – From: a Discord member (GitHub) GitHub getcadcraft/cadcraft#5, Oct 28, 2026 cadcraft#5 open
Hardware design: HDL to silicon (Track HD) 4
FeatureHD.1 Link to HD.1Comment on HD.1 Chip design: Verilog and VHDL source, checks, hierarchy

Edit hardware description files with syntax checks and a module hierarchy view. Plan docs/0.8-PART8.md.

CadCraftSuperCad Studio App code Built · Live 4 Tried on our own sample only From: Discord community (Discord) Discord (a Discord member) 2026-10-30; owner: add this to 0.8, probably an add-on
FeatureHD.2 Link to HD.2Comment on HD.2 Chip design: netlist graph and schematic view

Read structural Verilog into a netlist graph and show it as a schematic using the shared schematic engine. Plan docs/0.8-PART8.md.

CadCraftSuperCad Studio App code Built · Live 3 Tried on our own sample only From: Discord community (Discord) Discord (a Discord member) 2026-10-30; owner: add this to 0.8, probably an add-on
FeatureHD.3 Link to HD.3Comment on HD.3 Chip design: Liberty, LEF, DEF and SDC files

Our own readers and writers for cell timing and power libraries, floorplans and timing constraints, written from the public format descriptions. Plan docs/0.8-PART8.md.

CadCraftSuperCad Studio App code Built · Live 4 Own samples only; no vendor/PDK files tried yet From: Discord community (Discord) Discord (a Discord member) 2026-10-30; owner: add this to 0.8, probably an add-on
FeatureHD.7 Link to HD.7Comment on HD.7 Chip design: GDSII and OASIS layouts

Read and write GDSII and OASIS with layer maps, hierarchy and a fast view of large layouts. Plan docs/0.8-PART8.md.

CadCraftSuperCad Studio App code Built · Live 4 No third-party OASIS file tried yet From: Discord community (Discord) Discord (a Discord member) 2026-10-30; owner: add this to 0.8, probably an add-on
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
FeatureFX.56 Link to FX.56Comment on FX.56 Auto-focus panel (Settings › Global) and split tool tiles

Owner 2026-11-05. (1) Auto-focus panel: one engine in the shell (window.ccAutoFocus in assets/js/app-settings.js, CSS in app-shell.css, strings in lang/shell): a panel with several sections opens one and closes the others, a lock beside the caret keeps a section open, remembered per panel; a menu command opens the section it works with; a Settings switch (cc-autofocus, default on) lets people choose how the apps work best. CivilCraft: the left panel (Landscape on) and the Properties panel (groups by heading). The other seven apps adopt it by registering their panels. (2) CivilCraft Landscape ribbon tiles that hold several tools (Grade, Hardscape, Areas, Levels, Irrigation) are split buttons: the icon runs the tool used last, the edge with the arrow opens the menu (civilcraft/a Discord member/split-menu.js); the same pattern is wanted in the other apps. Tested headless: panels, setting on/off, split clicks; Landscape 533/0. Added 2026-11-05: Hardscape, Areas and Levels have their own sections in the Landscape panel (tools + what is drawn); the toolbox (layouts with a tool list) joins the auto-focus panel: its groups close each other, and the toolbox group and the panel section follow each other (shell: ccAutoFocus mode details, app-workspace.js tbxAf; civil link in landscape-ui.js). 2026-11-05 all eight apps: window.ccAutoFocus.auto() folds every app side panel with two or more sections (a section heading or its *-sec-head bar; MarkupCraft details sections; toolbox groups in the toolbox layouts), no per-app code; Settings › Global › Auto-focus panels switches it off. Split tool tiles stay CivilCraft-only until the other apps ask. Command links 2026-11-05: a tool that works with a panel section opens it (app-settings.js LINKS table, one line per rule): CadCraft constraint and parameter commands to Parameters; TakeoffCraft measuring tools to Items and note/cloud/highlight to Markups; ModelCraft Paint to Colors. The other apps have no tool with a section of its own yet; add a rule when one does. Command links 2026-11-05: a tool that works with a panel section opens it (app-settings.js LINKS table, one line per rule): CadCraft constraint and parameter commands to Parameters; TakeoffCraft measuring tools to Items and note/cloud/highlight to Markups; ModelCraft Paint to Colors. The other apps have no tool with a section of its own yet; add a rule when one does.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft App code Built · Live – in /lab; owner to try From: owner (Owner) owner request 2026-11-05
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
Requests for 0.9 8
FeatureD9.9 Link to D9.9Comment on D9.9 Zoom in and out of the drawing to see details (request in German)

Asked on /suggest (#1236, Nov 6 2026, in German, “Zeichnung vergrößern, verkleinern”): “Details should be zoomable; often the drawing in the edit window is too small and it is hard to see details.” The submitter did not say which app. Checked 2026-11-07: CadCraft has a ZOOM command and view zoom already; the report reads as someone not finding it, or a drawing that opens small (page or sheet view, a small window, a large paper size), or a touch screen where pinch/scroll do not work. Do: find which app and device (reply in German if there is an email), then check: zoom buttons visible on the canvas for mouse-less use, zoom to a window, zoom to the drawing on open, and the German labels (Vergrößern, Verkleinern, Alles zoomen). Not built yet. Built 2026-11-07 (lab, CadCraft): toolbar View group has Zoom in (2×) and Zoom out (½) beside Extents, Window and Previous, centred on the view (ZOOM 2x / ZOOM 0.5x, which already worked typed); tooltips say the wheel zooms at the pointer. bin/test-cadcraft.mjs 2815/0. Untested: German labels are a draft (en, es-MX, id only), the touch pinch, and on which app the requester looked (CadCraft done; BimCraft not changed).

CadCraftBimCraft Built · Live – – From: site suggestion (Site) Suggestion #1236, Nov 6 2026
Education (Track ED) 2
FeatureED.1 Link to ED.1Comment on ED.1 Live TeamWork: follow the teacher (follow the presenter)

Owner 2026-11-03 (educator kit): "allow students to follow the teacher". Built in a Live TeamWork session (assets/js/live-follow.js, shared by every app that uses the live presence layer; CadCraft and MarkupCraft mount it from their own live UI). A person can choose Follow on another person's name and their view moves with the presenter's: 2D camera centre and zoom (a smaller window zooms out to show all of the leader's view), 3D eye, target, field of view and parallel height, and the sheet, storey or space when the app can open it. The host can press "Ask everyone to follow me"; each joiner can still step away. Following stops by itself when the follower pans, zooms or orbits on their own, and a chip names who they were following and offers to rejoin. The view travels in the existing presence message, newest only, and nothing about it is saved in the file. Not tried in a live session with real students; the educator kit copy can now mention it.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraftStudio Built · Live – – From: Owner (Owner)
FeatureED.2 Link to ED.2Comment on ED.2 Live TeamWork: class view, the teacher looks in on each student's work

Owner 2026-11-03 (educator kit): "allow instructor to look at student progress". Built as the people list in Live TeamWork (same module, assets/js/live-follow.js): everyone in the session with their colour and name, the tool they are running, the sheet they are on, how many edits this window saw from them and when the last one was, and a Follow button on each, so the teacher can go to a student's view. Names from other people reach the page as text only. NOT built from the first plan: students each working in their own drawing inside a class room, a live thumbnail of each student's work, and "Look in" read-only or "Help" with a separate viewer role. Today the class works in one shared drawing and the teacher sees the class at a glance in the list. Not tried in a live session with real students.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraftStudio Built · Live – – From: Owner (Owner)
Library 8
FeatureATTR.6 Link to ATTR.6Comment on ATTR.6 One shared PDF text kit: BimCraft and CadCraft use lib/report

Owner 2026-11-03. lib/report is now the only copy: BimCraft's a Discord member-pdf.js and Markdown parser and CadCraft's pdf-font.js are thin wrappers over synced a Discord member/report copies (tools/report/sync.mjs; tools/engineer/sync.mjs for PartCraft and SuperCad Studio). BimCraft's PDFs still print with the built-in fonts only; passing fonts would give it Unicode too, not done. Tests pass: bin/test-bimcraft.mjs --sx-tags --only docs (48), --regs (151), bin/test-cadcraft.mjs (2773), bin/test-markupcraft.mjs (564). In /lab, not released.

CadCraftBimCraftMarkupCraftSuperCad Studio Built · Live – – From: owner (Site) owner 2026-11-03
FeatureATTR.7 Link to ATTR.7Comment on ATTR.7 Library credits table on a sheet in CadCraft and BimCraft

Owner 2026-11-03. BimCraft: every drawing set with Library items gets a Library credits schedule, including doors and windows, made again from the model each time and placeable on any sheet. CadCraft: the CREDITS command (ribbon, and a button in the Library credits view) draws the credits as one block of lines and text, at a point and text height you choose; it saves to DXF; running it again updates the table in place and adds no second copy. Both use lib/report/credits.js, required credits first, CC0 after. Limits: CadCraft's table updates only when CREDITS is run; BimCraft sheets print with Helvetica, so non-Latin credits show as ?. Tests: bin/test-cadcraft.mjs, bin/test-bimcraft.mjs --lib-openings and --res, tools/super-test/binder.mjs (real CadCraft panel). The BimCraft schedule was not clicked through in the app's Sheets dialog. In /lab, not released.

CadCraftBimCraft Built · Live – – From: owner (Site) owner 2026-11-03
FeatureLIB.C1 Link to LIB.C1Comment on LIB.C1 Library collections: the Library is the one home of every object; each app starts from a default collection

Owner 2026-11-05: library as the primary source of all object information; CivilCraft gets a default collection from the Library (its plants and items), usable in every app. Spec docs/0.9-LIBRARY-COLLECTIONS.md. Built: collections tables (migration 124), LibraryCollections, GET /api/v1/library/collections[/<slug>|/app/<app>], bin/library-collection-make.php, test bin/test-library-collections.php (17/0). Next: publish the 421 seed plants (bin/library-import-plants.php, dry run clean), make civilcraft-landscape the CivilCraft default, then CivilCraft Landscape loads it (C.3), places any Library item (C.4), other apps add it (C.5). Parametric Library objects (params + generator) are a separate track. C.2 done 2026-11-05: 421 seed plants published as Library plant items (system author), collection civilcraft-landscape published and set as CivilCraft default; served at /api/v1/library/collections/app/civilcraft. C.3 started 2026-11-05 (in /lab): the Plants section says where its list came from (the civilcraft-landscape collection, count, revision, or the built-in list when the Library is unreachable); Landscape panel sections fold shut and a menu command opens the one it works with (landscape/fold.js). The app still reads plants.csv for the data; reading the collection manifest itself comes next. C.3 done 2026-11-05 (in /lab): CivilCraft Landscape now reads its plants from its default collection (GET /api/v1/library/collections/app/civilcraft/plants.csv; every published plant when no collection is set; the built-in list when the Library cannot be reached). Panel sections: opening one shuts the others unless locked (lock icon by the caret). Landscape tests 533/0, collections 17/0. C.4 (place any Library item) and C.5 (other apps) still planned.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft App code Built · Live – – From: owner (Owner) owner direction 2026-11-05
Interior lighting design add-on (IL) 5
FeatureIL.2 Link to IL.2Comment on IL.2 Lighting design in CadCraft: rooms from the drawing, plan for a target, results, map, draw on layers

Built in the lab: add-on lightdesign (off by default). Room from a closed shape or typed outline, generic luminaires or a maker file, plan for a target lux (fewest even grid), grid or rows, requirement checks, false-colour map, report (HTML) and CSV, luminaires and lux drawn on LD-LUMINAIRE / LD-LUX, commands LDESIGN and LDDRAW. Browser test 19/0.

CadCraft Built · Live – – From: Discord community (Discord) docs/0.9-sessions/lightdesign-09.md
FeatureIL.4 Link to IL.4Comment on IL.4 Lighting design glare (UGR) estimate

CIE 117 formula with Einhorn position index, four observers at 1.2 m, initial flux. An estimate from the file, not the maker table. Not checked against a published UGR table yet.

CadCraftBimCraft Built · Live – – From: Discord community (Discord) docs/0.9-sessions/lightdesign-09.md
FeatureIL.6 Link to IL.6Comment on IL.6 Lighting design report: printable page with map, results, checks

HTML page (print to PDF), SVG illuminance map with scale, summary, checks, the notes on what the numbers are. Not in the Studio report binder yet.

CadCraftBimCraft Built · Live – – From: Discord community (Discord) docs/0.9-sessions/lightdesign-09.md
FeatureIL.1 Link to IL.1Comment on IL.1 Lighting design engine: room, photometry, inter-reflection (radiosity)

Built in the lab: lib/lightdesign. Direct light from .ies/.ldt plus the light bounced off floor, walls and ceiling as diffuse patches. Checks: energy conserved to 1.8 %, and a Monte Carlo photon trace of a 6 x 4 m office agrees to 1.4 %. No furniture, columns, windows or daylight.

CadCraftBimCraft Built · Live – – From: Discord community (Discord) docs/0.9-sessions/lightdesign-09.md
CadCraft plan drafting 4
FeaturePLAN2D.1 Link to PLAN2D.1Comment on PLAN2D.1 Hatch that stays with its boundary, and a hatch editor

Asked: a hatch editor that works, "when moving the boundary box the hatch will move with it. Similar to illustrator". The assoc flag existed but did nothing. Built in the lab: HATCH links to what bounds it (closed objects, or the objects round a picked area). Move, turn or scale the boundary: the hatch and pattern follow. Reshape it: the hatch is worked out again. Move the hatch alone: the boundary comes too. Link ends with a note when the shape no longer closes. Copies get their own link. HATCHEDIT (HE). The link is saved in DWG and DXF 2000. Also fixed: MOVE left a hatch's pattern behind on any hatch. Not done: links made in other programs are not read (HATCHEDIT Link does it by hand); DXF R12 has no hatch object.

CadCraft Built · Live – – From: Discord community (Discord) Discord, a Discord member, 2026-11-02
FeaturePLAN2D.2 Link to PLAN2D.2Comment on PLAN2D.2 Layer groups: folders in the Layers panel

Asked: a layer manager to group layers for walls, existing, services "instead of it all being in one long list", and to set up layers for drafting new. Built in the lab: folders that fold, group switches for on, freeze and lock, Find a layer, a ready-made set (Existing, Proposed, Demolition, Services, Annotation), Group by name, drag a layer onto a folder, LAYGROUP. Saved in the file; the layer table stays flat for other programs. Not done: AutoCAD's own layer group filters are not written, so AutoCAD shows a flat list.

CadCraft Built · Live – – From: Discord community (Discord) Discord, a Discord member, 2026-11-02
FeaturePLAN2D.3 Link to PLAN2D.3Comment on PLAN2D.3 Stacked floors in one model space

Asked: draw the first floor on top of the ground floor and turn each off, "stacking model spaces, not layers", without Xrefs. Goes further than SU.912's design layers (a layer with a scale and an elevation). Built in the lab: FLOORS panel, FLOOR, one active floor; other floors show faded, snap but can't be edited; a viewport can show one floor; move or copy the selection to a floor; FLOORLAYERS for a file going to someone without floors. Layers run across floors. Saved in the file. Not done: other programs show all floors together unless FLOORLAYERS is run. Floor elevation is stored only, nothing uses it yet. Stairs and anything that spans floors.

CadCraft Built · Live – – From: Discord community (Discord) Discord, a Discord member, 2026-11-02
FeaturePLAN2D.4 Link to PLAN2D.4Comment on PLAN2D.4 2D smart walls, doors and windows in CadCraft

Asked: "a smart wall tool in cad craft, like a polyline ... choose the thickness ... basic doors and windows that can be inserted into those walls ... it is all 2d, and generates no 3d ... if you move a wall it moves the doors and windows with it ... connects into other walls". Built in the lab: WALL (thickness, justify, fill, close), DOOR (single, double, sliding, open doorway), WINDOW (fixed, casement, sliding), DELOPENING; mitred corners, T joins, crossings; joined walls follow a move; grips for ends, middle, sliding an opening, flipping hinge and swing; Properties for each opening. A wall is a block carrying its settings, so DWG/DXF, plotting and Move need nothing new; shared engine lib/plan2d (tools/plan2d/sync.mjs). Not done: wall build-ups (asked as "possibly later"), curved walls, Library doors in these walls, elevations from the plan, not opened in AutoCAD. Dimensions don't attach to walls.

CadCraft Built · Live – – From: Discord community (Discord) Discord, a Discord member, 2026-11-02
Wall tool 4
FeatureWT.2 Link to WT.2Comment on WT.2 Wall tool, Draw: rectangle, rotated rectangle, polygon, arc by centre, tangent arc, pick one line, trace outline

Wall tool spec pages 4-8 (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Icons: the DU.1 family (assets/js/app-workspace-icons.js: 32 grid, 1.5 round stroke, two-tone fills, Full Color or Outline). Not built (page 5): Rectangle (four walls, four corner joins, one action), Rotated rectangle, Polygon (inscribed / circumscribed), Arc by centre (centre, radius, sweep), Tangent arc (continues from the last segment), Pick lines (one line or edge at a time; Tab picks the chain; today only a whole DWG / DXF / PDF scan), Trace outline (click inside a closed area; today only 'Develop this mass'). Each is a recipe on the Place block (addWall, Wall tool, model-trace.js) ending in the join solver (FX.60); the Shape list on the Wall button holds the shapes. Icons: wallrect, wallrectrot, wallpoly, wallarcc, walltan, wallpick, walltrace. OTHER APPS: CadCraft already has rectangle and polygon as drawing tools but not as walls with joined corners: its plan walls (FX.59) should get the same recipes from one shared place. Not started. walls-09 2026-11-06 (done): Built in /lab: Wall › Shape list and the new Shapes menu (DU.1 icons wallrect, wallrectrot, wallpoly, wallarcc, walltan, wallpick, walltrace; commands wall.rect ... wall.trace): rectangle (four walls, four L joins, one undo step), rotated rectangle, polygon inscribed / circumscribed (3-64 sides), ar... see docs/0.9-sessions/walls-09.md. walls-plan-09 2026-11-06 (done): CadCraft plan walls: rectangle, rotated rectangle, polygon, arc (as 15 degree chords: plan walls are straight), tangent arc, pick lines, trace outline as WALLRECT, WALLROT, WALLPOLY, WALLARC, WALLTAN, WALLPICK, WALLTRACE, same gestures as RECTANG and POLYGON, one undo step each, corners joined. One ... see docs/0.9-sessions/walls-plan-09.md.

CadCraftBimCraftSuperCad Studio Built · Live 1 Hand check is community test WT.2-HAND (not blocking) From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (pages 4-8)
FeatureWT.3 Link to WT.3Comment on WT.3 Wall tool, Set and Modify: placement offset, join on/off, edit by dimension, offset wall, box stretch, align and lock, lock dimension

Wall tool spec pages 4-8 (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Icons: the DU.1 family (assets/js/app-workspace-icons.js: 32 grid, 1.5 round stroke, two-tone fills, Full Color or Outline). Pages 5-6. Partly or not built: Placement offset (a free distance off the picked line; today half a thickness), Join on / off (free-standing wall; today joins are always automatic), Edit by dimension (type a value: the selected wall moves, the reference holds; today typing does not move a wall: FX.58 / spec test 4), Offset wall (neighbours stretch), Box stretch (ends inside a marquee move, walls crossing it stretch), Align and lock (padlock holds the alignment), Lock dimension (a locked dimension holds through later edits). The last two are the new Hold block (wall-dimensions.js is the base: dimensions already know which face they measure). Icons: wallplace, walljoinsw, walleditdim, walloffset, wallbox, wallalignlock, walllockdim. OTHER APPS: CadCraft plan walls and dimensions want Hold too (it is the Revit padlock); build it once for both. Not started. walls-09 2026-11-06 (done): Built in /lab: placement offset and Join on/off in the Wall row (Wall tool and shapes); edit by dimension (type the value in a reference dimension's Properties: the second reference's wall moves square, the first holds; spec test 4 Pass); Offset (move or Copy); Box stretch; the Hold block (lib/walls... see docs/0.9-sessions/walls-09.md. walls-plan-09 2026-11-06 (done): CadCraft plan walls: placement offset and Join off in WALL (O, D), edit by dimension (WALLDIM), Offset (WALLOFFSET, Copy), box stretch (WALLSTRETCH), and the Hold block (WALLHOLD align and lock, WALLHOLDDIM, WALLUNHOLD, WALLHOLDS): stored on the wall, kept by moving the other side, refused with the ... see docs/0.9-sessions/walls-plan-09.md.

CadCraftBimCraftSuperCad Studio Built · Live 1 Hand check is community test WT.3-HAND (not blocking) From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (pages 4-8)
FeatureWT.4 Link to WT.4Comment on WT.4 Wall tool, Cut: split, split with gap, delete segment

Wall tool spec pages 4-8 (Duncan, 2026-11-05), tracked at /roadmap-internal 'BimCraft wall tool specification'. Icons: the DU.1 family (assets/js/app-workspace-icons.js: 32 grid, 1.5 round stroke, two-tone fills, Full Color or Outline). Page 6-7. Not built (BimCraft's own help lists Split as not built): Split at a point or crossing wall (the two parts stay joined end to end, same type; decision D2 is whether they stay joined in line or become free ends), Split with gap (a set gap; rejoin restores one wall), Delete segment (remove the piece between two clicks). Spec test 6. Cut block today is model-trim.js (trim, extend, corner: Built). Icons: wallsplit, wallsplitgap, walldelseg. OTHER APPS: CadCraft plan walls have no Split either (FX.59 assessment); shared recipe. Not started. walls-09 2026-11-06: Built in /lab: Edit › Walls › Split (at the click or a crossing wall; Gap; Free ends), Delete segment, Rejoin (one wall again, the first keeps its id). Doors and windows go with their part, a cut through one is refused, reference dimensions follow their point. D2 default: the parts stay joined in line (Settings › BimCraft › Walls › When a wall is split: joined | free ends). Spec test 6 Pass (node and real page). Recipes in lib/walls (host-free; copied to bimcraft/a Discord member/walls by tools/walls/sync.mjs), BimCraft adapter wall-tools.js + wall-tools-ui.js. Tests: node lib/walls/test/test.mjs (59/0, known answers worked out in the file), node bin/test-bimcraft.mjs --walltools (all ok, incl. the spec's nine tests: all Pass), real page tools/bimcraft-test/browser-walltools.mjs 33/0. Help: wall-tools (en). NOT done: CadCraft, SuperCad adapter, hand check (WT.4-HAND). walls-plan-09 2026-11-06 (done): see docs/0.9-sessions/walls-plan-09.md.

CadCraftBimCraftSuperCad Studio Built · Live 1 Hand check is community test WT.4-HAND (not blocking) From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (pages 4-8)
FeatureWT.7 Link to WT.7Comment on WT.7 Wall + Grid: lock walls to grid lines so they move with the grid

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: snap walls to grid lines and lock them; move a grid line and its walls move with it (Hold -> Place in space -> Join solver; today Partly). Today (model-grids.js): grids are drawn, IfcGrid lines from other programs are read for display and snapping only; walls snap to them while drawing but nothing remembers the link, so moving a grid line moves no wall. Wanted: a wall end or location line can be locked to a grid line (the Hold block, with WT.3 Lock), moving the grid runs the join solver. OTHER APPS: CadCraft has grids too; build the lock once. Not started. walls-09 2026-11-06: Built in /lab: Properties › Lock to grid (a wall along a grid line, or an end on one), stored with the Hold block; Grid tool › pick a line › Move by (new: the UI could not move a grid line before) moves the line and the locked walls follow with their joined walls, one undo step; renaming keeps the lock, deleting the line drops it; moving a locked wall off its line is refused; a turned line that cannot keep the lock is refused. Recipes in lib/walls (host-free; copied to bimcraft/a Discord member/walls by tools/walls/sync.mjs), BimCraft adapter wall-tools.js + wall-tools-ui.js. Tests: node lib/walls/test/test.mjs (59/0, known answers worked out in the file), node bin/test-bimcraft.mjs --walltools (all ok, incl. the spec's nine tests: all Pass), real page tools/bimcraft-test/browser-walltools.mjs 33/0. Help: wall-tools (en). NOT done: CadCraft grids, SuperCad adapter, hand check (WT.7-HAND). walls-plan-09 2026-11-06 (done): see docs/0.9-sessions/walls-plan-09.md.

CadCraftBimCraftSuperCad Studio Built · Live 1 Hand check is community test WT.7-HAND (not blocking) From: Duncan (Session) Duncan, wall tool specification 2026-11-05 (page 9)
Units 1
FeatureTKW.1 Link to TKW.1Comment on TKW.1 Weight and temperature units (kg, lb, t, ton; °C, °F, K, °R)

Asked in support message #1329 (metric in the quick properties, kilograms, Celsius). Owner 2026-11-08: build weight and temperatures, both F and C, into 0.9. Shared table lib/units gets two kinds: mass (mg, g, kg, tonne, oz, lb, ton, long ton; exact factors from the 1959 pound) and temperature (K, °C, °F, °R; offset scales, converted without a detour through kelvin for C and F, negative values read correctly); Settings › Global › Units lists them (en, es-MX, id words). TakeoffCraft: lb, ton, kg and t as typed-quantity units (priced like CY), an optional Temperature on every item typed and shown in °C or °F (Settings › TakeoffCraft: Follow Global / °C / °F), kept in kelvin. bin/test-units.mjs 261/0, bin/test-takeoffcraft.mjs 1210/0. Seen in the real /lab page: browser-weights-temps.mjs 12/12 (unit lists, temperature typed in C and F, display setting, undo). Temperatures are absolute (a difference is not converted). Reports/exports do not carry the item temperature yet. Reply sent 2026-11-08 (support #1329, answered). No account for abdulrahman.mahmoud@almada-eg.com yet: the reply invites him to sign up; grant the lab pass (TakeoffCraft, a Discord member) when the account appears.

CadCraftBimCraftModelCraftMarkupCraftTakeoffCraftCivilCraftDetailCraftPartCraft Built · Live – requester account for the lab pass From: Abdulrahman Mahmoud (Site) support message #1329 2026-11-08
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.