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
Drafting and app features 4
FeatureWB.6 Link to WB.6Comment on WB.6 CivilCraft New Feature: Corridor, Templates, Terrain Templates and a Template Creation tool

-Template Creation Tool: A Template creation tool would be nice to see. The template creation tool should be designed to allow users the freedom to create any object. Points should be controlled through parametric constraints or targeting. -Terrain Template: Other software packages use the idea of applying a template to a terrain and it is a game changer for designers. Placing a template on a terrain allows 3d volumetric components to be "draped" on a terrain. i.e., 6" of Topsoil can be placed below a terrain or 5" of pavement with 12" of Base can be place on a terrain of a parking lot. This allows designers to create a site grading design and apply material without using a corridor modeler. Ideas: The 0,0 point of the template controls the point materials are built vertically. Any component or shape is applied to the terrain from the 0,0 point. Widths and slopes don't matter for these types of templates. Terrain templates can be clipped by a 2d shape in plan view. This will allow multiple terrain templates can be used on a terrain if different materials are required. -Corridors: Multiple Corridors: Please allow for multiple corridors to be applied to an alignment. Long alignments require the design to be broken into pieces at times. Multiple Templates : Allow multiple templates to be applied at once. i.e. Template for pavement and end condition Lt & Rt. The end condition templates can be controlled separately. Creating small reusable templates. **Built:** Built in /lab 2026-11-02 as SU.1110 (civil-templates-09): the template creation tool (parametric points, targets), terrain templates draped from the 0,0 point and clipped by a parcel, pad or closed feature line, several corridors on one alignment, several templates by station, left and right end conditions. Surface › More › Corridor templates… and Terrain templates…; an alignment's Properties › Corridor.

CivilCraft Built · Live – – From: a visitor (Site)
FeatureWB.10 Link to WB.10Comment on WB.10 Civilcraft: Add basic drafting tools. Snapping on elements. Move , Copy Rotate etc....

Drawing tools needed in Civilcraft. Snaps are need when drawing parcels, alignments and pads. All menu dialogs with coordinates show should have a button to allow users to snap to a point in the drawing. Entering N,E,Z manually is very , very time consuming and not used by any major civil design programs anymore. Points and bearings should have a pick button on all menus. Tangents should have two pick button to define the bearing with two points. **Built:** Built in /lab 2026-11-06 (civil-snap-09). Snaps: the Alignment, Pad, Parcel, Mass, Feature line, Measure, Boundary and Catchment tools and a dragged PI or corner snap to survey points and to PIs, pad / parcel / mass corners, feature-line vertices and structures within 10 px (a marker with a label and the E, N; Alt = free). A crosshair Pick button sits beside a PI's northing, every corner's northing and the move / rotate blocks. Tangent from two points under the PI table. Move, copy and rotate (typed distance or two picked points; about the middle or a picked point) for an alignment, pad, parcel and feature line. Not yet: snap to a segment middle or crossing, Pick in the landscape / power-line / water panels, move of storm networks.

CivilCraft Built · Live – – From: a visitor (Site)
FeatureWB.15 Link to WB.15Comment on WB.15 Alignment and Parcels coordinates

1. Allow users to enter Northings and Eastings for parcel and alignment vertices. 2. Allow users to snap to objects when creating or editing alignments and parcels. A pick button in the properties dialog for the N,E would be great. Users can snap to an existing element and the NE for the vertex will be updated. **Built:** Built in /lab 2026-11-06 (civil-snap-09). Alignment PIs already took a typed E / N; now pad, parcel and feature-line corners list typed E and N too, and every one has a Pick button: press it, click a place in the plan (snapped to survey points, PIs, corners and vertices; Alt = free), and the vertex takes that easting and northing, one undo step. Drawing and dragging alignments and parcels snaps the same way.

CivilCraft Built · Live – – From: a visitor (Site)
Fixes 104
FixFX.1 Link to FX.1Comment on FX.1 BimCraft: Move works on stairs (and ramps, railings, roof planes, free-standing devices, pictures, paths)

Reported from the browser edition of BimCraft 0.8.1: with an L-shaped stair with winders selected, Build > Move did nothing and a drag panned the plan. Move, Align and Distribute only knew walls, floors, columns and placed library items. Now a stair moves by a vector (its steps, rails and stairwell are made again; one undo step; selecting any of its parts counts as the stair). The same fix covers ramps, railings, roof planes, free-standing electrical devices, pictures and paths / driveways / patios. Devices on a wall, foundations, floors, ceilings, rooms, countertops, framing, dormers and doors / windows follow their parent and are not moved on their own. Copy is refused for these (as for placed items). No grips on a selected stair: Move is the way. Tests: bin/test-bimcraft.mjs --modify (stair, ramp, railing, roof plane, device); pictures and paths wired but not yet exercised by a test. Site masses and terrain are not movable.

BimCraft Built · Live – – From: site feedback (Site) feedback email 2026-11-03, BimCraft 0.8.1 browser
FixFX.2 Link to FX.2Comment on FX.2 Render falls back to WebGL when the GPU cannot start (Windows dxcompiler.dll error 87)

Reported by email: 'Failed to execute requestDevice on GPUAdapter: DynamicLib.Open: dxcompiler.dll Windows Error: 87' and the render stopped. The WebGPU path tracer already fell back to WebGL when GPU setup failed, but a requestDevice rejection carried no code, so the fallback never ran. pt-gpu.js and pt-denoise-gpu.js (BimCraft and ModelCraft) now tag that failure gpu_setup, so the still render drops to the WebGL engine instead of failing. The live view (ipr.js) calls the tracer without that fallback and may still show the error; not checked. Not tried on a Windows machine with the broken driver. Advice to the reporter: update the graphics driver and the browser, send chrome://gpu.

BimCraftModelCraft Built · Live – – From: site feedback (Site) feedback email 2026-11-03, Windows WebGPU
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.4 Link to FX.4Comment on FX.4 /studio facts list no longer says "Live: Local code (invite links not open yet)"

The Studio page's facts list had a Live row reading "Local code (invite links not open yet)" while invite links are off. The row now shows only when invite links are open (LIVE_PUBLIC), as "Local code, or invite link". The Live section lower on the page and the FAQ still say invite links are not open yet; bin/test-product.php updated, not re-run.

– Site and services Built · Live – – Owner, 2026-11-03
FixFX.5 Link to FX.5Comment on FX.5 Privacy notice: "Placeholder document" box removed

/legal/privacy no longer carries the dashed Placeholder document box saying it was not reviewed by the owner or a lawyer. The terms page still has its own. test-resources.php updated and passing (274). The wording itself has not had a legal review.

– Site and services Built · Live – – Owner, 2026-11-03
FixFX.6 Link to FX.6Comment on FX.6 Tutorials: each app's What's new said 0.7; now 0.8 and 0.8.1

The eight apps' What's new help topics still described 0.7, including in the frozen 0.8.1 builds. New "What's new in 0.8 and 0.8.1" topics written from the release notes (a Discord member help, compiled); the 0.7 text stays as whats-new-0-7. The site shows the a Discord member copy of the release-note topics only when its title names the shown build (Help::withReleaseNotes); the 0.8.1 builds' in-app help still has the 0.7 text. Translations of the topic are stale. The eight pages were written by background agents; only TakeoffCraft's was read through by hand.

– Help and wordsSite and services Built · Live – – Owner, 2026-11-03
FixFX.9 Link to FX.9Comment on FX.9 EnergyPlus check and address lookup add-ons could not be switched on

The add-on loader refuses a description over 400 characters. BimCraft's EnergyPlus add-on (451) and CivilCraft's site-geocode-osm add-on (488) were over it, so neither could be switched on. Both descriptions shortened (388 and 369), same facts. test-addons-apps 112/0. Untested: switching each one on by hand in /lab.

BimCraftCivilCraft Built · Live – – Found by session climate-futures-09, 2026-11-03
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.12 Link to FX.12Comment on FX.12 Library item page: shows whether X, Y and Z are scalable; "Scale: Fitted" removed

Reported by the owner: the title strip under the drawing said 'Scale: Fitted', which only meant the plan was drawn to fit the frame and told nothing about the object. That cell is now 'Scalable' (No, or the axes, such as X, Y), the caption says the drawing is drawn to fit, not to a scale, and the Data table has one row per axis (Scalable: width (X), depth (Y), height (Z): Yes or No) under the sizes. The 'Stretching' row in the facts list is gone, since it said the same thing. Values come from library_versions.stretch; shown for equipment, furniture, fixtures, doors, windows, symbols and details. Checked on the live page on a none item and an x,y item.

– Built · Live – – From: owner (Site) owner 2026-11-03, library item page
FixFX.13 Link to FX.13Comment on FX.13 MarkupCraft: removed markups stayed readable inside the saved PDF

Found while building NOTES.1. Saving took a deleted or rewritten annotation off its page but left the object in the file, with its text and appearance, so anyone reading the PDF's bytes could still recover it. Save now deletes those objects, their appearance streams and photo attachments. Checked by opening every object and stream of saved files in bin/test-markupcraft-notes.mjs and tools/markupcraft-test/browser-notes.mjs. In /lab, not released. Copies saved by earlier builds still hold them until saved again.

MarkupCraft Built · Live – – From: owner (Site) found building NOTES.1, 2026-11-03
FixFX.15 Link to FX.15Comment on FX.15 SuperCad: reopening a project could overwrite a marked-up PDF

Found building NOTES.1. A saved project holds name.pdf and name (marked up).pdf, and reopening opened both. Both save as name (marked up).pdf, so saving the original's sheets could overwrite the marked-up copy and its markups. A PDF with a marked-up copy now stays in the project but does not open. Checked in tools/super-test/private-notes.mjs, in /lab. Not released.

MarkupCraftSuperCad Studio Built · Live – – From: owner (Site) found building NOTES.1, 2026-11-03
FixFX.16 Link to FX.16Comment on FX.16 TakeoffCraft: areas in m² on the drawing, wall area in the tables, currency symbol

Reported on lab pass 18 (TK.1) by a Greek tester: (1) an area measured with a metric item showed m² in the table but 'SF' in the drawing label and the mark panel. Now one areaShow() writes m² when the item is priced in metric or lengths show metric (m/cm/mm), else SF; used for the drawing tag, the mark panel (area, back-outs, plan area, outline, cut-outs, wall area). (2) A linear item with a height only showed its wall area in the item editor; the Items list now ends 'wall 12.34 m²' and the by-item quantities table gets a note row under it (length × height). Tiling a bathroom: floor = an area item in m², walls = a linear item with the wall height (or an assembly component with formula A priced per m²). Not built: one combined floor + walls total, or pricing a linear item per m² directly. (3) New Settings › TakeoffCraft › Currency symbol ($ € £ CHF kr zł R A$ C$): prices, bid PDF, CSV/XLSX number formats. Display only, nothing converted, per viewer (not saved in the project file). Existing suite 1196 pass; no new test, not tried in a browser; other languages show English for the new strings.

TakeoffCraft Built · Live – – From: site feedback (Site) lab pass 18 feedback 2026-11-03
FixFX.17 Link to FX.17Comment on FX.17 Account pages: side panel redesigned

Owner 2026-11-04 on /account/developers: 'left panel design it better'. The panel was a flat list of up to 12 links floating on the page grid, and on a short window its sticky list could leave the last links out of reach. Now it is a ruled box like the settings sections, with the account's address at the top and links grouped as Account, Cloud, Library and add-ons, Programs and Bidding, in the same order as before; a group with nothing to show is not drawn. The current page has a tint and a blue bar, and the panel scrolls by itself when it is taller than the window. Phones keep the wrapping tabs. Checked on the account pages at desktop and phone sizes, in Paper and Model. Not checked with SuperCad Studio and Your students showing together (12 links).

– Built · Live – – From: owner (Site) owner 2026-11-04
FixFX.18 Link to FX.18Comment on FX.18 Developers page: Make a key redesigned, form errors now show

Owner 2026-11-04 sent a screenshot of /account/developers. The form was a narrow column with a long flat list of permissions. Now it fills the section, permissions are a table of areas by See and Change with the scope name in small text, Data choices sit side by side, and Workspace, Expires and Allowed addresses are grouped as Limits. The API keys section gets a docs button and a link to the first key. Bug fixed: after the Name field the form lost its form id, so a missing permission or a bad address said 'Check the highlighted fields' with nothing highlighted, and Workspace, Expires and Allowed addresses were lost. Checked with a real live key on a test account: bad input, make, show once, revoke; desktop and phone, Paper and Model. Sandbox keys could not be checked: the sandbox is not open.

– Built · Live – – From: owner (Site) owner 2026-11-04
FixFX.19 Link to FX.19Comment on FX.19 Developers page: new key panel and key list redesigned, Roll and Revoke ask first

Owner 2026-11-04: 'redesign the keys table and new key panel too', on the new key panel 'ugly'. The new key now sits in its own box with Copy key, above a Try it command with Copy command. The old command was cut off and could not run; the new one runs as pasted (/v1/account when the key may read it, else /v1/endpoints). The table became one block per key: name, mode, Expired or Paused, what it can do in the form's words, workspace, expiry, allowed addresses, last used, and the last calls as a small table. Roll and Revoke used to act on one click; both now ask first (needs JavaScript; without it they act at once as before). Checked with real live keys on a test account: copy, both commands answered 200, cancel and accept on the questions, roll, revoke; desktop in Paper and Model, phone in Paper. Not seen: Expired and Paused tags, Sandbox keys.

– Built · Live – – From: owner (Site) owner 2026-11-04
FixFX.20 Link to FX.20Comment on FX.20 Account: license certificates open in the MeCentral vault, not on this site

Owner 2026-11-04 on /account: the View links in the MeCentral vault card should go to the vault; 'there really should never be a link to view on getcadcraft'. View opened CadCraft's stored PDF unless a setting was on. Now a filed certificate links to its document in MeCentral, and one not yet filed has no link. The old /account/license-certificate page no longer shows the PDF: a kept link goes to that member's document in MeCentral, anything else is a 404. Staff keep 'CadCraft's copy' on /admin/accounts/view. A person has to be signed in to MeCentral with the vault opened to see the document.

– Built · Live – – From: owner (Site) owner 2026-11-04
FixFX.21 Link to FX.21Comment on FX.21 Account: a certificate whose MeCentral link fails opens a support ticket

Owner 2026-11-04: if the MeCentral link can't be obtained, open a support ticket, never show the local version. The broker cron now opens one ticket in /admin/messages (topic Licensing, with the member's address) for a filing that is held, rejected, filed with no document id, or unanswered after a day. Expected refusals (address not verified, not permitted, test fixture, account gone) open none. The member gets no acknowledgement mail; the /account card says 'We opened a support ticket for this' with no link, until the filing succeeds. No filing was failing when this went live, so no ticket has been opened on a real account yet.

– Built · Live – – From: owner (Site) owner 2026-11-04
FixFX.24 Link to FX.24Comment on FX.24 Student Program: verifying the email issues the license, no approval step

Only .edu / .ac.xx addresses were issued on the verify click; any other school address (cvut.cz) waited in Waiting for a staff Approve. Now every verified address is issued at once (active, welcome email, certificate). The Approve button is gone. New column student_licenses.upgrades_until (migration 121): set to a year on issue, moved on a year by each yearly check (confirm) on the SAME license, never a new one. Test bin/test-student-program.php (94). Not changed: an active student still has every version; the date is recorded, shown nowhere yet, and not yet read by the entitlement.

– Built · Live – – Owner, 2026-11-04
FixFX.25 Link to FX.25Comment on FX.25 Website: show/hide eye on password fields (sign in, create account)

Password fields had no way to check what was typed. /login, /signup and /admin/login now have an eye button inside the field that shows or hides the password. Because it lives in the shared account/field.inc, the reset-password page, the password fields on the profile page and the app sign-in confirm page get it too. The button appears only once site.js runs (no dead button without JavaScript); the field goes back to masked on submit so browsers still offer to save it as a password; Edge's own eye is hidden so there are not two. Tested in headless Chromium on /login, /signup and /admin/login (reveal, re-mask, masked on submit, no JavaScript). Not tried on the other pages, in Edge or Safari, or with a screen reader. Not added to the cloud encryption passphrase, own-storage secret or SSO secret fields, which do not use field.inc.

– Built · Live – – From: owner (Site) owner request 2026-11-04
FixFX.52 Link to FX.52Comment on FX.52 Student Program: school address at the door, and applicants see what happened to our email

Owner 2026-11-05: a verified address alone does not show someone is a student, and an applicant could not tell that our email never reached them. Personal mail providers (Gmail and the like) are now refused at the form, for students and teachers. Any other host passes, because real schools often have no .edu in the address (cvut.cz, ualg.pt). After applying, the person lands on /education-status, which shows whether our email is on its way, was delivered, was refused or found no mailbox; applying again with the same address brings them back there. Only a refusal by their school's server (like the 550 5.7.1 we saw from itcgalilei.edu.it and aglousa.com) unlocks using another address; a mailbox that does not exist does not, or a made-up address would open the door. Staff see the refused address on the row. Quarantined mail reports as delivered: those people are told to write to us from the school address, and staff use "Issue without the click". Migration 123. Tests in bin/test-student-program.php (140 pass). Not done / untested: no real outside applicant has used the page yet, and no real refusal has been seen through it (the states were set by hand on a fixture, against the live site). The personal-provider list cannot be complete and does not cover throwaway mail services. A person who knows a school that refuses mail could still name it to reach the other-address form. Nicolas and the aglousa.com applicant can only find this by coming back: we have no way to reach them.

– Built · Live 1 – Owner, 2026-11-05
FixFX.53 Link to FX.53Comment on FX.53 Student Program: 3-year term, with proof of enrollment to go longer

Owner 2026-11-05: a student license now runs 3 years from issue: a check after year one and after year two, then it stops by itself with no third check. Neither a new check, an old link nor a staff check brings it back; staff extend it a year at a time after seeing proof, with a required note (/admin/student "Extend by a year"). Proof arrives by email to the inbox, so no documents are stored on the site. The installed program keeps working and keeps the versions it covered, as before. Teachers have no term. Licenses issued before this rule keep the old terms (term_ends_at empty). Copy updated on /education, /supercad, the join page, emails, the license certificate and the educator kit; the four kit PDFs were rebuilt. Not done / untested: the term was tested with a fake clock, and the first real term ends in 2029. A 4-year degree will need the proof step in its last year. The Developer API docs do not mention the term; teachers' systems see the end of a term as student.stale.

– Built · Live 1 – Owner, 2026-11-05
FixFX.54 Link to FX.54Comment on FX.54 Student Program: leftovers from when staff approved applications

/admin/students opened on an always-empty Waiting tab: it now opens on Active, and Waiting hides when empty. The form's note hint promised a proof-by-reply check that no longer existed. The welcome email's preview said "Sign in with your school email" even for other addresses. The verify email still said a person would check non-school addresses. The kit said a .edu address was needed for an instant license. All corrected. Also: t= links are now hidden in the analytics log, because the status link is private.

– Built · Live 1 – Owner, 2026-11-05
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
FixBot obtainedFX.73 Link to FX.73Comment on FX.73 Internal Roadmaps editor: the Markdown preview is white in Model view, so the light text cannot be read

In /roadmap-internal/edit the Markdown preview panel (.md-pv) had a fixed white background, while Model view turns the text light, so headings and paragraphs vanished (tables kept their own background). The panel now uses the theme sheet colour, so it follows Paper and Model.

– Built · Live 1 – owner screenshots 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.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
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.116 Link to FX.116Comment on FX.116 TakeoffCraft: no 1:150 or 1:75 metric scale presets

Asked in support message #1301 (drawings at 1:150): the metric presets went 1:100 to 1:200. Added 1:75 and 1:150 (now 32 presets, 14 metric) in units.js; the Scale presets help topic lists them and the count is corrected, help rebuilt. bin/test-takeoffcraft.mjs 1197 of 1197 (count updated, new check that both are metric). Not checked: the preset list on screen in a browser.

TakeoffCraft Built · Live – – From: Tom (Site) support message #1301 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.121 Link to FX.121Comment on FX.121 Admin dashboard shows SuperCad Studio revenue

The /admin dashboard counted SuperCad owners and seats but no dollars: revenue figures read only owned licenses and Team Cloud Plan. Added a "SuperCad Studio revenue, all time" tile, SuperCad rows in the License payments table, and SuperCad in the one daily chart: blue bars = licenses, green bars = SuperCad seats, line = grand total revenue to date (all sales). Test emails left out. Billing::revenue(), payments(), dailyLicenses(). Not in the Licensed users count. Checked against live data (4 purchases, 6 seats, $175; Handybear $150 listed); page not looked at in a browser.

– Built · Live – –
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
FixFX.133 Link to FX.133Comment on FX.133 TakeoffCraft: item list quantity label broke the page (itq0 not defined)

Found while testing TKW.1 in the real page: qtyLabel in takeoffcraft.js (a Discord member) read itq0.conds and t.conds, a half-finished rename of the quantity map (it.conds and tq0.conds are right), so the page threw on load and no browser test could open. Corrected the two names. Separate, not fixed: tools/takeoffcraft-test/browser-propgrid.mjs fails in a fresh profile because the shell Auto-focus panel folds the item grid; browser-weights-temps.mjs switches it off first.

TakeoffCraft Built · Live – – found testing TKW.1 2026-11-08
FixFX.134 Link to FX.134Comment on FX.134 Website: /admin dashboard took 5 to 6 seconds to load after every new signup

What was wrong: the dashboard's metrics cache (a day) was dropped by every new account, email verification and license event, 100 to 230 times a day, and the recount ran in the page request: 4 seconds of it were three COUNT queries over a million session_activity rows (pageviews, visitors, app opens over 30 days). Largest Contentful Paint 5.72 s in the owner's measurement (2026-11-08). What changed: AdminDashboard now keeps two caches. Accounts, signups, licenses and revenue (~25 ms to count) stay on the day cache dropped by audit events. Traffic is read from the stored /admin/analytics 30-day report (counted nightly by bin/warm-analytics.php), never counted while a page waits; when that report is missing or past its time the page shows what it has and starts the count in the background (bin/warm-analytics.php --days=30, one at a time, lock tmp/cache/.analytics-warm-30.lock), and says so. A fresh analytics count now replaces the stored report only when done (Cache::put) instead of deleting it first. Count again now (?fresh=1) recounts the account figures at once and starts a traffic count. Admin bar counts stopped fetching 500 library versions and 200 SuperCad inquiries to count them (LibraryVersions::countPending, SuperCadLicenses::counts). Also found: 2.45 million session files (PHP's collector is off for the custom path, 521,000 of them empty from crawlers): bin/session-gc.php + /etc/cron.d/cadcraft-sessions remove expired and empty ones daily. Measured with the new shim bin/admin-perf.php (in-process render with every query timed, or --http against the live vhost as the test admin): cold cache 4,233 ms to 75 ms; warm 50 ms either way. Not done: MySQL innodb_buffer_pool_size is 128 MB on a 32 GB server (session_activity alone is 646 MB), a server-wide setting for the owner; crawlers still start a session on every visit.

– Built · Live – –
FixFX.135 Link to FX.135Comment on FX.135 Website: /admin/library (3.8 s) and /admin/analytics (1.7 s) staff pages were slow

Found with bin/admin-perf.php while fixing the dashboard (FX.134), 2026-11-08. /admin/library: LibraryVersions::possibleDuplicates joined every version to every other version with the same source hash. The Library's generated collections share one source file across 250 items of one maker, so the self-join compared about 6 million pairs to find nothing (3.8 s). The source branch now starts from source hashes held by versions of two or more owners (a pair with different owners needs one), which is the same answer: 365 ms. /admin/analytics: the browser-language list (Analytics::languages) was the one figure counted live on every load, 1.7 s over session_activity; it is now part of the stored report (Analytics::report carries languages), counted nightly by bin/warm-analytics.php like the rest. Loads in ~60 ms. Tests: bin/test-library-admin.php, bin/test-admin.php (one failure in the message search is other sessions' uncommitted work on Contact.php, not this).

– Built · Live – –
FixFX.136 Link to FX.136Comment on FX.136 Website: 2.45 million session files; sessions now collected (21 days, empty after a day, CSRF-only after 48 h), none for crawlers

What was wrong (2026-11-08): PHP's session collector is off for the site's own sessions folder (session.gc_probability 0; the system timer only cleans /var/lib/php/sessions), so nothing ever removed a session file. After one month: 2.45 million files, 521,000 empty. A sample showed 99 % of the rest hold only an 83-byte CSRF token: a first visit that rendered a form and never came back. Most come from cookie-less crawls with plain browser user agents (one walks every /roadmap-issues filter permutation, about 4,000 requests an hour in bursts, from Huawei Cloud Singapore), which start a fresh session on every request. In 7 days bots made 103,244 sessions against 73,607 from people. What changed (owner's choices): SESSION_LIFETIME 21 days; bin/session-gc.php from /etc/cron.d/cadcraft-sessions every 6 hours removes expired sessions, empty ones older than a day, and sessions whose whole content is the CSRF token line after 48 hours (1.47 million removed on the first run); core/bootstrap.php starts no session and sets no visitor cookie for named crawlers, link previewers and scripted HTTP clients arriving without our cookie (curl, wget, headless browsers, the smoke test and empty user agents still get one: the test suites need CSRF and sign-in). Also: MySQL innodb_buffer_pool_size 128 MB to 1 GB (SET PERSIST, online). Cost accepted: a person who leaves a form open for two days and then submits gets the CSRF 403 and submits again. Not done: stateless CSRF (no session for anonymous visitors) and throttling the roadmap crawl; the owner judged both too likely to break things.

– Built · Live – –
FixFX.139 Link to FX.139Comment on FX.139 Screenshot mode for /lab: ?shot=1 hides the Lab badge, stamp and staff panel; capture tools shoot from /lab

Why: 0.9 media (store shots, tutorial pictures, About/README screenshots, videos) should not wait for the real 0.9 builds, and the lab badge, build stamp, staff panel and 'a Discord member' must never show in them. Changed: shot_mode()/shot_version() in core/functions/helpers.php (lab testers only, /lab/ pages only, per request: no cookie or session, so it cannot reach /use). With ?shot=1 the app bar drops the Lab badge, build stamp and version list; Settings > Version and the About dialog show the release number (0.9, or ?shotv=); header.inc drops the staff panel. New tools/shot-target.mjs (LAB_SHOT=1 points tools/help-walkthrough-shots.mjs, tools/help-shots.mjs and videos/kit/shoot.mjs at /lab/<app>?shot=1 as the shell test admin); stores/kit/lab-shots.mjs now uses the param (its visible-text guard stays); tools/shot-freeze.php record|check lists apps whose lab build moved since the shots (docs/0.9-shots-freeze.json). Tried: lab-shots (CadCraft, BimCraft) and help-shots (MarkupCraft) on the VPS, badge and staff panel gone, guard passed. Untested: the tutorial walkthrough and video tools with LAB_SHOT=1 end to end, native window chrome per OS (needs a real Studio build), no freeze recorded yet.

– Built · Live – – From: owner (Site) owner 2026-11-08 (screenshots from /lab)
FixFX.141 Link to FX.141Comment on FX.141 Apps: every app page decoded 130 language files (43 MB) to list the languages in Settings

Built: app-settings.inc called json_decode on every language file under assets/lang on every /use and /lab app page to show each language's own name in Settings, 156 ms of PHP per page view. Lang::nameOf() now reads the first 1 KB of a file and takes "@name" from it (every file tools/lang writes puts @locale and @name first; a head without it falls back to a full decode). app-settings.inc and Lang::siteChoices use it. Measured: app-settings.inc 156 ms to 2 ms, time to first byte of /use/cadcraft on localhost 230 to 290 ms to 95 to 110 ms, the same 84 language options. Tests bin/test-lang-packs.php 21/21. Log docs/0.9-sessions/perf-09.md. (Filed as FX.137 in that log at first; the key was taken by the arc methods the same day, so this row is FX.141.)

– App shell Built · Live – – docs/0.9-sessions/perf-wave3/
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/
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
Library 8
FeatureATTR.1 Link to ATTR.1Comment on ATTR.1 SuperCad Studio: project report binder with an automatic credits page

Owner 2026-11-03: 'a project report binder, where all the documents go, calculations, notes, etc., and add a credits page.' Built in the lab as the report-binder plugin (Workflow menu, Ctrl+K, Report and price strip): one PDF with a cover and contents, calculations, notes, tasks, optional time and calendar, documents, and always a Credits page, stamped with page numbers, saved in Documentation and downloaded. Credits come from saved IFC and DXF files and from open CadCraft panels (lib/report/credits.js); a closed DWG is listed as not checked. Engineer calculation reports file themselves in the project. Other files are named as not included. Not built: the binder in the Finalize and export zip, other apps' calc sheets filing themselves, bookmarks, a credits table on a sheet in CadCraft and BimCraft. Other scripts print as ? in typeset pages. Tests: bin/test-super-binder.mjs, tools/super-test/binder.mjs. Not released.

SuperCad Studio Built · Live – – From: owner (Site) owner 2026-11-03, library item page
FeatureATTR.2 Link to ATTR.2Comment on ATTR.2 SuperCad Studio: tick what goes in the Finalize and export zip

Owner 2026-11-03. The export dialog has a 'Project documents in the zip' list under the formats: Project file, Notes, Tasks, Time log, Calendar events, Project report binder, Credits page, Documentation folder. Plugins offer items through api.exportItem. The binder is ticked the first time, the rest are not; ticks are remembered in this browser. They go in documents/ and contents.txt names anything that had nothing to add. CC0 items stay on the credits page. Tests: bin/test-super-binder.mjs, tools/super-test/binder.mjs. In /lab, not released.

SuperCad Studio Built · Live – – From: owner (Site) owner 2026-11-03
FeatureATTR.3 Link to ATTR.3Comment on ATTR.3 Report binder: choose the section for each document

Owner 2026-11-03. Each document in the binder dialog has a section picker (Calculations or Documents), kept in the project. Until someone picks, the guess uses who made it (Engineer), the name (calc, calculation, data sheet, analysis, sizing) and the text (an engineer-of-record line). Only those two document sections exist; no sections of your own. Tests: bin/test-super-binder.mjs, tools/super-test/binder.mjs. In /lab, not released.

SuperCad Studio Built · Live – – From: owner (Site) owner 2026-11-03
FeatureATTR.4 Link to ATTR.4Comment on ATTR.4 Report binder: Unicode text, Arabic and Hebrew right to left

Owner 2026-11-03. Typed pages now embed a subset font only when the text needs one: Latin extended, Greek and Cyrillic (Liberation Sans), Arabic, Hebrew, Armenian and Georgian (DejaVu Sans, newly vendored in assets/vendor/rtl-sans), Thai, and Chinese, Japanese and Korean (10 MB, fetched on first need). Arabic letters join and right-to-left lines are ordered with numbers and Latin kept in order (lib/report/bidi.js, a simplified bidi, no bidi control characters). Limits: Devanagari and other Indic scripts have no font or shaper, so they still print as ? and are counted; those stretches print regular, never bold or italic; text copied from Arabic pages comes out as presentation forms in visual order; the page stamp leaves off a project name it cannot print. A font that fails to load prints ? and the dialog says so. Checked by eye on one rendered page, not by a native reader. In /lab, not released.

SuperCad Studio Built · Live – – From: owner (Site) owner 2026-11-03
FeatureATTR.5 Link to ATTR.5Comment on ATTR.5 Report binder: clickable contents and PDF bookmarks

Owner 2026-11-03. Each contents row on the cover links to its page, and the PDF has bookmarks by section with the documents under them. Read back with pdf.js. A merged PDF's own bookmarks are not kept. MarkupCraft's writeOutline moved to lib/report/outline.js. In /lab, not released.

MarkupCraftSuperCad Studio Built · Live – – From: owner (Site) owner 2026-11-03
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
Site 1
FeatureSTATUS.1 Link to STATUS.1Comment on STATUS.1 Public status page and API: /status and /v1/status, with uptime tracking

A public /status page shows "All systems operational" when that is true, each system's state, 90 days of daily uptime bars, 7/30/90 day uptime and recent incidents. The same data is public JSON at /api/v1/status and api.getcadcraft.com/v1/status (in the Developer API docs). Seven systems: hosting and web, data, API services, MeCentral, cloud, payment and messaging connectivity. A check runs every 5 minutes against the real service: public URLs, a database read and rolled-back write, MeCentral and storage lookups, a read of the payment account and a sign-in to the mail relay (no mail sent, no money touched). Late checks show as late rather than as an old all-clear; while the database is down the page still renders and results wait in a spool. Tested with bin/test-status.php (36 pass), against the live services, and on screen in both themes and at phone width; a real outage has only been simulated. The checks run on the server they watch, so a full server or network outage shows only afterwards, as a gap counted against hosting; an outside monitor is not built.

– Built · Live – – From: owner (Site) owner request 2026-11-04
Digital twin add-on (TW) 9
FeatureTW.1 Link to TW.1Comment on TW.1 Digital twin: soft PLC runs on the flow model

Built in the lab: lib/plc in lock step with the flow simulation, IEC 61131-3 ST or PLCopen XML, starter program from the layout. Same program and seed repeat to the byte. No real PLC involved.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.2 Link to TW.2Comment on TW.2 Digital twin: forces, faults, stock tests, report

Built in the lab: force any signal; stuck eye, stuck gate, belt stop, station down, emergency stop; stall watchdog; tests every layout gets; CSV report. A program that ignores the stop fails on the right check. Not a safety validation.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.3 Link to TW.3Comment on TW.3 Digital twin: rigid-body physics on loads

Built in the lab: our own XPBD with moving belt surfaces, boxes only, up to 8 loads along one line. Checked against closed forms: slip tan θ = μ, tip tan θ = L/H, belt pick-up v/(μg). Formula screen per belt agrees with the run. Not against a measured line yet (TW.12).

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.4 Link to TW.4Comment on TW.4 Digital twin: compare layouts, bottleneck ranking

Built in the lab: repeat runs on common random numbers, 95 % intervals on paired differences, "no clear difference" when the interval holds zero. Ranks what is limiting; found a planted slow station. A ranking, not a proof.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.5 Link to TW.5Comment on TW.5 Digital twin: equipment view

Built in the lab: frames, rollers, legs, machines, robots with moving arms, people, cartons and vehicles in place of plain marks. Generic shapes for the picture. Arm motion is for the picture, not a robot program. Not checked for frame rate on large layouts.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.6 Link to TW.6Comment on TW.6 Digital twin: run into the model for the path tracer

Built in the lab: equipment as real geometry, loads on the animation timeline, up to 150 loads. Path-traced frame at a timeline time rendered on workstation11a (RTX 5070). A full path-traced clip has not been run. Arms do not move in the baked clip.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.8 Link to TW.8Comment on TW.8 Digital twin: ready cells as data

Built in the lab: PLC stop gate, robot palletizing, two-lane sorter, incline and curve. One data entry per cell. Numbers are starting points.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.9 Link to TW.9Comment on TW.9 Digital twin: bill of materials

Built in the lab: quantities from the layout, CSV with price and supplier columns for the person to fill in.

ModelCraft Built · Live – – docs/0.9-DIGITAL-TWIN.md
FeatureTW.15 Link to TW.15Comment on TW.15 Digital twin: order files from a warehouse system

Built in the lab (Material flow add-on, ModelCraft): a source can take its arrivals from a CSV orders file instead of random times (columns time_s / time_min / time_h / time / clock, type, length_m / length_mm, qty, source, order; the time unit and base are stated in the help). The same file gives the same run for any seed (no random draw is used). A row that cannot be read stops the whole read and the panel names the first bad row (line, column, what the cell said); nothing is skipped. Tables are saved in the model file; Save as CSV writes one back. Sample orders (about 130 invented rows) are in the add-on's data folder and the flow listing's Data section. Tested: lib/flow orders tests in the flow suite, and in the real /lab page (browser-orders.mjs 10/0). Does not read any warehouse system's own format.

ModelCraft Built · Live 4 – docs/0.9-DIGITAL-TWIN.md
Planned suggestions, built in 0.9 (2026-11-06) 4
FeatureSU.747c Link to SU.747cComment on SU.747c NURBS surfaces, step S3: fillets and blends between faces, thickening, a solid written to STEP as one closed shell

Asked (#747, #748, #749, #750, Oct 16): concept-to-prototype NURBS and production-quality surfacing. S1 (curves, untrimmed surfaces, measured G0 to G2) is Built in 0.8; trimmed surfaces, solids from them with union, subtract and intersect, and PartCraft Bake are Built in /lab 0.9 (docs/0.9-sessions/nurbs-09.md). That log lists what is left and says 'Fillets between faces come next'. Plan (lib/nurbs): (1) fillets and blends between two faces, constant then variable radius, deviation from the rolling ball measured; (2) thickening a surface into a solid, self-intersection refused and named; (3) a solid written to STEP as one closed shell, read back; (4) Booleans as nodes. Each result measured against a closed form. Not claimed: class-A surfacing, the other programs' file formats, a result equal to Alias or ICEM Surf. Class-A and equality with Alias/ICEM are never claimed. Completed 2026-11-06: in /lab (ModelCraft, PartCraft, SuperCad Studio's panel through the shared libs): fillet between two faces (constant/variable radius, convex/concave, closed edge; deviation from the rolling ball measured), several edges at once (mitred corners; one sphere patch where three flat square faces meet, radius equal), thicken into a solid, STEP and IGES (186 over closed shell 514) with a solid as one closed shell, read back as a solid, Booleans as nodes in the node editor, help lines. Measured against closed forms (removed volume within 2 % at tol 0.05, goes with the tolerance). Not built: vertex blend for curved faces or unequal radii, fillet between faces that do not meet, inside fillet ending on a slanted or curved face, several inside edges that reliably close (the result line says if not), Booleans/fillets on the surfaces without triangles, IGES not tried in another program. Tests: docs/0.9-sessions/nurbs-s3-09.md.

ModelCraftPartCraft Built · Live 8 A real surface model from the reporters (#747 to #750) opened in another program would be the best test docs/0.9-sessions/planned-suggestions-09.md
FeatureSU.749 Link to SU.749Comment on SU.749 PartCraft: large assemblies, measured first at 1,000, 5,000 and 20,000 parts, then fixed where it is slow

Asked (#749, Oct 16): managing large, complex assemblies, with Catia named as the reference. PartCraft's stress tests so far are 750 features in one part (D7.51) and closed-loop mates (D7.40); no row measures an assembly of thousands of parts. Do: (1) generate the test assemblies ONCE under testfiles/generated/ (registry testfiles/LARGE-FILES.md, memory 'large-test-files'), from repeated instances of a few parts, not from files typed by hand; (2) measure open, rotate, select, mate-solve and save at each size in the real page, one browser test at a time with nice and timeout; (3) fix what the numbers show, in this order of likelihood: instancing (one mesh, many transforms), level of detail and a lightweight display mode, hiding by visibility sets, mate solving only for what moved, saving without rewriting unchanged parts. Record every before and after number in the log and in the release notes (memory 'test-results-in-release-notes'). Not claimed: Catia's feature set, any size without a measurement. Untested: everything, including the sizes above. assembly-09 2026-11-06: Measured at 1,000, 5,000 and 20,000 copies of three small parts in the real page (headless Chromium on a CPU renderer, never a GPU), before and after; fixed: one draw group per part (40,000 draw calls to 3 at 20,000), a joint turned places only the parts behind it (5.0 s to 65 ms at 20,000), the part list shows its first rows (a click 11 s to 26 ms), boxes while the view moves (Views > Lightweight display keeps them on; a frame 15.7 s to 0.9 s on the CPU renderer), and assemblies open up to 50,000 copies (500 before). A frame in full detail is not faster on the CPU renderer; assemblies of heavy parts and a real GPU are not measured. No claim about any other program. Table and tests: docs/0.9-sessions/assembly-09.md.

PartCraft Built · Live 6 Hand check is community test SU.749-HAND (not blocking) docs/0.9-sessions/planned-suggestions-09.md
FeatureSU.908 Link to SU.908Comment on SU.908 Finite elements for plates, shells and solids (linear static and modal), the engine behind slabs, shear walls and a solid stress check

Asked (#908: Abaqus, Ansys, SAP2000, STAAD.Pro, ETABS and others; #890 RFEM; #1057 SPACE GASS; #1141 SAP2000): finite elements beyond beams. Built (lib/fem, own code, Apache-2.0): four-node shell (MITC4 or DKQ), ten-node tetrahedron, modal analysis, sparse IC(0)-PCG solver, slabs and shear walls through the frame mesher; known-answer tests with cited derivations (Navier, Lame, Timoshenko, Leissa, Blevins; 60 + 10 + 15 checks). Reachable: the Analysis panel of BimCraft and DetailCraft, block 'Finite elements: natural frequencies': modes, period, effective modal mass, mode drawn on the model, member end releases and rigid floors carried, settings saved with the model, the report carries the table, help written. Deflections, reactions and plate moments of slabs and walls are shown by the frame solver in the same panel (lib/frame plates; lib/fem agrees with it to 1 % in tests). Solid FEM: lib/fem's tet10 solid is the PartCraft add-on 'Solid FEM' with its own panel (SU.908c); PartCraft keeps its own solver (owner 2026-11-06). DKQ is a panel choice; the static solve in the panel stays lib/frame's (one engine, no second copy). Not built: nonlinear, contact, damping, response spectrum, soil models. No claim of equality with any other program. Hand check: SU.908-HAND (big meshes and a real building on a workstation or by the community; not a blocker). fem-complete 2026-11-06: docs/0.9-sessions/fem-09.md

BimCraftModelCraftDetailCraftPartCraft Built · Live 12 Hand check is community test SU.908-HAND (not blocking) docs/0.9-sessions/planned-suggestions-09.md
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
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.