Datum network · 2026-10-30

The Datum network

1149 nodes · 2007 links, read from the repositories. Drag, zoom, click anything.

Show
graph.json
All / The network as a list7 internal notes not shown

The network as a list

The DATUM hub 1
  • DATUM

    The home of the Datum family: the design guide, the family memory, the app registry and the website.

App 8
  • Datum Atlas · atlas

    Choose the right material: property charts, selection and referenced data, in one app for Windows. For: Design and materials engineers, and students. Stack: Rust engine (crates/core) + Rust shell (src-tauri), Tauri 2, We…

  • Datum Calc · calc

    Engineering calculations with real units, as readable maths, with checks and a printable calc sheet. For: Mechanical, process, structural and electrical engineers, students and lecturers: everyone who writes calculations…

  • Datum Mesh · mesh

    Finite-element analysis on the desktop: stresses, deflections and temperatures in parts and frames. For: Mechanical, structural, process and aerospace engineers, students and lecturers. Stack: Rust engine (crates/core, o…

  • Datum Pipe · pipe

    Pipe stress analysis on the desktop: displacements, support loads, nozzle loads and code stresses, with an automatic isometric. For: Piping, stress, mechanical, process and plant engineers, consultants and students. Stac…

  • Datum Plan · plan

    Plan, schedule, track and report your projects: one small, fast app for Windows. For: Project managers, planners, engineers and contractors. Stack: Rust (engine + shell), Tauri 2, WebView2, SolidJS + Vite UI in strict Ty…

  • Datum Plot · plot

    Analyse data and make publication-ready graphs: statistics, regression, curve fitting and page layouts, in one app for Windows. For: Scientists, researchers, lab teams and students. Stack: Rust shell (src-tauri) + Rust p…

  • Datum Schema · schema

    Intelligent P&IDs and process flow diagrams: draw, check and list. For: Process, chemical, mechanical, piping and instrument engineers, operators and students. Stack: Rust engine (crates/core: model, symbols, graph, tags…

  • Datum Sim · sim

    Model and simulate dynamic systems: block diagrams, control and motors. For: Control, mechanical, electrical, process and mechatronics engineers, researchers and students. Stack: Rust engine (crates/core), Tauri 2, Solid…

Design guide (FAMILY.md) 13
  • §1 The apps

    | App | What it is for | Accent | Logo glyph | Files | Identifier | Repo | | --- | --- | --- | --- | --- | --- | --- | | Datum Plan | Plan, schedule, track and report projects | Blue #0B5CAD (glyph #2F6FCF) | Calendar wi…

  • §10 Docs in every repo

    · CLAUDE.md: read MEMORY first; update it at the end of every session; the user's preferences; the checks; the release steps. · docs/MEMORY.md: product table, architecture (files), decisions (version | decision | why), r…

  • §11 How we work (from Datum Plan)

    · The user reviews a release and sends screenshots. · Reproduce first. · Big asks get a plan file and questions; build after the answers. · Engine first (with a test), then the UI. · Check every change in the real app (X…

  • §12 Starting a new Datum app (checklist)

    · Create the repo Edgar-Mendonca/Datum-<Name> (MIT). · Copy the skeleton from Datum Plan: · the workspace Cargo.toml, crates/core (empty engine), src-tauri (main, update.rs, tauri.conf); · ui/ (index.html with the icon s…

  • §13 Principles and public words

    Datum: free, open-source desktop tools for engineers, scientists, researchers and analysts. Small, fast apps that do serious technical work, written from scratch in Rust, with one look and one way of working. No accounts…

  • §2 Stack (the same in every app)

    · Rust + Tauri 2 desktop shell (src-tauri), Windows first (NSIS per-user installer, WebView2). · Engine in a pure-Rust crate (crates/core): all calculation lives there, with unit tests. The window only shows what the eng…

  • §3 Colour

    ### Base tokens (all apps, from ui/src/styles.css) Light: --bg #F2F3EF --bg2 #FFFFFF --panel #F8F8F5 --panel2 #ECEDE8 --side #F3F4F0 --line #D3D7D6 --line2 #E6E8E5 --line3 #B9BFC2 --text #0C1A2B --text2 #3B4859 --muted #…

  • §4 Type

    · IBM Plex Sans for text, IBM Plex Mono for uppercase spaced labels, tabs, buttons, numbers and IDs (@fontsource, Latin subsets only, about 200 kB). · Group captions, card headings and buttons: Plex Mono, 9.5–11 px, lett…

  • §5 Logo and branding

    · Tile: 256×256 viewBox, a rounded square (x=8 y=8 w=240 h=240 rx=56), a white→accent-tint diagonal gradient, and a 4 px border in a light accent tint. · Glyph: drawn in the accent with 11 px strokes, round caps. It may …

  • §6 Window layout

    · Title bar: quick access (save, undo, redo, print), document name, "Tell me what you want to do" (Ctrl+K), a Theme button (Auto/Light/Dark). · Ribbon: a FILE button in the accent, then tabs. Groups have a mono uppercase…

  • §7 Components

    · Controls: square corners, 1 px lines, no heavy shadows. Buttons are Plex Mono uppercase (.btn, .btn.pri filled accent, .btn.sm). · Menus: icons in the tick column, keyboard hints on the right, submenus to any depth, cl…

  • §8 Printing

    · File › Print (Ctrl+P) shows settings on the left and a live page preview on the right, for every view. · The settings: paper, orientation, scaling or fit-to-pages, margins, page ranges, header and footer (left/centre/r…

  • §9 Updates and releases

    · Updater: src-tauri/src/update.rs. · Set REPO to the app's repo. It checks GitHub releases at start, and beta versions when turned on. · It downloads the installer, checks SHA256SUMS and installs. · The CHANGELOG sectio…

Technology 20
  • Astro
  • Chart.js
  • GridCraft
  • IBM Plex
  • lmfit
  • matplotlib
  • NSIS
  • numpy
  • openpyxl
  • Playwright
  • Python
  • Rust
  • SciPy
  • SolidJS
  • statsmodels
  • Tauri 2
  • TypeScript
  • Vite
  • WebView2
  • Xvfb
How we work 9
  • 1. The user reviews the last release in…

    The user reviews the last release in the app and sends screenshots with bugs and wishes.

  • 2. Diagnose first

    Diagnose first. Reproduce the problem in the test harness or the real app before changing code. Small fixes go straight to a release.

  • 3. Bigger asks get a plan file (docs/PLAN-x

    Bigger asks get a plan file (docs/PLAN-x.y.z.md): feedback, diagnosis, proposal by area, size, and questions. The plan is logged in this file and pushed. Build only after the user answers.

  • 4. Build in small steps, engine first…

    Build in small steps, engine first (crates/core, with a unit test), then the UI. Keep code compact and in the surrounding style.

  • 5. Check in the real app under Xvfb…

    Check in the real app under Xvfb (scratchpad/app.sh restarts Xvfb and the app, opens the Engineering template and skips Setup), with screenshots of each change. Fix what looks wrong.

  • 6. Add a UI test for every reported bug…

    Add a UI test for every reported bug and new feature (tests_ui/run.cjs, Playwright against ui/dist with the dump fixture). Make sure it fails on the old code where possible.

  • 7. Run the checks

    Run the checks: clippy -D warnings, cargo test --workspace, npm run check:ui, and the UI tests after npm run build:ui + cargo run -p datum-core --example dump > tests_ui/fixture.json.

  • 8. Release

    Release: bump both Cargo.toml files, write the CHANGELOG (it becomes the in-app "What's new"), update this file (version, roadmap, files, decisions, session log, limits), commit, push, run release.yml (workflow_dispatch)…

  • 9. Report to the user in plain language

    Report to the user in plain language: what changed, what was checked, what is not done, and anything to check on Windows.

Decision 470
  • ? help beside the tools in every Datum app: a click opens a… · atlas

    ? help beside the tools in every Datum app: a click opens a card saying what the tool is for and how to use it, from one HELP table Why: The user, instead of a teaching mode: “we should do it in all of our applications”.

  • Answers (PLAN-0.1 §10): name Datum Atlas; engineers and… · atlas

    Answers (PLAN-0.1 §10): name Datum Atlas; engineers and students; 100 materials; users add their own with a window explaining what is needed; eco audit and process selection before 1.0; earlier "material atlas" repo not …

  • Answers to PLAN-0.1.1 §7: build §3; 22 goals (the screenshot… · atlas

    Answers to PLAN-0.1.1 §7: build §3; 22 goals (the screenshot showed 14, so 8 extras); goals set the line and suggest limits; a goal changes the open chart; check data now, metals first; no teaching mode Why: The user's a…

  • Basic selection (limits, line, box, families, results) moved… · atlas

    Basic selection (limits, line, box, families, results) moved into 0.1.0; index builder and expressions become 0.2 Why: The user: "start with the basics: how the property charts are done, selection and so on".

  • Built-in data compiled by us from public sources, a reference… · atlas

    Built-in data compiled by us from public sources, a reference for every value; never proprietary databases Why: The user's instruction and brief §3.5.

  • Ceramic, glass and stone strengths: tensile column holds the… · atlas

    Ceramic, glass and stone strengths: tensile column holds the flexural strength (noted on the datasheet); compressive strength added as its own property Why: Ceramics have no yield strength; the tensile test is rarely don…

  • Click on a bubble shows a short datasheet beside the chart… · atlas

    Click on a bubble shows a short datasheet beside the chart; double-click opens the full one Why: Keeps the chart in view while exploring; the brief's "click opens the datasheet".

  • Data check cites only primary publishers (producers… · atlas

    Data check cites only primary publishers (producers, suppliers' own datasheets, universities, government), never aggregator sites (MatWeb, MakeItFrom, Total Materia, Wikipedia); a value is marked checked only if the data…

  • Data for the 250 materials: open, public and free sources only… · atlas

    Data for the 250 materials: open, public and free sources only (government, open datasets, producers' free datasheets cited value by value, our labelled compilation). Never a proprietary or licensed database or aggregato…

  • Database as reviewed JSON in data/, embedded with include_str!… · atlas

    Database as reviewed JSON in data/, embedded with include_str! and validated by cargo test; each material has a status (draft/checked) Why: Readable diffs for every value and its source; honest drafts that tighten over r…

  • Dependencies arrive with the release that needs them: Chart.js… · atlas

    Dependencies arrive with the release that needs them: Chart.js (radar/bars), GridCraft (expressions), calamine/rust_xlsxwriter (import/export) Why: Keep 0.1.0 small and quick to build.

  • Derived properties are computed by the engine at load, not… · atlas

    Derived properties are computed by the engine at load, not stored Why: One source of truth; they follow corrections automatically.

  • docs/site.json (about, steps, highlights, roadmap) is updated… · atlas

    docs/site.json (about, steps, highlights, roadmap) is updated in every release, together with the roadmap here; public text never names or compares with a commercial product (hub FAMILY §13) Why: The user, 2026-10-28: th…

  • Elastomers and foams are top-level families (own colour and… · atlas

    Elastomers and foams are top-level families (own colour and envelope) Why: They sit apart on every chart.

  • Family envelopes are split into groups of nearby bubbles · atlas

    Family envelopes are split into groups of nearby bubbles Why: One convex hull around a spread-out family (natural materials, foams) covered half the chart.

  • Follow the established selection tool's workflow, never its… · atlas

    Follow the established selection tool's workflow, never its data, names, wording or artwork Why: The user suggested copying it; the brief forbids proprietary data and naming other products. Functional workflow is fine.

  • Goal limits are marked (Limit.goal) and replaced by the next… · atlas

    Goal limits are marked (Limit.goal) and replaced by the next goal; the user's own limits are never touched Why: A goal must be easy to change without losing the user's work.

  • Hardening (FAMILY §11) ships with the new features, built first · atlas

    Hardening (FAMILY §11) ships with the new features, built first Why: The user's answer to PLAN-0.1.2 Q8.

  • Logo: violet log–log axes, a dotted selection line between two… · atlas

    Logo: violet log–log axes, a dotted selection line between two family envelopes (the upper one with a violet bubble), the amber diamond at the line's end Why: The user asked for a better violet logo; it keeps FAMILY §5.

  • No Python inside the app · atlas

    No Python inside the app Why: The user's instruction and FAMILY §2: install size, start time, a second runtime.

  • One big update instead of small splits: 0.1.2 and the old… · atlas

    One big update instead of small splits: 0.1.2 and the old 0.2/0.3/0.3.1 become one release, 0.2.0 (PLAN-0.2.0.md); eco audit and process selection become 0.3.0. Hardening is still built first. Fixes between big updates s…

  • Own SVG chart engine; Datum Plot's matplotlib renderer is not… · atlas

    Own SVG chart engine; Datum Plot's matplotlib renderer is not reused, but its graph-view patterns are (log/linear mapping, hover, crosshair, double-click zones, docked Format panel, export dialog, Copy Picture through Ru…

  • Plan, memory and questions before any feature code; build… · atlas

    Plan, memory and questions before any feature code; build 0.1.0 after the answers Why: The user's instruction and FAMILY §12.

  • Rust computes chart geometry (bubbles, hulls); the window owns… · atlas

    Rust computes chart geometry (bubbles, hulls); the window owns the view transform, ticks and labels Why: Pan and zoom need no engine call per frame; values still come only from the engine.

  • The check used the figures quoted by web search from each… · atlas

    The check used the figures quoted by web search from each datasheet (the build machine cannot open web pages); a second pass that opens each document is planned Why: Recorded so nobody mistakes it for a table-level check…

  • UI tests run the real engine through examples/bridge.rs… · atlas

    UI tests run the real engine through examples/bridge.rs instead of a static fixture Why: Dragging the line, limits and Add Material need real answers.

  • Violet accent, .datlas + .datdb, com.edgarmendonca.datumatlas… · atlas

    Violet accent, .datlas + .datdb, com.edgarmendonca.datumatlas, releases and updater from Edgar-Mendonca/Datum-Atlas Why: The user's instruction, per FAMILY §1 and §3. (Name "Datum Atlas" to confirm, PLAN Q1.)

  • Windows publisher "Datum" for every Datum app (hub FAMILY §9)… · atlas

    Windows publisher "Datum" for every Datum app (hub FAMILY §9); copyright stays "© 2026 Edgar Mendonca" Why: One family name in Windows Apps and the installer.

  • °C and °F values are absolute temperatures (abs); a difference… · calc

    °C and °F values are absolute temperatures (abs); a difference of two is plain kelvin; adding a difference keeps it absolute; a mean stays absolute; a difference asked in °C shows as Δ°C Why: Engineers mix both; the clas…

  • 4j/4i (letter touching the number) is always imaginary; j/i… · calc

    4j/4i (letter touching the number) is always imaginary; j/i alone are constants a name on the sheet replaces; results always use j Why: Same as the built-in constants (g, e); j is the electrical habit

  • A check's left side reads in the unit its name is shown in… · calc

    A check's left side reads in the unit its name is shown in (Env::shown) Why: 0.0095 ≤ 0.03 for a percentage check

  • A table is columns (name, unit, optional formula) over rows of… · calc

    A table is columns (name, unit, optional formula) over rows of typed cells; each column becomes a vector; formula columns are evaluated with the columns to their left Why: Pump curves and data-sheet values are tables; ve…

  • A unit after brackets applies to the bracket: (3 + 4j) Ω… · calc

    A unit after brackets applies to the bracket: (3 + 4j) Ω (E::Unit), not when the word is one of the sheet's names Why: 3 + 4j Ω adds a number to ohms, an error that would surprise every electrical user

  • After a number, the first word is a unit if it is one; after… · calc

    After a number, the first word is a unit if it is one; after that * and / continue the unit only for units that are not names on the sheet; 2*t is never a unit Why: Readable input (120 m^3/h) without surprises when a nam…

  • After a unit, * and / never read the constants (g, e, R, c_0)… · calc

    After a unit, * and / never read the constants (g, e, R, c_0), a function's parameters or a for variable as units Why: 0.1.1 read kg/m^3*g as grams (found when checking the table formula in the real app)

  • An input keeps its typed unit when the other system has no… · calc

    An input keeps its typed unit when the other system has no ladder for it; electrical units and cP/cSt are neutral; US head is BTU/lb Why: ohm/km became SI base units on a US sheet; cP became Pa·s

  • An input literal shows in its typed unit when that unit… · calc

    An input literal shows in its typed unit when that unit belongs to the sheet's system (or to both); otherwise the ladder converts it Why: 8356 cm⁴ must not read 83.56×10⁶ mm⁴; a US sheet should still show US units

  • Angle is a soft tag: it never makes values incompatible, but… · calc

    Angle is a soft tag: it never makes values incompatible, but picks rad/s, rpm or degrees for display Why: An angle is a ratio; rpm ↔ rad/s works with rad = 1, and sin(30 deg) needs no special case

  • Calc's parser is its own small Pratt parser, not Plan's… · calc

    Calc's parser is its own small Pratt parser, not Plan's GridCraft formula engine Why: GridCraft evaluates spreadsheet formulas without units; Calc needs units on numbers, assignments, ranges and user functions. Plan's le…

  • Complex values are Val.im beside Val.v (empty when real) and… · calc

    Complex values are Val.im beside Val.v (empty when real) and become real again when the imaginary part is round-off (j² = −1) Why: One value type keeps vectors, units and errors working for both; tests compare strings li…

  • Doc::save writes name.dcalc.saving and renames it over the… · calc

    Doc::save writes name.dcalc.saving and renames it over the sheet; Doc::open refuses files over 64 MB and reads bytes lossily; normalize cuts regions (5,000), text (20,000), pictures (8 MB), table rows (2,000) and columns…

  • Each region keeps the text the user typed; results, LaTeX and… · calc

    Each region keeps the text the user typed; results, LaTeX and errors are computed from it, never stored Why: What is printed is always what the engine computes from the text

  • ErrorBoundary around each region, the sheet view, the… · calc

    ErrorBoundary around each region, the sheet view, the Variables panel and each printed region; utilisation formatted by ratio() that accepts anything Why: A UI test with malformed engine output showed the panel's toFixed…

  • Every product decision comes from the hub brief (session 13)… · calc

    Every product decision comes from the hub brief (session 13): name, amber accent, .dcalc, identifier, stack, KaTeX, ribbon tabs, logo, the week plan and the cut order Why: Decided with the user for the convention; no que…

  • Getting Started is a sheet (like a pack), not only a dialog · calc

    Getting Started is a sheet (like a pack), not only a dialog Why: People learn by changing a working example

  • KaTeX and Plex fonts are bundled as woff2 only (a Vite… · calc

    KaTeX and Plex fonts are bundled as woff2 only (a Vite transform drops woff/ttf) Why: Smaller installer; WebView2 reads woff2

  • Lines are limited to 60 nested levels and 1,000 symbols, trees… · calc

    Lines are limited to 60 nested levels and 1,000 symbols, trees deeper than 400 are refused, and the sheet is worked out on its own 64 MB-stack thread Why: Thousands of brackets overflowed the stack (an abort on any build…

  • Numbers ≥ 10⁴ are rounded to the significant figures and… · calc

    Numbers ≥ 10⁴ are rounded to the significant figures and grouped with thin spaces Why: 274863 showed six figures with digits = 4

  • Pack references cite textbooks and standards (White, Karassik… · calc

    Pack references cite textbooks and standards (White, Karassik, Colebrook, Brown, Incropera, Roark, Gere, Shigley, Chapman; IAPWS-IF97, ASME VIII-1 UG-27, ISO 898-1/724, IEC 60034-1) Why: The brief: each pack cites its te…

  • Pack units are set per region where the automatic choice would… · calc

    Pack units are set per region where the automatic choice would mislead (kN·m for moments, N·m for torque, kVA/kvar) Why: Energy and torque share a dimension; apparent power shares watts

  • Packs are plain .dcalc files embedded with include_str!, each… · calc

    Packs are plain .dcalc files embedded with include_str!, each with a test comparing its results with hand values worked out independently (in the test comments) before running Why: The brief: every pack is a test; the fi…

  • Page text stays dark on a light page in the dark theme · calc

    Page text stays dark on a light page in the dark theme Why: The page is paper; it prints black on white

  • Polar form is a sheet setting (View › Polar, Sheet.polar), not… · calc

    Polar form is a sheet setting (View › Polar, Sheet.polar), not per result Why: One reading per sheet, like Numbers and Figures

  • Printing packs regions measured at the printed width into… · calc

    Printing packs regions measured at the printed width into pages, never cutting a region; references (style Reference) print at the end Why: A calc sheet must look professional; equations split over pages are hard to chec…

  • Regions are a flat list in reading order (no free x/y placement) · calc

    Regions are a flat list in reading order (no free x/y placement) Why: A calc is read top to bottom; order is the evaluation order; simpler editing, printing and tests

  • release.yml ran once on a push trigger to register it (tag… · calc

    release.yml ran once on a push trigger to register it (tag pushes are blocked from the session); later releases use workflow_dispatch Why: A workflow needs one run before GitHub lists it

  • Results must be finite and unit powers within ±60; unit powers… · calc

    Results must be finite and unit powers within ±60; unit powers in a unit expression above 60 are not read as units Why: 1e308×10 showed nothing; m^999 was silently m^127; i8 saturation made −128 whose abs() panicked (fou…

  • Solve and plot exist already in 0.1.1 (the engine had them)… · calc

    Solve and plot exist already in 0.1.1 (the engine had them); 0.1.2 brings tables, pictures and the units list Why: Engine first; the cut order (image, table, plot) still holds

  • Substituted values use the unit each name is shown in on its… · calc

    Substituted values use the unit each name is shown in on its own line (Env::shown) Why: Base units (m²·kg/s²) for a torque read badly next to its N·m line

  • Text after # on a line is its description (shown beside it… · calc

    Text after # on a line is its description (shown beside it, printed) Why: A calc sheet describes its inputs; packs needed it

  • The .dcalc reader opens damaged files field by field and drops… · calc

    The .dcalc reader opens damaged files field by field and drops only the regions it cannot read; ids are renumbered when duplicated Why: FAMILY §11 hardening: damaged files open as far as possible

  • The angle tag is dropped by roots and fractional powers when… · calc

    The angle tag is dropped by roots and fractional powers when it does not divide evenly Why: ∛ of a torque from P/n (rad⁻¹) failed in the shaft pack

  • The fuzz test builds random sheets from the grammar (numbers… · calc

    The fuzz test builds random sheets from the grammar (numbers with units, names, operators, functions, checks, solve, plot, ranges, tables), 600 sheets per run in CI; 6,000 × 3 seeds and a release run before this release …

  • The print summary of checks is a pseudo-region (id −1)… · calc

    The print summary of checks is a pseudo-region (id −1) measured and packed like the others, saved in sheet.ui.print.summary Why: Reuses the page packing; a long summary moves the sheet down instead of overlapping

  • The region editor stays open when the ribbon is clicked (Math… · calc

    The region editor stays open when the ribbon is clicked (Math and Units keys type into it) Why: The symbol keys would otherwise end the edit before typing

  • The shell, ribbon, backstage, options, help, roadmap, updater… · calc

    The shell, ribbon, backstage, options, help, roadmap, updater, workflows and tests are copied from Datum Plan and renamed Why: FAMILY §12: copy, don't reinvent

  • The table editor keeps its edits local and saves them as one… · calc

    The table editor keeps its edits local and saves them as one change when it closes Why: Every save re-renders the sheet; typing from cell to cell must not lose focus, and undo should undo the whole edit

  • The window shows results only from the engine (calc in every… · calc

    The window shows results only from the engine (calc in every Out); the whole sheet is worked out after every change Why: Simple and fast enough (1,500 lines well under a second in release builds; a speed gate tests it)

  • Utilisation is demand over capacity: lhs/rhs for ≤ and <… · calc

    Utilisation is demand over capacity: lhs/rhs for ≤ and <, rhs/lhs for ≥ and > Why: A check reads the same whichever way it is written

  • Val.nm: a force (or load per length) times a length, a plain… · calc

    Val.nm: a force (or load per length) times a length, a plain factor of it or a sum with it shows in N·m; energy with an angle tag (P/ω) uses the torque ladder Why: Issue 2: torque came out in J; no pack changed, as packs…

  • Windows publisher "Datum"; copyright stays "© 2026 Edgar… · calc

    Windows publisher "Datum"; copyright stays "© 2026 Edgar Mendonca" Why: Family-wide rule (FAMILY §9)

  • σ is not a built-in constant (it is the usual name for… · calc

    σ is not a built-in constant (it is the usual name for stress); Stefan–Boltzmann is σ_SB. Constants (g, π, e, R, σ_SB, N_A, k_B, c_0) give way to names on the sheet Why: The brief lists σ; a silent constant behind an und…

  • A guide per app, per language, downloaded on demand (FAMILY…

    A guide per app, per language, downloaded on demand (FAMILY §10): Markdown in docs/guide/<lang>.md with numbered screenshots, built to PDF (scripts/guide.cjs), attached to every release as Datum<App>-Guide-<lang>.pdf (in…

  • Apps may ship a command line and an MCP server for AI…

    Apps may ship a command line and an MCP server for AI assistants, changing documents only through the engine's named operations and saving only when asked (Datum Plan's datum-cli) Why: One way to change a document; safe …

  • apps.json branch HEAD (default branch) instead of naming…

    apps.json branch HEAD (default branch) instead of naming branches Why: The app repos' default branches are claude/* working branches that may change.

  • Artcraft-like scrolling: glass sticky section bars, an index…

    Artcraft-like scrolling: glass sticky section bars, an index by the ruler with a scroll %, heading words coming into focus and cards rising (CSS scroll timelines, no library) Why: The user's Artcraft screenshots and answ…

  • Astro 7.3.8 (Node ≥ 22.12) and marked 18.1.1; Node 22 in Actions

    Astro 7.3.8 (Node ≥ 22.12) and marked 18.1.1; Node 22 in Actions Why: Current versions; marked 18.0.x has a DoS advisory.

  • Base path /Datum (the repo's real name), not /DATUM as in the…

    Base path /Datum (the repo's real name), not /DATUM as in the brief Why: Pages URLs follow the repository name.

  • Bench tiles are real capabilities of the apps (Plan: schedule…

    Bench tiles are real capabilities of the apps (Plan: schedule, progress; Plot: curve fit, statistics; Atlas: property chart, ranking; reports; more to come), not disciplines; the left side gets app chips from apps.json W…

  • Briefs for new apps live in the hub's briefs/ (DATUM-SIM.md…

    Briefs for new apps live in the hub's briefs/ (DATUM-SIM.md, DATUM-FIELD.md) and are pasted into the new app's chat Why: The hub is the memory every new app starts from.

  • Charts: Chart.js, in the style of its own samples (smooth…

    Charts: Chart.js, in the style of its own samples (smooth monotone lines, faded fill under actuals, rounded bars, light horizontal grid only, round legend markers, dark rounded tooltip); every chart resizes with its box …

  • Commercial product names removed from FAMILY.md ("What it…

    Commercial product names removed from FAMILY.md ("What it replaces" column → "What it is for"; ribbon, sidebar, chart style and grid wording made neutral) Why: The user's rule: never name, compare with, or say we copy an…

  • Dashboards an app's users lay out themselves: tabs beside the…

    Dashboards an app's users lay out themselves: tabs beside the built-in one, a 12-column grid of tiles (number, ring, chart, table, countries, text) whose values are formulas the engine evaluates in one call; saved in the…

  • Datum Calc and Datum Mesh are built this week for a large…

    Datum Calc and Datum Mesh are built this week for a large engineering convention. "Datum Field" is renamed Datum Mesh (clear to every engineer; covers stress, heat and later flow). Accents: Calc = Amber #A8650F, Mesh = C…

  • Datum Home reads releases from the site, not GitHub. home.json…

    Datum Home reads releases from the site, not GitHub. home.json (written by the hourly site build, which has a token) carries each app's newest release with installer, checksum list and notes, and Datum Home's own (home).…

  • Datum Home, a desktop app in this repo (home/) that installs…

    Datum Home, a desktop app in this repo (home/) that installs, updates, opens and removes every Datum app; checks only when opened; the site offers it and each app on its own. List from the site's home.json, versions from…

  • Datum Pipe (pipe stress analysis) is the next app, built in…

    Datum Pipe (pipe stress analysis) is the next app, built in one overnight run from briefs/DATUM-PIPE.md; accent Moss #4D7C0F (new, FAMILY §3). Codes: implement published equations only, allowables are user inputs pre-fil…

  • Datum Plot's bundled Python is recorded in FAMILY §2 as the…

    Datum Plot's bundled Python is recorded in FAMILY §2 as the one exception to "no Python" Why: Plot's own decision (its MEMORY, session 1); the guide must not contradict a shipped app.

  • Datum Schema (intelligent P&IDs and process flow diagrams) is…

    Datum Schema (intelligent P&IDs and process flow diagrams) is the eighth app, for the exhibition; name chosen over "Datum P&ID" (the & breaks file and repo names; "PID" means the controller in Sim; P&ID is narrower than …

  • Datum Schema aims at the enterprise class of plant engineering…

    Datum Schema aims at the enterprise class of plant engineering tools (object-based, plant hierarchy, class library, many disciplines and users), not at drawing tools. From 0.1: objects are the master and symbols are view…

  • Datum Sim is the next app (system simulation and control…

    Datum Sim is the next app (system simulation and control design), ahead of Datum Calc; Datum Field is the name for the future FEA/CFD/multiphysics app, parked Why: The user: two big apps in the long run; Sim first. "Sim"…

  • Datum Sim joins the family: in apps.json, icon in brand/…

    Datum Sim joins the family: in apps.json, icon in brand/, orange #C2410C added to FAMILY §1 and §3; the hero's "Reports" tile becomes Sim's "Control loop"; the network places any number of apps round the hub (anchors and…

  • Every import is a parity check: an app that opens files…

    Every import is a parity check: an app that opens files carrying their own results (dates, values) recomputes them and lists the differences in an import report, alongside what it changed or left out Why: Datum Plan 0.4.…

  • Family mark brand/datum-icon.svg: grey-tint tile, navy "D"…

    Family mark brand/datum-icon.svg: grey-tint tile, navy "D" with blue, teal and violet dots, amber diamond Why: The brief (§1).

  • Family mark replaced by a "D" that is a protractor (ruler…

    Family mark replaced by a "D" that is a protractor (ruler stem, graduated bowl, needle from the amber datum origin), navy ink only Why: The user: no app colours in the logo (more apps will come); a generalized, unique, v…

  • FAMILY.md moves to DATUM and becomes the source of truth…

    FAMILY.md moves to DATUM and becomes the source of truth; section numbers 1–12 are kept so "FAMILY §3" means the same everywhere; §13 "Principles and public words" added Why: The brief. App repos keep a short docs/FAMILY…

  • Fonts self-hosted with @fontsource (Archivo with the width…

    Fonts self-hosted with @fontsource (Archivo with the width axis, IBM Plex Sans and Mono, Instrument Serif); screenshots converted to 1440 px WebP at build with sharp Why: No third-party requests; smaller pages.

  • Hardening standard for every app (FAMILY §11): hardening tests…

    Hardening standard for every app (FAMILY §11): hardening tests (failed edits change nothing, random documents, damaged files, speed gate), cargo deny, CI on Windows + macOS, poisoned-lock recovery, SECURITY.md and CONTRI…

  • Hero = four app tiles (Hero.astro + AppGlyph.astro: Gantt…

    Hero = four app tiles (Hero.astro + AppGlyph.astro: Gantt, curve fit, property chart, control loop, looping gently) around the amber datum square, replacing the 3×3 workbench; the italic phrase cycles by itself (two phra…

  • In SolidJS, a <select> whose options load later marks <option…

    In SolidJS, a <select> whose options load later marks <option selected> rather than setting value on the select (it showed the first option) Why: Found in Datum Plan 0.4.1; applies to every app's window (FAMILY §7).

  • Look taken from the user's zhuojia site (paper-and-ink grid…

    Look taken from the user's zhuojia site (paper-and-ink grid, framed column, numbered bars, wide display type, serif italic accent, mono labels), but its own quiet header (mark, word, three links, theme) and a datum drawi…

  • New family mark: the GD&T datum feature symbol (framed "D"…

    New family mark: the GD&T datum feature symbol (framed "D", leader, datum triangle) on a reference line of the three app accents, amber diamond beside the frame Why: The user was not satisfied with the "D with dots"; a d…

  • No shared code kit for now: every app stays self-contained.…

    No shared code kit for now: every app stays self-contained. Shared pieces (shell, ribbon, File page, updater, printing, styles, icon set, units engine, solver parts) keep being copied from the reference app, never linked…

  • Pages workflow runs on every push but deploys only from the…

    Pages workflow runs on every push but deploys only from the default branch (if: on the job) Why: The repo has no main; this keeps working if the default branch changes.

  • pages.yml waits for GitHub's branch-based Pages build of the…

    pages.yml waits for GitHub's branch-based Pages build of the same commit, then deploys Why: While the Pages source is "Deploy from a branch", that build publishes the raw repo and caused a 404 whenever it finished last.

  • Safety rules for every app's shell and hostile values join the…

    Safety rules for every app's shell and hostile values join the hardening standard (FAMILY §11): unwind + guard + crash.log, atomic saves and read limits, an updater that requires checksums, the CSP baseline, CSV formula …

  • Spreadsheets inside an app read the app's data by name…

    Spreadsheets inside an app read the app's data by name: GridCraft tables (Tasks[Finish]) and workbook names (ProjectFinish), with Excel habits (click cells into formulas, suggestions, fill/paste moving references, insert…

  • Status badges (Stable / Beta / Alpha) from apps.json status or…

    Status badges (Stable / Beta / Alpha) from apps.json status or the version; figures strip, "Get started" and the network teaser removed; latest releases = one per app; the network page has no visible title Why: The user'…

  • Text and filled buttons use an --ink token: the accent, or a…

    Text and filled buttons use an --ink token: the accent, or a darker shade where white on it is below 4.5:1 (Plot's teal → #0B7468) Why: WCAG AA contrast.

  • The brain: brain/brain.mjs builds one graph (nodes: hub, apps…

    The brain: brain/brain.mjs builds one graph (nodes: hub, apps, FAMILY sections, technologies, workflow, decisions, files, releases, plans, sessions) from the repos; brain/graph.json is committed; the site draws it Why: T…

  • The changing blue words use Instrument Serif italic (.it)…

    The changing blue words use Instrument Serif italic (.it), everything else stays IBM Plex Why: The user preferred that font for the changing text (session 3).

  • The hero is a field of animated SVG tiles around the wordmark…

    The hero is a field of animated SVG tiles around the wordmark: one per app (links to it), five for the kinds of work (engineering, computation, analysis, science, research) and two "more to come"; orbit rings with moving…

  • The logo is the user's own design, "Continuum": two concentric…

    The logo is the user's own design, "Continuum": two concentric D's as one line, amber datum square where it starts, with a geometric DATUM wordmark. Refined only in geometry (one centre, true arcs, even 16 gap, optical l…

  • The public network removes sentences that name other products…

    The public network removes sentences that name other products and leaves out nodes whose title does; graph.json keeps everything Why: FAMILY §13 for the site; the memory itself must stay complete.

  • The site is one landing page plus the Datum network; the app…

    The site is one landing page plus the Datum network; the app, family and about pages are gone Why: The user: the site is only for people to see the apps and download them; memory, roadmap and design stay in the repo.

  • The site is simple and technical: IBM Plex Sans and Mono only…

    The site is simple and technical: IBM Plex Sans and Mono only (Archivo and Instrument Serif removed), no giant display words, no floating tiles or orbit rings, no repeated "free · open source · Windows" slogans Why: The …

  • The site leaves out any CHANGELOG, highlight or roadmap line…

    The site leaves out any CHANGELOG, highlight or roadmap line that names another product (NAMES in github.ts) and lists it in the build log Why: The apps' older CHANGELOG sections still compare with other tools; the publi…

  • The Windows publisher of every app is "Datum"…

    The Windows publisher of every app is "Datum" (bundle.publisher in tauri.conf.json), not the author's name; the copyright line keeps the author ("© 2026 Edgar Mendonca"), who holds it. Datum Home accepts both publisher n…

  • The workbench hero (HeroWorkbench.astro, replaces…

    The workbench hero (HeroWorkbench.astro, replaces HeroPanel.astro): left "Datum" + "Tools to <blue phrase>"; right a 3×3 bench of small SVG instruments (Plan, Engineering, Plot, Analysis, Science, Atlas, Research, More t…

  • Theme: three visible buttons (Auto, Light, Dark) instead of a…

    Theme: three visible buttons (Auto, Light, Dark) instead of a cycling button Why: The user wanted all three; a cycle looked broken (Auto → Light changes nothing on a light system).

  • Trust in the results joins the hardening standard (FAMILY…

    Trust in the results joins the hardening standard (FAMILY §11): hand-worked cases for the engine's core rules (expected values worked out before running), parity files that carry their own results (drop in real exports f…

  • Two-panel hero (HeroPanel.astro): "Datum" with the amber…

    Two-panel hero (HeroPanel.astro): "Datum" with the amber square, one lead line, and a write-up that cycles Plan → Plot → Atlas → More to come, beside an instrument panel with one animated technical scene per item (schedu…

  • 3D buckling is flexural only: the geometric stiffness has no… · mesh

    3D buckling is flexural only: the geometric stiffness has no twisting term Why: Without warping stiffness an I-section twists under axial load at a small fraction of its real load (the portal gave λ = 0.25); flexural-tor…

  • 3D frames are a separate analysis (Space) with y up and z as… · mesh

    3D frames are a separate analysis (Space) with y up and z as depth; the plane model gains z, roll, fz, mx, my, gz and six-way springs as serde defaults Why: Old files open unchanged; a plane frame is the 3D frame with z …

  • 3D frames reuse the plane frame's modal solvers… · mesh

    3D frames reuse the plane frame's modal solvers: space::assemble(m, pieces) with beams cut in 8, consistent masses (polar mass for twisting), geometric stiffness both ways Why: One path for supports and loads in static, …

  • 3D solids are the 2D mesh swept through the thickness into… · mesh

    3D solids are the 2D mesh swept through the thickness into wedges (18-node from quadratic, 6-node from linear), not a tetrahedral mesher Why: Robust (the 2D mesher's quality), no new mesher, exact layers through the thic…

  • A 3D solid is refused beyond 200 000 unknowns, with how to… · mesh

    A 3D solid is refused beyond 200 000 unknowns, with how to coarsen Why: 500 000 needed 9.9 GB; one test run was killed out of memory: a crash in the app

  • A drag snaps the grabbed point (node, member start, first… · mesh

    A drag snaps the grabbed point (node, member start, first corner) to the grid, not the offset Why: 0.1.1 review: items off the grid stayed off it

  • A fixes release after a review of 0.1.1 (the user's request)… · mesh

    A fixes release after a review of 0.1.1 (the user's request): 13 findings, each with a test; meshing moves to 0.1.3, heat/materials/report to 0.1.4, polish to 0.1.5 Why: The user: "make 0.1.2 a fixes release for 1–13"

  • A frame of four points round the part before triangulating… · mesh

    A frame of four points round the part before triangulating; minimum area for refinement from the finest local size Why: Near-collinear points on a sloping edge made hull slivers spade could never refine; a minimum area f…

  • A pin load (Bearing): pressure p₀ max(0, −n·F̂) on the edge… · mesh

    A pin load (Bearing): pressure p₀ max(0, −n·F̂) on the edge, scaled so the push along F̂ is the whole force Why: The lug's pin was an even traction all round the hole, pulling on the far side too

  • A probe solve (a load equal to the diagonal) alongside every… · mesh

    A probe solve (a load equal to the diagonal) alongside every solve; an answer over 1e11 means a mechanism Why: faer factored an exactly singular matrix when rounding left a tiny positive pivot (found by the spring-chain …

  • A solve whose residual is over 1e-8 warns that the supports… · mesh

    A solve whose residual is over 1e-8 warns that the supports barely hold the part Why: Rollers on curved edges are stiff springs, so a part free to turn about an arc's centre was not caught as a mechanism (found by the ra…

  • After an edit results stay drawn but faded and marked out of… · mesh

    After an edit results stay drawn but faded and marked out of date; Solve is F5 (no automatic re-solve) Why: Clear about what the picture shows; solving is instant for frames, but meshed parts will not be

  • Atlas has no Poisson's ratio: Mesh's library (0.1.3) adds ν… · mesh

    Atlas has no Poisson's ratio: Mesh's library (0.1.3) adds ν from typical values with its own source Why: Atlas data checked in session 1

  • Axisymmetric solids share plane.rs: B and D carry a fourth… · mesh

    Axisymmetric solids share plane.rs: B and D carry a fourth (hoop) strain, used only by Axi; weights 2πr; edge forces and pressures are totals round the circle; nodes on the axis are held radially without a support; the e…

  • Beams are cut into 8 pieces (frame::SPLIT) for modes and… · mesh

    Beams are cut into 8 pieces (frame::SPLIT) for modes and buckling, not for the static solve Why: One cubic element is exact statically but 21 % high for a pinned column's buckling; 8 pieces give 3e-5 to 5e-4

  • Benchmark 4 is a quarter plate 200 hole diameters wide with… · mesh

    Benchmark 4 is a quarter plate 200 hole diameters wide with the hole's edge refined, against Kirsch's 3.0 Why: A plate 20 diameters wide converged to 3.018 (its own finite-size answer), not 3.0

  • Buckling solves B φ = μ K φ for the largest μ = 1/λ, so K… · mesh

    Buckling solves B φ = μ K φ for the largest μ = 1/λ, so K (positive) stays the matrix factorised and the small problem stays well posed when B has both signs Why: Members in tension make K_G indefinite; λ ≤ 0 (buckling w…

  • Budgets: installer under 5 MB (release.yml), window startup… · mesh

    Budgets: installer under 5 MB (release.yml), window startup code under 400 kB and whole window under 1.6 MB (tools/size.cjs, CI); speed: typical models under 1 s, large ones (about 100 000+ unknowns) under 10 s, timed in…

  • Combining shapes uses i_overlay (MIT/Apache) on outlines cut… · mesh

    Combining shapes uses i_overlay (MIT/Apache) on outlines cut into pieces (span/1000, at least 360 per circle), then traces each result edge to the input line or circle under it: runs on one circle become one arc (split i…

  • Contours as 12 band paths (Path2D) in model coordinates on a… · mesh

    Contours as 12 band paths (Path2D) in model coordinates on a canvas under the SVG; polygons closed with lineTo, never closePath Why: closePath on 100 000 sub-paths took 10 s in Chromium; now 0.2 s to switch result, 0.8 s…

  • Corners are added and removed by engine ops (InsertCorner… · mesh

    Corners are added and removed by engine ops (InsertCorner, RemoveCorner) that renumber edge targets; a split edge's loads cover both halves (a total edge force is shared); a corner in an arc splits the arc Why: The windo…

  • Crossing members join only on request (Format › Join Where… · mesh

    Crossing members join only on request (Format › Join Where They Cross, Op::JoinCrossings) Why: Automatic joining would connect X-bracing that passes without a joint

  • Datum Mesh does not become CAD or a pre-processor; sketch… · mesh

    Datum Mesh does not become CAD or a pre-processor; sketch tools (0.3.1) before the cutting plane; Gmsh bundled in the installer from 0.4 (separate program; app itself stays under 5 MB, installer grows by Gmsh's size) Why…

  • Datum Mesh's purpose written down (top of this file); frames… · mesh

    Datum Mesh's purpose written down (top of this file); frames stay in the app but stop short of building design (no code checks or code combinations) Why: Keeps one clear purpose: analysis of parts and structures, verifie…

  • Display values below 1e-9 of their scale are shown as 0… · mesh

    Display values below 1e-9 of their scale are shown as 0 (clean); typed numbers go through parseNum ("−", "1,5", "1,200", empty refused) Why: Noise like 1.5e-14 kN·m; negative corners could not be typed; empty became 0

  • Distributed loads in global x or y are per length of the… · mesh

    Distributed loads in global x or y are per length of the member, not projected Why: The simplest rule to explain; stated in the help and the Inspector

  • Each top-level setting is read on its own; one that cannot be… · mesh

    Each top-level setting is read on its own; one that cannot be read falls back to its default with a warning Why: 0.1.1 review: an unknown analysis or a negative counter refused the whole file

  • End faces are a target of their own (Target::End { front })… · mesh

    End faces are a target of their own (Target::End { front }); side faces are the part's edges Why: No face picking in 3D needed to load a solid; old files unchanged

  • Every edit is checked by Model::check on a copy and refused if… · mesh

    Every edit is checked by Model::check on a copy and refused if it breaks anything; the reader repairs damaged files item by item and lists what it dropped Why: FAMILY §11: failed edits change nothing, damaged files open …

  • Every edit joins geometry: added or moved nodes merge into a… · mesh

    Every edit joins geometry: added or moved nodes merge into a node already there and split members they land on; added or moved members are split at nodes along them (distributed loads split linearly); Model::check refuse…

  • Everything in the brief §1 (name, crimson accent, identifier… · mesh

    Everything in the brief §1 (name, crimson accent, identifier, .dmesh, stack, own Rust solver, 12-band blue-to-red contours with viridis in Options, ribbon tabs, logo) Why: Made with the user in the hub, session 13

  • faer 0.24 (MIT) sparse Cholesky with its own fill-reducing… · mesh

    faer 0.24 (MIT) sparse Cholesky with its own fill-reducing ordering, no default features (no rayon, rand, npy) Why: The brief's choice; 200 000 equations factor in 0.1 s here

  • Frame assembly (frame::assemble) and the plane solver's… · mesh

    Frame assembly (frame::assemble) and the plane solver's assembly (plane::run with a modes request) are shared by static and modal solves Why: One place for supports and held unknowns

  • Help › Verification runs bench::run() in the app, so the… · mesh

    Help › Verification runs bench::run() in the app, so the report is always true for the version running; the same rows are tests and the dated record Why: The brief's headline feature, earlier than planned because it was …

  • Local sizes are a size field (local size + 0.2 × distance… · mesh

    Local sizes are a size field (local size + 0.2 × distance, capped by the global size), applied by inserting centroids of too-large triangles and refining again Why: Refining only the points on an edge let the mesh coarse…

  • Long result arrays go to the window as base64 f32/u32… · mesh

    Long result arrays go to the window as base64 f32/u32 (wire.rs); drawing triangles are rebuilt in the window Why: 22 MB of JSON for 25 000 elements; now 6.2 MB. Seven significant digits are more than any display shows; e…

  • Mechanism probe limit 1e15 plus two steps of iterative… · mesh

    Mechanism probe limit 1e15 plus two steps of iterative refinement in every solve Why: A cantilever in 500 pieces was called a mechanism (probe ≈ 3n⁴); at 1 000 pieces rounding cost 6e-5, refinement recovers 1e-9

  • Member axes: local y = z × x (the plane frame's local y), or… · mesh

    Member axes: local y = z × x (the plane frame's local y), or global y for a member along z; roll turns y and z about x Why: Plane frames keep their signs and moments in 3D; beams along z have their depth upright

  • Member results are integrated exactly (with linear loads M is… · mesh

    Member results are integrated exactly (with linear loads M is a cubic): deflection v = v_a + θ_a s + ∫∫M/EI, stretch from N/EA Why: Step-by-step integration missed the mid-member deflection by 5e-4 (found by benchmark 2)…

  • Members are drawn on working planes (Front, Side, Plan at a… · mesh

    Members are drawn on working planes (Front, Side, Plan at a depth) by the existing canvas through a projected model, and seen in a separate three.js view Why: Reuses every 2D tool (snap, draw, move, supports, loads); no …

  • Model in SI base units; display units in one window module… · mesh

    Model in SI base units; display units in one window module; frames show m (ft), parts mm (in) Why: One owner for conversions; no rounding when the user switches units

  • Model::check looks members' nodes up in a map · mesh

    Model::check looks members' nodes up in a map Why: Each edit of a 10 000-member frame took 52 ms (a linear search per member); now 14 ms

  • Moments drawn on the tension side; N and V on the member's… · mesh

    Moments drawn on the tension side; N and V on the member's local +y Why: Common practice for moments; one fixed rule for the others, stated in the legend

  • Moments in the equilibrium check of parts are judged against… · mesh

    Moments in the equilibrium check of parts are judged against forces × the model's reach (as frames) Why: A bore pressure centred on the origin has no moment of its own: the flange showed a 110 % "imbalance" of rounding n…

  • Natural frequencies by subspace iteration (p = max(2q, q + 8)… · mesh

    Natural frequencies by subspace iteration (p = max(2q, q + 8) vectors, one factorisation of K) rather than a Lanczos code Why: Simple and robust for the few lowest modes asked for; checked against a mass-spring chain to …

  • Nodes take clicks before the load arrows drawn on them · mesh

    Nodes take clicks before the load arrows drawn on them Why: The UI test found the wind load's arrows on the portal frame's eave node stealing the drag

  • One id counter for every item; supports and loads point at a… · mesh

    One id counter for every item; supports and loads point at a Target (node, member, edge of a shape, point, body) Why: Edits and deletes cascade simply; one support or load type for frames and parts

  • Open, New, an example or a recent file ask to save unsaved… · mesh

    Open, New, an example or a recent file ask to save unsaved changes first Why: Work was lost without a question

  • Plane geometry as polygons whose segments may bulge into arcs… · mesh

    Plane geometry as polygons whose segments may bulge into arcs (bulge = tan(θ/4), as in DXF), plus circles; holes are shapes with hole: true Why: Fillets, rounded lugs and slots without a CAD kernel; maps directly to DXF …

  • Points moved onto arcs are moved back when a triangle would fold · mesh

    Points moved onto arcs are moved back when a triangle would fold Why: A hole crossing the outline folded a sliver (found by the random parts)

  • Pressure acts per area (× thickness); an edge force is per… · mesh

    Pressure acts per area (× thickness); an edge force is per length of edge for the whole thickness, or the whole force Why: Found in the app: the L-bracket's 1.5 kN edge force was multiplied by the 10 mm thickness, giving…

  • Results drawing reads the view inside JSX or memos only · mesh

    Results drawing reads the view inside JSX or memos only Why: Diagrams and utilisation lines were computed once and stayed behind after pan or zoom

  • serde_json with float_roundtrip · mesh

    serde_json with float_roundtrip Why: The hardening test found coordinates changing in the last digit after save and open

  • Sketch tools are engine ops (Fillet, Chamfer, Combine, Offset… · mesh

    Sketch tools are engine ops (Fillet, Chamfer, Combine, Offset, Pattern, Make) applied like every other edit, with supports and loads moved to the edges they lie on; a combined outline starts at the first shape's first co…

  • Stresses: nodal averages (smoothed) and each element's own… · mesh

    Stresses: nodal averages (smoothed) and each element's own average (per element), both sent to the window Why: Comparing the two shows where the mesh is too coarse, without a separate error estimate

  • Switching units picks a round grid step in the new units… · mesh

    Switching units picks a round grid step in the new units (niceGrid); member lengths use the drawing's unit Why: 0.5 m showed as 1.6404 ft

  • The automatic element size is also capped at √(area / (0.43 ×… · mesh

    The automatic element size is also capped at √(area / (0.43 × 800)) (about 800 triangles) Why: The vessel's 10 mm wall got one element through it at a twenty-fifth of the part's height

  • The document is "changed" when it differs from the saved… · mesh

    The document is "changed" when it differs from the saved snapshot; saving writes a temp file then renames Why: 0.1.1 review: undo to the saved state stayed changed; a crash mid-save could corrupt the file

  • The equilibrium check is judged against the size of the loads… · mesh

    Why: Dividing by the net force gave 6.8e19 % for a moment alone

  • The safety factor's colours run red (low) to blue, capped at… · mesh

    The safety factor's colours run red (low) to blue, capped at 10; nodes with no yield strength are grey Why: A factor of 10⁶ in a lightly loaded corner would otherwise squash the scale

  • The shell and window are copied from Datum Sim, which is… · mesh

    The shell and window are copied from Datum Sim, which is Plan's skeleton already adapted to a canvas app, without Sim's Python and run thread Why: The brief says copy, don't reinvent; Sim's copy is the closest to a drawi…

  • The sparse system can store only its lower half… · mesh

    The sparse system can store only its lower half (System::lower), and faer runs on every core (rayon, MIT/Apache) Why: A 3D solid of 178 000 unknowns took 22.7 s and 3.1 GB on one core; on four, 15 s; 90 000 take 6 s and …

  • The user asked for 0.1.4's work (heat, materials library… · mesh

    The user asked for 0.1.4's work (heat, materials library, report) inside 0.1.3: one release with meshing, plane stress and strain, heat, the library and the report; polish becomes 0.1.4 Why: The user: "carry on with 0.1.…

  • The user asked for a big update toward 3D FEA for simple… · mesh

    The user asked for a big update toward 3D FEA for simple problems; plan in docs/PLAN-0.2-0.3.md. Answers: 3D parts by extruding or revolving 2D parts; analyses first (thermal stress, axisymmetric, frequencies, buckling, …

  • The window gets a solid's outer surface only (nodes… · mesh

    The window gets a solid's outer surface only (nodes, triangles, fields there); extremes over every node Why: A 90 000-unknown solid's surface is a small part of its nodes

  • The Windows publisher is "Datum" (bundle.publisher), as for… · mesh

    The Windows publisher is "Datum" (bundle.publisher), as for the whole family (FAMILY §9); the copyright stays "© 2026 Edgar Mendonca" Why: One publisher name across the family's installers

  • Thermal stress inside a stress model: fixed temperatures and… · mesh

    Thermal stress inside a stress model: fixed temperatures and convection in a stress or strain model are solved as heat conduction on the same mesh first; a uniform Warming body load adds to it; t_ref is the stress-free t…

  • three.js 0.185.1 (MIT) for the 3D view, pinned exactly · mesh

    three.js 0.185.1 (MIT) for the 3D view, pinned exactly Why: The 3D solids of 0.3 will use the same view

  • three.js is loaded only when a 3D frame is shown (lazy… · mesh

    three.js is loaded only when a 3D frame is shown (lazy view3d.tsx); fonts as woff2 only Why: Startup code 863 → 282 kB

  • Truss bars are checked on their own as pinned struts rather… · mesh

    Truss bars are checked on their own as pinned struts rather than cut Why: A pin-jointed bar has no bending unknowns; π²EI/L² is its exact answer

  • A flexible anchor's stiffness is translational; its rotations… · pipe

    A flexible anchor's stiffness is translational; its rotations stay rigid Why: One number in N/m cannot also be a rotational stiffness

  • A guide or line stop takes the run through its node (two… · pipe

    A guide or line stop takes the run through its node (two opposite directions), or the only segment at an end; at a corner it warns and uses the first element Why: There is no single axis at a corner; saying so is better …

  • A sliding force is solved exactly for each support from its… · pipe

    A sliding force is solved exactly for each support from its own flexibility (unit loads in the same solve): direct in one direction, bisection on the movement's size in two; supports are updated one after another with th…

  • A touching rigid support along a global axis is held exactly… · pipe

    A touching rigid support along a global axis is held exactly at its gap (prescribed value); flexible or skewed ones are springs with an offset Why: Same exactness as linear supports, so the benchmarks match to rounding

  • An independent review of the engine (a separate agent, told to… · pipe

    An independent review of the engine (a separate agent, told to report only) before the last release; every confirmed finding fixed with a regression test in worked.rs Why: Two real bugs no test had caught: an expansion r…

  • Bend flexibility and SIF pressure corrections use the highest… · pipe

    Bend flexibility and SIF pressure corrections use the highest operating pressure of the line Why: One stiffness for every case keeps one factorisation; conservative for the SIF in lower-pressure cases (k is lower)

  • Bend SIF pressure correction with the lowest operating… · pipe

    Bend SIF pressure correction with the lowest operating pressure, flexibility with the highest Why: The SIF correction lowers stresses, so the lowest pressure is safe for every case; one stiffness keeps one factorisation

  • Bend wall: an extra check per bend at its intrados with I =… · pipe

    Bend wall: an extra check per bend at its intrados with I = (4R/D − 1)/(4R/D − 2); the extrados (I < 1) is not listed, the straight check covers it Why: The intrados governs; one line per bend keeps the table short

  • Bends and tees are components on the element that ends at… · pipe

    Bends and tees are components on the element that ends at their node (a bend turns into the element leaving the node) Why: One column in the table; matches how a stress sketch is marked up

  • Copy Section joins the copy's first node to a chosen node and… · pipe

    Copy Section joins the copy's first node to a chosen node and numbers the rest after the largest node; Mirror flips one axis of every delta (and of skewed restraints) Why: Simple to explain; covers repeated runs and symm…

  • Each Sum case is solved by iteration with its own support… · pipe

    Each Sum case is solved by iteration with its own support states (start: touching for a one-way rest without a gap, open for a gap; change every wrong state each solve, at most 100); ranges stay OPE − SUS of the settled …

  • Every element (straight, arc, reducer, rigid) from its exact… · pipe

    Every element (straight, arc, reducer, rigid) from its exact flexibility by quadrature along the centreline, then inverted and moved by equilibrium Why: One path for every component, exact for straight pipe and for arcs …

  • Everything in the brief §1 (name, moss accent, identifier… · pipe

    Everything in the brief §1 (name, moss accent, identifier, .dpipe, stack, own Rust solver, three.js, units, ribbon tabs, logo, codes as published equations, public words) Why: Made with the user in the hub, session 16

  • Example supports chosen like a designer would: a line stop… · pipe

    Example supports chosen like a designer would: a line stop instead of a second anchor on the rack, a spring next to the settling tank Why: The first drafts gave a 3 MN axial load on the rack and 4.7 × the tank nozzle's a…

  • Iso tags: one per element, on its longest line; dimensions… · pipe

    Iso tags: one per element, on its longest line; dimensions node to node (centre to centre), offset away from the drawing's middle Why: Bends have two arc segments and drew two tags each

  • Line conditions are named sets (T1–T3, P1–P3, hydrotest) that… · pipe

    Line conditions are named sets (T1–T3, P1–P3, hydrotest) that elements reference, rather than six columns per row Why: A table that fits the screen; one place to change a line's conditions

  • Linear-only models keep the one-factorisation path, bit for bit · pipe

    Linear-only models keep the one-factorisation path, bit for bit Why: No change to results or speed for models without one-way or gapped supports

  • Load cases are rebuilt after every edit while "automatic" is… · pipe

    Load cases are rebuilt after every edit while "automatic" is on (ids kept by name); editing a case turns it off Why: Always right for a new model; the user stays in control

  • Modulus and expansion against temperature: Atlas's room values… · pipe

    Modulus and expansion against temperature: Atlas's room values with trends typical for each family, marked with their sources Why: Atlas has room-temperature values only

  • N is taken from the previous solve (lagged); friction is in… · pipe

    N is taken from the previous solve (lagged); friction is in every Sum case, including SUS (where it usually sticks with no force) Why: Simple, and converges with the states

  • Pressure elongation (setting pressure_elongation, off) is… · pipe

    Pressure elongation (setting pressure_elongation, off) is added to the thermal strain of straight, non-rigid, non-reducer segments in cases 1–3, so it is in OPE and in EXP = OPE − SUS, never in SUS; bends' Bourdon openin…

  • Public words about the code: "calculates using the published… · pipe

    Public words about the code: "calculates using the published equations of ASME B31.3", "contains none of the code's text, tables or figures", "not affiliated with or endorsed by ASME", ASME and B31.3 named as trademarks;…

  • Releases follow the brief's steps, but 0.1.1 already shows… · pipe

    Releases follow the brief's steps, but 0.1.1 already shows code stresses and the results tables (the engine had them) Why: Cheap once the solver was there; 0.1.2 is then about the remaining components, results polish and…

  • Rigid elements are 1000 × the pipe's stiffness; their weight… · pipe

    Rigid elements are 1000 × the pipe's stiffness; their weight replaces the pipe's metal, the contents and insulation stay Why: Stiff enough to be rigid, soft enough for a well-conditioned solve

  • Rigid supports along global axes hold their degree of freedom… · pipe

    Rigid supports along global axes hold their degree of freedom exactly (imposed displacements as prescribed values); skewed or flexible ones are springs, a skewed rigid one 1e12 N/m Why: Exact anchors and rests keep the b…

  • Shear deformation with κ = 0.5 (thin tube); the beam-theory… · pipe

    Shear deformation with κ = 0.5 (thin tube); the beam-theory benchmarks include the shear term Why: Short spans near nozzles are common in piping; the references say so

  • SI lengths in mm everywhere; US lengths along the pipe in ft… · pipe

    SI lengths in mm everywhere; US lengths along the pipe in ft, sizes and displacements in in; pressure in bar (SI) or psi Why: What piping engineers use in each system

  • Sticking holds the pipe across (exactly along a global axis… · pipe

    Sticking holds the pipe across (exactly along a global axis, else a 1e12 N/m spring) unless something else already holds that direction; it slides when the force needed exceeds μ N Why: Exact like the other holds, so the…

  • Support.mu on rests, guides, line stops and restraints… · pipe

    Support.mu on rests, guides, line stops and restraints; friction acts across the support's own directions (a rest: horizontal; a guide on a horizontal pipe: along it and vertical; a vertical pipe's guide: along it), with…

  • Support.one_way (rests) and Support.gap (rests, guides, line… · pipe

    Support.one_way (rests) and Support.gap (rests, guides, line stops, restraints); new rests from the window and the examples are one-way, files without the field stay two-way Why: Lift-off is the realistic default, and ol…

  • t ≥ D/6 fails the wall check, with a warning, rather than… · pipe

    t ≥ D/6 fails the wall check, with a warning, rather than switching to a thick-wall equation Why: The code asks for special consideration there; the app says so instead of guessing

  • Tee SIFs apply at every segment end on the tee's point, with… · pipe

    Tee SIFs apply at every segment end on the tee's point, with each leg's own section modulus Why: Simple and on the safe side; the branch's effective section modulus can come later

  • Tees take their SIF from the run's pipe and their plane from… · pipe

    Tees take their SIF from the run's pipe and their plane from the run and branch (from the first two legs, with a warning, when there is no straight run) Why: A tee marked on its branch element used the branch size (unsaf…

  • Temperatures are kelvin in the file (SI base), shown in °C or °F · pipe

    Temperatures are kelvin in the file (SI base), shown in °C or °F Why: SI base units in the file, as every Datum app

  • The 0.2 stage is split into the small releases 0.1.5–0.1.11… · pipe

    The 0.2 stage is split into the small releases 0.1.5–0.1.11; 0.2.0 is a milestone release with no new features Why: The owner asked for many small steps instead of one big 0.2 release

  • The 1500-element speed gate runs without friction; a… · pipe

    The 1500-element speed gate runs without friction; a 300-element random model with friction has its own gate Why: A 3 km random chain held at one end trips the solver's mechanism check once rests slide; it times the solv…

  • The display table comes from the engine (Calc's units), not… · pipe

    The display table comes from the engine (Calc's units), not from factors in the window Why: One owner for conversions; the brief says copy Calc's units engine

  • The element table keys its rows by position (Solid's Index)… · pipe

    The element table keys its rows by position (Solid's Index), not by item Why: Every edit returns a new model, so keyed rows were all rebuilt and the cursor was lost after each cell (found by a UI test that types across a…

  • The equilibrium check is judged against the larger of the… · pipe

    The equilibrium check is judged against the larger of the loads, the reactions, the model's weight and 1 N Why: The hardening test found a thermal range on a model with one anchor (no reactions at all) reported as 79 % "…

  • The equilibrium help says what the check proves (loads… · pipe

    The equilibrium help says what the check proves (loads applied, equations solved) and what it does not (stiffness, SIFs, axes) Why: The review pointed out that a self-equilibrated element always balances; the benchmarks …

  • The isometric and the full report (brief step 6) came in… · pipe

    The isometric and the full report (brief step 6) came in 0.1.2, with the four other examples; 0.1.3 is their polish and more checks, 0.1.4 the brief's step 7 Why: They were built while 0.1.1 was releasing; releasing them…

  • The loop wizard puts the loop in the middle of a straight… · pipe

    The loop wizard puts the loop in the middle of a straight element, sideways (horizontal plane) or upwards, with long-radius bends, and refuses a loop that does not fit its bends Why: The common case in one dialog; anythi…

  • The modulus at the installed temperature for every case… · pipe

    The modulus at the installed temperature for every case; thermal strain from mean coefficients from 21 °C: α(T)(T − 21) − α(T₀)(T₀ − 21) Why: The process piping code's practice for displacement stresses; the library's ta…

  • The shell and window are copied from Datum Mesh (Plan's… · pipe

    The shell and window are copied from Datum Mesh (Plan's skeleton by way of Sim, already adapted to an engineering-analysis app) Why: The brief: copy, don't reinvent; Mesh is the closest app

  • The window gets the analysis geometry (arcs, points) with… · pipe

    The window gets the analysis geometry (arcs, points) with every model, so the 3D view never works out bends itself Why: The engine is the one owner of geometry and results

  • The Windows publisher is "Datum" (bundle.publisher in… · pipe

    The Windows publisher is "Datum" (bundle.publisher in src-tauri/tauri.conf.json); the copyright stays "© 2026 Edgar Mendonca" Why: A family-wide change (FAMILY §9 in the hub); nothing else in the repo names the publisher

  • Two rigid supports holding one direction at a node share its… · pipe

    Two rigid supports holding one direction at a node share its reaction equally, with a warning Why: The split between rigid supports is statically indeterminate; equal shares keep each support's load plausible and the sum…

  • Typical allowables are worked out from typical strengths as… · pipe

    Typical allowables are worked out from typical strengths as min(Su/3, 2Sy/3) at temperature, up to the family's usual limit (creep range not covered) Why: The brief forbids copying code tables; this is the published basi…

  • When a case does not settle, the loads returned are those of… · pipe

    When a case does not settle, the loads returned are those of the last solve's states, so it still balances (with the warning) Why: Found by the hardening tests: the reported states ran one step ahead

  • When open gaps leave a mechanism, the open supports get 1 N/mm… · pipe

    When open gaps leave a mechanism, the open supports get 1 N/mm and the case is solved again, with a warning; the small loads are reported Why: A straight run held sideways only by gapped guides is common and must solve

  • Y is up; X east, Z south (right-handed). The first node of… · pipe

    Y is up; X east, Z south (right-handed). The first node of each connected piece starts at the origin unless moved Why: The usual piping convention; one rule for the table, the 3D view and the isometric

  • Ze = π r₂² Ts at a tee's branch end (setting branch_ze, on)… · pipe

    Ze = π r₂² Ts at a tee's branch end (setting branch_ze, on), for both sustained (corroded walls) and expansion (nominal) Why: The earlier editions' rule; editions that use the branch pipe's own Z turn it off

  • ? help beside the tools in every Datum app: a small ? beside… · plan

    ? help beside the tools in every Datum app: a small ? beside each ribbon group, page, panel and main dialog opens a card (what it is for, how to use it) from one HELP table in ui/src/help.tsx; Help › What Is This Tool? l…

  • <select> whose options load later marks the chosen <option… · plan

    <select> whose options load later marks the chosen <option selected> instead of value= on the select Why: Solid sets the select's value before async options exist, so it showed the first option.

  • A started task's late start is that of its remaining work… · plan

    A started task's late start is that of its remaining work; finished successors (and, with progress override, started ones) do not limit a predecessor's late dates Why: Standard progress rules; the old backward pass gave …

  • Actual progress between stored periods is a straight line… · plan

    Actual progress between stored periods is a straight line through each snapshot's % (then to today's % at the status date); tasks no snapshot recorded keep the old working-time line (report::history, along) Why: The actu…

  • ALAP uses free float only: the largest shift (≤ free float)… · plan

    ALAP uses free float only: the largest shift (≤ free float) that every successor link still allows, found by bisection with the forward pass's own rule Why: Standard rule; using total float pushed ALAP tasks past their s…

  • Betas through an opt-in updater channel; slipped items go to… · plan

    Betas through an opt-in updater channel; slipped items go to 0.3.1 Why: The user wants to check the big release step by step.

  • Big ribbon buttons with both a command and a menu are MS… · plan

    Why: The user's screenshots of 0.3.1.

  • Cell formatting reuses the task's existing style JSON field… · plan

    Cell formatting reuses the task's existing style JSON field (column key → style string); sheets get SheetData.style Why: No file-format change; old files load unchanged.

  • Charts over plain numbers use <Index>, not <For> · plan

    Charts over plain numbers use <Index>, not <For> Why: <For> reuses nodes by value, so bars with equal values kept stale positions.

  • Charts stay on Chart.js (not Plotly), restyled like the… · plan

    Charts stay on Chart.js (not Plotly), restyled like the Chart.js samples: Tailwind-like palette replaces Okabe-Ito, no black axes, cubicInterpolationMode: monotone (no overshoot on S-curves), per-period lines straight; e…

  • CLI and MCP change plans only through Op (the window's… · plan

    CLI and MCP change plans only through Op (the window's operations); the MCP server writes only plan/export extensions and only on save_plan; panics in a tool call are caught Why: One way to change a plan; safe for an ass…

  • Constraint log is Project.log (LogItem), edited with Op::Log… · plan

    Constraint log is Project.log (LogItem), edited with Op::Log; ready = no open items; overdue = open with a need-by date before the status date Why: Look-ahead planning needs readiness, not just dates.

  • CSV export prefixes ' to text starting with = + - @ (unless a… · plan

    CSV export prefixes ' to text starting with = + - @ (unless a plain number) Why: Formula (CSV) injection.

  • Custom dashboards are 0.5.3 (0.5.1 and 0.5.2 became fix and… · plan

    Custom dashboards are 0.5.3 (0.5.1 and 0.5.2 became fix and chart releases), built on the 0.5.0 sheets Why: Sheets first so dashboard tiles can read sheet ranges and plan names.

  • Custom dashboards live in ui.dashboards (JSON tiles), beside… · plan

    Custom dashboards live in ui.dashboards (JSON tiles), beside the built-in one, not in the Report Builder Why: The builder makes long reports (sections down the page); a dashboard is one board of tiles. Both reuse the sam…

  • Custom updater (GitHub API + SHA-256 + NSIS /S); per-user… · plan

    Custom updater (GitHub API + SHA-256 + NSIS /S); per-user install Why: Needs no signing secrets; silent updates.

  • Datum scheduling style (PLAN-0.3 §3.P): fixed duration, single… · plan

    Datum scheduling style (PLAN-0.3 §3.P): fixed duration, single Progress field, retained logic, slack ≤ 0 critical with a longest-path switch, auto actuals, an Explain panel, calculated cells marked

  • docs/site.json carries about (two paragraphs) and steps… · plan

    docs/site.json carries about (two paragraphs) and steps (three) for the family site's app page; keep them true to the app and update them with every release; never name commercial products Why: The user, for the hub's /a…

  • Earned schedule uses the same weights and curves as the… · plan

    Earned schedule uses the same weights and curves as the S-curve, in working days on the project calendar Why: One definition of progress everywhere; works without costs.

  • Effects that mirror outside selection into the grid use… · plan

    Effects that mirror outside selection into the grid use on(sel, …) with untrack, never track cur/ranges Why: Tracking cur made the effect run before the sel sync and snap the row back (the 0.3.3 bug).

  • Every user-reported bug gets a UI test that fails on the… · plan

    Every user-reported bug gets a UI test that fails on the broken build before the fix ships Why: Two clicks in a row were never tested; the 0.3.2 suite missed it.

  • Excel habits come from GridCraft, not re-implemented… · plan

    Excel habits come from GridCraft, not re-implemented: shift_relative for fill/paste, adjust for insert/delete rows/cols, rename_sheet/delete_sheet, numfmt for formats, functions::all() for suggestions Why: The user: use …

  • Fill series follow Excel (numbers, text+number, dates by step… · plan

    Why: Matches what users of both tools expect.

  • Flags are a cell format ("flag") and a resource country field… · plan

    Flags are a cell format ("flag") and a resource country field, drawn from flag-icons SVGs bundled as separate lazy files (not emoji) Why: Windows does not draw flag emoji. Files load only when shown; 271 SVGs ≈ 2.7 MB.

  • Grid stays DOM (virtual rows) with a single scroller and… · plan

    Grid stays DOM (virtual rows) with a single scroller and sticky header, not canvas Why: Fixes the alignment bug at the root; real inputs for editing.

  • GridCraft as a pinned git dependency (calc, model, core), not… · plan

    GridCraft as a pinned git dependency (calc, model, core), not a fork Why: Small surface (one module), easy upgrades, attribution in NOTICE.

  • Guide text in Markdown in the repo; the Chinese guide keeps… · plan

    Guide text in Markdown in the repo; the Chinese guide keeps English UI names in bold with the Chinese meaning beside them; screenshots stay in English with numbered orange markers Why: The app is English-only; readers mu…

  • Hardening gates in CI: cargo deny, Windows + macOS cargo test… · plan

    Hardening gates in CI: cargo deny, Windows + macOS cargo test, hardening tests in cargo test Why: Match the rigour of other open-source schedulers before adding features.

  • Hidden columns stay in the table with a negative width… · plan

    Hidden columns stay in the table with a negative width (Project.columns is now i32); cols() = shown, allCols() = all Why: Hide/unhide without losing the position; files stay compatible.

  • Imports return notes (Imported::Plan(p, notes)): reader notes… · plan

    Imports return notes (Imported::Plan(p, notes)): reader notes plus a date comparison with the file (io::stated_dates, shared with the parity test) Why: The import report the user asked for in 0.3.12; the comparison makes…

  • Levelling always previews (level::preview levels a clone and… · plan

    Levelling always previews (level::preview levels a clone and diffs the dates) Why: See what moves before changing the plan.

  • Light / Dark / Auto theme via CSS tokens on :root[data-theme]… · plan

    Light / Dark / Auto theme via CSS tokens on :root[data-theme]; canvas colours read the tokens Why: The user asked for all three.

  • Light theme, new logo, Cairn-style sidebar, general templates · plan

    Light theme, new logo, Cairn-style sidebar, general templates Why: The user's feedback on 0.1.0.

  • Links on summaries apply to every leaf under them; links to… · plan

    Links on summaries apply to every leaf under them; links to one's own summary are dropped

  • Local-first: .dplan files plus a workspace file; no server, no… · plan

    Local-first: .dplan files plus a workspace file; no server, no cloud, no telemetry (the only network call is the update check) Why: Open source, everything stays on the user's computer.

  • Manpower "Done" is earned hours (planned hours × progress)… · plan

    Manpower "Done" is earned hours (planned hours × progress), not booked hours; planned spreads work evenly over baseline (or current) dates; people = hours ÷ one person's working hours in the period Why: There are no time…

  • Minute-precision engine with real calendars (replacing whole… · plan

    Minute-precision engine with real calendars (replacing whole days) Old files migrate (day × 480).

  • Money: each task's cost and actual cost rounded to the… · plan

    Money: each task's cost and actual cost rounded to the currency's minor unit before roll-up (rates keep their decimals); typed fixed costs rounded Why: Totals equal the sum of shown amounts, without changing the f64 mode…

  • Monte Carlo uses triangular draws (min, planned, max) and the… · plan

    Monte Carlo uses triangular draws (min, planned, max) and the full scheduler per run; a fixed seed (same plan + settings = same answer); risks 1–5 → 10/30/50/70/90 %; Risk.days = working days added to each linked task (o…

  • Name Datum Plan, file extension .dplan · plan

    Name Datum Plan, file extension .dplan Why: The user chose it.

  • Network: layout_with(rows, sums, wbs); bands returned with the… · plan

    Network: layout_with(rows, sums, wbs); bands returned with the layout Why: WBS banding and summary boxes come from the engine, so screen and print agree.

  • No Python; a separate future app "Datum Plot"… · plan

    Why: The user's answer.

  • One grid *engine* (selection, clipboard, fill, formatting… · plan

    One grid *engine* (selection, clipboard, fill, formatting, keys) with two renderers (task outline vs A1 sheet) Why: The views differ in what a row is; sharing the behaviour removes the duplication without forcing one lay…

  • open_url only opens github.com/Edgar-Mendonca/Datum-Plan links · plan

    open_url only opens github.com/Edgar-Mendonca/Datum-Plan links Why: The window cannot be used to open arbitrary URLs.

  • Other views print through one Frame; reports print as flowing… · plan

    Other views print through one Frame; reports print as flowing documents (thead/tfoot repeat the header/footer, @page @bottom-center numbers pages) Why: Exact pages where the layout is ours (Gantt, network, calendar, tabl…

  • Parity files are hand-made until real exports are added; the… · plan

    Parity files are hand-made until real exports are added; the README says "checked against hand-worked cases and plan files", never names another product Why: Honest claim; FAMILY §13.

  • Period notes and photos stored inside the .dplan (photos… · plan

    Period notes and photos stored inside the .dplan (photos downscaled to 1400 px JPEG) Why: Portable single file; the user left it to us.

  • Predecessor IDs typed with new rows (quick add, paste) mean… · plan

    Predecessor IDs typed with new rows (quick add, paste) mean the IDs shown before the insert Why: What the user sees on screen.

  • Print lays the table and chart out as one strip; pages are… · plan

    Print lays the table and chart out as one strip; pages are windows on it; ID + name repeat; column edges snap

  • Print: Schedule Risk, Look-ahead and Manpower are flow views… · plan

    Print: Schedule Risk, Look-ahead and Manpower are flow views (FLOWS), named in VIEW_NAMES; the last risk run is stored in project.ui.risk Why: They printed the Dashboard (the FLOWS fallback).

  • Print/PDF through the WebView print dialog ("Save as PDF")… · plan

    Print/PDF through the WebView print dialog ("Save as PDF") with print CSS, instead of a PDF library Why: No extra dependency; works for every view and report.

  • Printing lays out pages in the UI (SVG) and uses the WebView… · plan

    Printing lays out pages in the UI (SVG) and uses the WebView print dialog (Save as PDF), not a Rust PDF writer Why: Vector output, exact page sizes via @page, no new dependency; works the same on every view we lay out.

  • Project Setup panel (skippable, docked right) as step one of… · plan

    Why: The user's answers, 2026-10-24.

  • Project::normalize clamps spans to MAX_SPAN (10,000,000… · plan

    Project::normalize clamps spans to MAX_SPAN (10,000,000 working minutes ≈ 80 years), lags in % to ±10,000, units to 0–1000, non-finite numbers to 0, splits to 100, day_min to 1–1440; parse::dur caps at MAX_SPAN; WorkCal …

  • Recovery copy in AppData, not autosave over the user's file · plan

    Recovery copy in AppData, not autosave over the user's file Why: Safe: never overwrites a file without asking.

  • Recurring tasks are a summary with SNET-constrained occurrences · plan

    Recurring tasks are a summary with SNET-constrained occurrences

  • Release builds unwind (not abort); guard() in the shell turns… · plan

    Release builds unwind (not abort); guard() in the shell turns a panic in apply/open/import/risk/level preview into an error message; a panic hook appends to crash.log in the app data folder Why: Abort closed the app on a…

  • Report Builder reports and conditional-format rules live in… · plan

    Report Builder reports and conditional-format rules live in project.ui (no format change) Why: Saved with the plan, no migration.

  • Reporting periods per plan (week end day, month close day… · plan

    Reporting periods per plan (week end day, month close day, weighting) chosen by the user Why: The user's answer: it varies by project.

  • Ribbon tabs: Task, Schedule, Progress (user rejected "Home")… · plan

    Ribbon tabs: Task, Schedule, Progress (user rejected "Home"); the ribbon shrinks in steps (data-fit 0–3) and never scrolls Why: User feedback: crowded Task tab and a sideways scrollbar.

  • Rules of credit are step templates (CreditRule) that… · plan

    Rules of credit are step templates (CreditRule) that ApplyCredit copies into a task's steps and sets % Complete Type to Physical; quantities set physical % = installed ÷ planned. Physical % now drives the S-curve for phy…

  • Rust engine in crates/core; Cairn is only a reference · plan

    Rust engine in crates/core; Cairn is only a reference Why: The user wants everything in Rust for a small, robust app.

  • rustfmt is not enforced; the code stays in its compact hand… · plan

    rustfmt is not enforced; the code stays in its compact hand style Why: cargo fmt would add about 3,000 lines to ~7,400 and undo the compact style the user asked for. Clippy -D warnings stays the gate.

  • Saves use doc::write_atomic (temp file + rename) for plans… · plan

    Saves use doc::write_atomic (temp file + rename) for plans, autosave, recovery, options, recent, exports; reads use doc::read_limited (300 MB) Why: No half-written files; no out-of-memory on giant files.

  • Several roadmap steps shipped as one release (0.1.2–0.1.4… · plan

    Several roadmap steps shipped as one release (0.1.2–0.1.4, calendars, constraints, logic, exchange, resources, baselines/progress) Why: The user asked for all of it in 0.2.

  • Sheets read the plan through GridCraft tables and names… · plan

    Sheets read the plan through GridCraft tables and names (Tasks[Finish], Resources[Country], ProjectFinish, SPI), not copied values; the Plan sheet keeps its first 18 columns (A–R) so Plan!M:M formulas still work; percent…

  • Shipped as one release (no betas) because the user asked to… · plan

    Shipped as one release (no betas) because the user asked to "build and release 0.3" Why: Betas stay available through the opt-in channel for later versions.

  • SolidJS + Vite for the UI (not Astro) · plan

    SolidJS + Vite for the UI (not Astro) Astro targets content sites.

  • Status date semantics: progress up to the end of that day… · plan

    Status date semantics: progress up to the end of that day; remaining work starts the next day XER last_recalc_date maps to status = data date − 1.

  • Task sheet and Sheets tabs should share one grid component… · plan

    Task sheet and Sheets tabs should share one grid component (selection, clipboard, fill, formula bar); GridCraft stays the formula engine underneath; scheduling stays in crates/core Why: The user asked to use the Sheets g…

  • Templates carry people/assign/costs; Work is titled "Man-hours" · plan

    Templates carry people/assign/costs; Work is titled "Man-hours" Why: New users see loading, cost and man-hours immediately (the user's Cairn did this).

  • Templates still use the Project Setup panel (setup_done = false) · plan

    Templates still use the Project Setup panel (setup_done = false) Why: Setup is step one of every new plan, as agreed.

  • The Datum apps share one design and workflow in FAMILY.md… · plan

    The Datum apps share one design and workflow in FAMILY.md; each app only changes its accent and logo glyph

  • The engine owns fields, filters, groups and sorts (Calc +… · plan

    The engine owns fields, filters, groups and sorts (Calc + query); the window asks for rows per view Why: One place for values, exports use the same text; 20k tasks query in ~50 ms.

  • The guide is a PDF per language, downloaded on demand (not in… · plan

    The guide is a PDF per language, downloaded on demand (not in the installer): update::guide(lang) fetches DatumPlan-Guide-{lang}.pdf from this version's release (else latest), requires a matching line in that release's S…

  • The window's state lock recovers from a poisoned mutex… · plan

    The window's state lock recovers from a poisoned mutex (St::lock) Why: One panicking command used to lock every later command out.

  • Tiles read the plan through formulas (sheet::eval: one extra… · plan

    Tiles read the plan through formulas (sheet::eval: one extra workbook sheet per formula; a plain =Sheet!A1:C9 keeps that sheet's formats, flags included) Why: One way to get any figure, the same as Sheets; no special dat…

  • Trades are the resources' Group; usage("group") sums work… · plan

    Trades are the resources' Group; usage("group") sums work resources per group with capacity; rows carry cap, Usage.person = one person's hours per bucket (hours → people) Why: No new model field; the window shows the eng…

  • UI in plain TypeScript with no framework, split into 7 script… · plan

    UI in plain TypeScript with no framework, split into 7 script files joined by tsc Why: Small bundle; modules without a bundler.

  • Updater: SHA256SUMS.txt is required; exact file-name match… · plan

    Updater: SHA256SUMS.txt is required; exact file-name match; installer name *-setup.exe of safe characters; unique download folder; 200 MB cap Why: A release without checksums used to install unverified.

  • Windows only; no .mpp (closed format) · plan

    Windows only; no .mpp (closed format) Why: The user's choice. Exchange formats are dplan, XML, XER, XLSX and CSV.

  • Windows publisher is "Datum" (bundle.publisher; the copyright… · plan

    Windows publisher is "Datum" (bundle.publisher; the copyright stays "© 2026 Edgar Mendonca"). src-tauri/windows/hooks.nsh (NSIS_HOOK_PREINSTALL) reads the old Software\Edgar Mendonca\Datum Plan install-folder key, instal…

  • Without a status date, progress reports (Dashboard, period… · plan

    Without a status date, progress reports (Dashboard, period reports, S-curves) measure at max(today, latest recorded progress) (Calc::progress_date/progress_at), and the window says so (Summary.measured_at). Earned value …

  • Work-resource units: 50%, 0.5 or 50; material: quantity; cost… · plan

    Work-resource units: 50%, 0.5 or 50; material: quantity; cost: amount

  • WorkCal::between counts whole weeks arithmetically (plus… · plan

    WorkCal::between counts whole weeks arithmetically (plus exception corrections) for spans over 28 days; daily S-curves fall back to weeks beyond ~10 years Why: A task spanning centuries froze the S-curve (O(days²)).

  • XML reader written by hand instead of quick-xml · plan

    XML reader written by hand instead of quick-xml Why: The quick-xml API changes a lot between versions; MSPDI only needs elements and text.

  • ? help beside the tools in every Datum app: a small ? beside… · plot

    ? help beside the tools in every Datum app: a small ? beside each ribbon group, panel and main dialog opens a card (what it is for, how to use it) from one HELP table in ui/src/help.tsx; Help › What Is This Tool? lists t…

  • 0.3.0 = the full check, not 1.0 (the user: "we are still not… · plot

    0.3.0 = the full check, not 1.0 (the user: "we are still not completed"): FAMILY §11 completed. Core: ID_LIMIT 1<<30 with renumber() (on load for duplicate/zero/huge ids, and when take_id reaches it), graph settings clam…

  • Annotations = GraphSettings.notes (Note: kind, x, y, x2, y2… · plot

    Annotations = GraphSettings.notes (Note: kind, x, y, x2, y2, text, color, size, bold) in data units; graph.figure = build + draw_notes with the axis limits restored Why: Notes follow the data and never rescale the graph.

  • Big builds: after 0.2.0 worked well the user asked to… · plot

    Big builds: after 0.2.0 worked well the user asked to "complete the application with all the pending… 10 to 15 features at a time", then to build the planned 0.2.1 and 0.2.2 groups as one version. The 28 features became …

  • Bigger releases to finish this week: 0.2.22 = data in and out… · plot

    Bigger releases to finish this week: 0.2.22 = data in and out (D17, E5, A13, A14, G5, F3), 0.2.23 = Python and automation (H1–H5), then 1.0. Large data: stats.summarize_fast above 2000 rows, graph.thin (min/max per stret…

  • Brainstorm and PLAN-0.1.md first; 0.1.0 = shell, updater… · plot

    Brainstorm and PLAN-0.1.md first; 0.1.0 = shell, updater, Home, XY table, XY graph Why: The user's instruction and FAMILY §12. The updater works from day one.

  • Brainstorm the full feature set first (catalogue A–J with IDs… · plot

    Brainstorm the full feature set first (catalogue A–J with IDs and releases in PLAN-0.2), then build release by release Why: The user wants to see what Datum Plot will do before evaluating more.

  • Bundle the official embeddable CPython 3.13 + pinned wheels in… · plot

    Bundle the official embeddable CPython 3.13 + pinned wheels in the installer (tauri.release.conf.json); dev builds use the system Python Why: Reproducible, no user install; the embeddable zip is the smallest official run…

  • Clipboard writes and reads go through Rust… · plot

    Clipboard writes and reads go through Rust (tauri-plugin-clipboard-manager), never navigator.clipboard Why: WebView2 blocks the browser clipboard on http://tauri.localhost (Copy Picture failed on Windows).

  • Column table = Table.kind = "column", same model (X column… · plot

    Column table = Table.kind = "column", same model (X column kept, hidden in the UI, unused by Python); each group a data set with reps 1 (or mean/SD/N) Why: No new table code in Rust; every op (paste, sort, exclude, sets)…

  • Contingency table = kind "contingency" (a grouped table with… · plot

    Contingency table = kind "contingency" (a grouped table with one count per cell, Table::contingency); graphs go through grouped_figure (new "percent" = stacked to 100 % of each row) Why: Reuse; nothing new in the model.

  • docs/site.json (FAMILY §10) (with about and steps for the… · plot

    docs/site.json (FAMILY §10) (with about and steps for the family site's Overview) is updated in every release together with the roadmap above; public text (CHANGELOG, README, site.json, the in-app roadmap) never names, c…

  • DSC/TGA and S–N are XY analyses (no new table kinds): DSC… · plot

    DSC/TGA and S–N are XY analyses (no new table kinds): DSC endotherms down by default, onsets by the steepest tangent (exactly centre − 2σ for a Gaussian), ΔH needs the heating rate (default 10 K/min); S–N run-outs come f…

  • Equation and R² on the graph by default; regression uses every… · plot

    Equation and R² on the graph by default; regression uses every replicate by default; Summary + Details tabs Why: The user left these to us.

  • Excluded values: blue italic, struck through; stored as [row… · plot

    Excluded values: blue italic, struck through; stored as [row, col] in the table

  • Format Graph is docked on the right and applies each change… · plot

    Format Graph is docked on the right and applies each change immediately (each is an undo step)

  • Grouped table = kind "grouped" (same model; row titles name… · plot

    Grouped table = kind "grouped" (same model; row titles name the row factor, data sets the other, X column hidden); two-way ANOVA with statsmodels Type III (sum contrasts); brackets carry a 4th element (row) for grouped g…

  • How to cite: CITATION.cff at the root (GitHub's "Cite this… · plot

    How to cite: CITATION.cff at the root (GitHub's "Cite this repository") and a README section; bump its version and date-released in every release Why: A user asked how to cite the app.

  • Lay out the whole UI first: every catalogue feature has its… · plot

    Lay out the whole UI first: every catalogue feature has its place now (ribbon, galleries, navigator, Roadmap); planned ones are dimmed and explain what and when; then build feature by feature Why: The user: "build the ap…

  • Layouts: Project.layouts (Layout page mm, letters, items… · plot

    Layouts: Project.layouts (Layout page mm, letters, items LayoutItem graph/text in mm), ops AddLayout/LayoutSet; Python graph.page draws each graph twice (alone at its panel size with constrained layout to find its axes, …

  • Libraries are added in the release that first needs them… · plot

    Libraries are added in the release that first needs them (openpyxl 0.1.1; statsmodels, lmfit 0.2; scikit-posthocs 0.3; lifelines 0.5; pybaselines 0.6; python-pptx/docx 0.7); no pingouin (GPL), no scikit-learn, no seaborn…

  • Many variables = kind "multi" (Table::multi, one value per… · plot

    Many variables = kind "multi" (Table::multi, one value per cell, row titles name the samples); graphs and XY analyses see it through regress.xy_view (first variable on X, hidden as a data set); multireg takes the outcome…

  • Materials ideas B27–B31 added to the catalogue · plot

    Materials ideas B27–B31 added to the catalogue Why: The user's background.

  • matplotlib draws both the on-screen graph (SVG, text as text)… · plot

    matplotlib draws both the on-screen graph (SVG, text as text) and every export; the window gets geometry back for hover and hit-testing Why: One renderer, so what you see is what you export; publication-quality vector ou…

  • Name Datum Plot, .dplot, com.edgarmendonca.datumplot, Teal… · plot

    Name Datum Plot, .dplot, com.edgarmendonca.datumplot, Teal accent, releases from Edgar-Mendonca/Datum-Plot Why: The user's choice, per FAMILY.md §1 and §3.

  • Nested table = kind "nested" (Table::nested): a column-style… · plot

    Nested table = kind "nested" (Table::nested): a column-style table whose sub-columns are subgroups (reps = subgroups per group); the nested test is the classic hierarchical F (groups / subgroups-within-groups MS), equal …

  • One installer per release (-setup.exe with runtime.zip inside)… · plot

    One installer per release (-setup.exe with runtime.zip inside) for installs and updates; no update-only installer, no separate runtime download Why: The user: separate files confuse people; the 87 MB in-app update was qu…

  • One long-running Python worker over JSON lines (not PyO3, not… · plot

    One long-running Python worker over JSON lines (not PyO3, not a process per request) Why: No Python ABI ties in the Rust build, a crash cannot take the window down, and imports (about 1 s) are paid once.

  • Parts of whole = kind "parts" (Table::parts, built on the… · plot

    Parts of whole = kind "parts" (Table::parts, built on the contingency table); graph.parts_figure draws a pie/donut per data set in one axes (no hover points) or 100 % bars Why: Reuse; one axes keeps export and geometry u…

  • PCA and clustering run on any table's data sets (one value per… · plot

    PCA and clustering run on any table's data sets (one value per row: the first sub-column), scaled to SD 1 by default; results offer a multi table (scores, or the data plus a Cluster column) with one row per original row,…

  • Peaks are found on a lightly smoothed copy (Savitzky-Golay… · plot

    Peaks are found on a lightly smoothed copy (Savitzky-Golay, window ≈ n/30) with width ≥ 2 points and prominence ≥ 10 % of the range, then measured on the raw data; polynomial baselines refit to the points within one resi…

  • Publisher "Datum" for the whole family (bundle.publisher… · plot

    Publisher "Datum" for the whole family (bundle.publisher; copyright stays "© 2026 Edgar Mendonca") Why: The user's family-wide rule (FAMILY §9 in the hub).

  • Python is built in (numpy, SciPy, matplotlib), replacing the… · plot

    Python is built in (numpy, SciPy, matplotlib), replacing the plan's Rust statistics and own SVG engine; Rust is the shell and project engine, SolidJS the window Why: The user's decision after the brainstorm: the Python l…

  • Python runtime as a numbered pack unpacked to the user's data… · plot

    Python runtime as a numbered pack unpacked to the user's data folder (runtime/N); bump py/runtime.txt when requirements change Why: Starts stay fast; Python is unpacked only when its libraries change.

  • Release order: 0.2 statistics and regression, then 0.3 compare… · plot

    Release order: 0.2 statistics and regression, then 0.3 compare groups Why: The user's work (materials science R&D) is regression-heavy.

  • Ribbon tabs Data · Analyze · Graph · View · Help + contextual… · plot

    Ribbon tabs Data · Analyze · Graph · View · Help + contextual Graph Tools › Format; Analyze shows what arrives when Why: No "Home" tab (rejected in Plan); honest empty states (FAMILY §7).

  • Rust core keeps the project model, ops, undo, files and… · plot

    Rust core keeps the project model, ops, undo, files and validation; no numerics in Rust Why: Python owns calculation; Rust owns the document.

  • Same stack, look, updater, release and workflow as Datum Plan… · plot

    Same stack, look, updater, release and workflow as Datum Plan; copy Plan's code Why: FAMILY.md: one design and one way of working; only the accent and glyph change.

  • Samples and wording lean to materials science and engineering… · plot

    Samples and wording lean to materials science and engineering (tensile tests, Arrhenius plots, calibration lines, spectra) Why: The user's background.

  • Second Python worker (Calc) for results and Excel; graphs keep… · plot

    Second Python worker (Calc) for results and Excel; graphs keep their own Why: Long fits never block drawing; memory cost ~100 MB.

  • Second round of users' requests in the same release as planned… · plot

    Second round of users' requests in the same release as planned work (0.2.21 = requests + 3D): the user asked for fewer, bigger releases to finish this week. Column widths live in the project's ui["colw.<table>"] (display…

  • Second Y axis = SetStyle.right + GraphSettings.y2; axis break… · plot

    Second Y axis = SetStyle.right + GraphSettings.y2; axis break = Axis.breakFrom/breakTo (Y, linear, XY graphs, not together with a right axis), drawn as two stacked axes; hover points of right-axis sets carry a 7th value …

  • Security posture (0.2.23 review): code runs only from the… · plot

    Security posture (0.2.23 review): code runs only from the console on Run; My Analyses live in the app's options (snippets), never in projects; the updater refuses releases without SHA256SUMS and matches the exact file na…

  • Significance brackets are analysis overlays: t-test… · plot

    Significance brackets are analysis overlays: t-test, nonparametric and ANOVA results carry brackets; drawn only on column graphs (draws()); options brackets sig/all/none and stars/P Why: Same live chain as fitted curves;…

  • Small consecutive releases (0.2.0, 0.2.1, 0.2.2 … up to 0.3… · plot

    Small consecutive releases (0.2.0, 0.2.1, 0.2.2 … up to 0.3, no jumped numbers); 0.2.0 = results + statistics + linear regression + curve fitting + Arrhenius; order in PLAN-0.2.0 §9 Why: The user: quick small updates are…

  • Small steps again: the remaining 49 features in releases of… · plot

    Small steps again: the remaining 49 features in releases of one to four (0.2.3–0.2.24, then 1.0; PLAN-0.2 §12) Why: The user: "a very big gap… short of tokens… break it into very small steps… complete as much as possible…

  • Survival table = kind "survival" (Table::survival): X is shown… · plot

    Survival table = kind "survival" (Table::survival): X is shown and holds the time; each row is one subject with 1 (event) or 0 (censored) in its group's column, the other groups empty (the usual layout); the graph is dra…

  • Transforms, histograms and smoothing are analyses whose result… · plot

    Transforms, histograms and smoothing are analyses whose result can become a table (Results › New table from result), not live linked tables Why: Keeps the core simple; the analysis itself stays live.

  • Users' feedback first: comments from users (via the owner) are… · plot

    Users' feedback first: comments from users (via the owner) are discussed, judged and built as their own small release before the planned one (0.2.10 = four requests; layouts moved to 0.2.11, later releases +1) Why: The u…

  • Worksheet = kind "sheet" (Table::sheet): every data set one… · plot

    Worksheet = kind "sheet" (Table::sheet): every data set one column, DataSet.role (x, "", yerr, skip), units, comment; graphs/XY analyses via sheet.sheet_view (hidden sets keep their index so styles stay put). Formulas li…

  • zip 9 and deny.toml (security and hardening): zip 2.x had… · plot

    zip 9 and deny.toml (security and hardening): zip 2.x had three advisories (RUSTSEC-2026-0367, 0368, 0369: unsafe symlinks and permissions in extract()); Plot's own loop in runtime.rs never calls extract() and only opens…

  • A process-type line with an end on an instrument bubble or a… · schema

    A process-type line with an end on an instrument bubble or a thermowell is an instrument connection: no number, not in the line list, not checked as a pipeline Why: Impulse lines are part of the instrument, not the pipin…

  • A run (one pipeline) is the process lines joined through… · schema

    A run (one pipeline) is the process lines joined through in-line items and off-page pairs whose line numbers agree; a size change at a reducer starts a new run Why: The line list lists pipelines, not drawn pieces; the nu…

  • An independent review of the engine before the exhibition… · schema

    An independent review of the engine before the exhibition build, as Datum Pipe did: run joining by number at items with 3+ lines, one new sequence per pasted pipeline, checks 8/10 walk through off-page pairs, merge skipp…

  • An issue (model::Issue, project-level issues, SQLite table… · schema

    An issue (model::Issue, project-level issues, SQLite table issues) keeps the whole datasheet as text per "Section › Label" in SI display units; Δ compares the current SI datasheet to the last issue. Issues of a deleted o…

  • Attribute keys stay the short internal keys (design_p, size…)… · schema

    Attribute keys stay the short internal keys (design_p, size…) with the DEXPI name alongside (dexpi); class names are DEXPI-style and will be checked against the DEXPI specification when export is built Why: No migration …

  • Cause and effect is derived from the drawing only: interlocks… · schema

    Cause and effect is derived from the drawing only: interlocks are the interlock logic symbol (and switches wired straight to a final element); classification of each neighbour by category, not by line direction Why: Noth…

  • Check 8: a check valve counts only when the pump's flow… · schema

    Check 8: a check valve counts only when the pump's flow reaches its inlet (port 0); reached at its outlet it is reported on the valve. Op::TurnRound mirrors an in-line item and swaps the lines on its two process ports Wh…

  • Data typed on a line goes to every drawn piece of its run… · schema

    Data typed on a line goes to every drawn piece of its run; hydraulics are per run, from its first piece Why: The pieces of one pipeline always agree, so the line list, badges and checks agree

  • Datasheets are a view built by the engine from the object, its… · schema

    Datasheets are a view built by the engine from the object, its class (attribute group places a row in a section) and its process source; derived rows carry their source and are not editable on the datasheet Why: One copy…

  • Datum Schema becomes an object-based plant engineering tool… · schema

    Datum Schema becomes an object-based plant engineering tool, not a drawing tool: objects are the master and symbols are views of them; a plant hierarchy (project › plant › unit › area); classes and attributes as data (a …

  • Delete { ids, keep }: deleting views only purges the objects… · schema

    Delete { ids, keep }: deleting views only purges the objects of those views (and only when no other view shows them and keep is off); DeleteObjects removes objects with all their views. The window asks only when a deleti…

  • DEXPI round trip: our export writes DatumSchemaSymbol… · schema

    DEXPI round trip: our export writes DatumSchemaSymbol, LineKind, FlowDirection and the turn (Reference) and mirror (Axis Z = −1); numbers at full precision; impulse lines carry their line object's data. The import uses t…

  • DEXPI: one sheet per file (as DXF); components placed in the… · schema

    DEXPI: one sheet per file (as DXF); components placed in the first segment that ends at them, loose ones in a "PNS-UNCONNECTED" system; signal connections to equipment refer to the equipment, process ones to its nozzle. …

  • Everything in the brief §1 (name, magenta accent, identifier… · schema

    Everything in the brief §1 (name, magenta accent, identifier, .dschema, stack, units, ribbon tabs, layout, own symbols after ISO 10628-2 and ISA-5.1, logo, public words) Why: Made with the user in the hub, session 22

  • File format 3: 0.1.8 refuses 0.1.9 files ("update Datum… · schema

    File format 3: 0.1.8 refuses 0.1.9 files ("update Datum Schema") rather than opening them and dropping the revisions on save Why: Losing issued revisions silently is worse than asking to update

  • Final elements for check 11 are control valves and regulators… · schema

    Final elements for check 11 are control valves and regulators only (by symbol), not relief devices Why: PSV and breather tags end in V too, and hid a missing control valve in Find the faults

  • Ids stay u32 inside the file; every object also has a uid… · schema

    Ids stay u32 inside the file; every object also has a uid (UUID form) for exchange and later merging Why: Small ids keep the engine and window simple; the uid carries identity across projects

  • Import reads with calamine (MIT; NOTICE lists its crates)… · schema

    Import reads with calamine (MIT; NOTICE lists its crates): writing an xlsx reader of our own would be weeks for no gain, and hostile files are its job. Rows that live on the line, vessel or drawing (key empty) are never …

  • Instrument presets (PT, LIC, FIC…) in the palette; a new… · schema

    Instrument presets (PT, LIC, FIC…) in the palette; a new instrument given only its letters takes the next free loop number on its sheet Why: The brief lists the tag letters; loops share numbers (LT-101, LIC-101, LV-101)

  • Lines are drawn and routed by the engine (Sim's router, ports… · schema

    Lines are drawn and routed by the engine (Sim's router, ports facing four ways); bend points the user drags are kept Why: The brief: Sim's wires with bends you can drag

  • Loop = instruments with the same first letter and number… · schema

    Loop = instruments with the same first letter and number (ISA-5.1), at least two, relief devices excluded. Wiring is five text attributes in the class library group "Wiring" (not on the datasheet). Primary elements are d…

  • Manual valves take the prefix HV (hand valve), not V · schema

    Manual valves take the prefix HV (hand valve), not V Why: V is the vessels' prefix; the first test placed a valve tagged V-103 among vessels V-101 and V-102

  • Objects no view shows are deleted with their last view (until… · schema

    Objects no view shows are deleted with their last view (until 0.1.7 offers "remove from sheet only") Why: No orphans until the Plant panel can show them

  • Objects own tags and data; items and line pieces point at them… · schema

    Objects own tags and data; items and line pieces point at them (obj). A process line joined to an in-line symbol or a paired off-page connector whose other side has a line continues that line's object; otherwise it gets …

  • One line number label and one hydraulic badge per run per… · schema

    One line number label and one hydraulic badge per run per sheet, on its longest straight segment Why: Labels on every short piece between valves cluttered the examples

  • Positions are sheet millimetres (y down); text primitives are… · schema

    Positions are sheet millimetres (y down); text primitives are placed by the middle of their height Why: Prints at true size; one rule for SVG (dominant-baseline: central) and DXF (middle alignment)

  • Process source order: a process line on the instrument; a… · schema

    Process source order: a process line on the instrument; a process line through an in-line element it is tapped to; equipment it is tapped to by an impulse line; else its loop (same first letter and number), measurement f…

  • Quick insert is a popover at the point with a transparent… · schema

    Quick insert is a popover at the point with a transparent backdrop, not a modal over the window Why: The drawing must stay visible while choosing where a symbol goes

  • Revisions: letters (A, B… Z, AA) for Preliminary and Issued… · schema

    Revisions: letters (A, B… Z, AA) for Preliminary and Issued for Enquiry, numbers (0, 1…) for Issued for Purchase and As-built; suggested, the user may type another (unique per datasheet, at most 12 characters). Bulk issu…

  • SQLite via rusqlite (bundled); objects and attribute values… · schema

    SQLite via rusqlite (bundled); objects and attribute values are real tables (queryable); geometry rows keep JSON columns; recovery copies stay JSON Why: The user's single-database file; JSON for the parts nobody queries …

  • Symbols are data in the engine (a small drawing language)… · schema

    Symbols are data in the engine (a small drawing language), turned into SVG for the window and into blocks for DXF Why: One drawing per symbol; the window, print and DXF always agree

  • Tags number 101 … on sheet 1, 201 … on sheet 2 (line sequence… · schema

    Tags number 101 … on sheet 1, 201 … on sheet 2 (line sequence 1001 …, 2001 …) Why: "Automatic numbering per prefix and sheet" in the brief

  • The build ran ahead of the brief's step plan (checks, lists… · schema

    The build ran ahead of the brief's step plan (checks, lists, hydraulics, DXF and examples were ready with the canvas), so 0.1.1 carries brief steps 3–6 and the next releases are speed, polish and the exhibition build; ea…

  • The canvas's drag overlay is a keyed Show: a non-keyed Show's… · schema

    The canvas's drag overlay is a keyed Show: a non-keyed Show's child ran once, so the line under the mouse (and the selection box) never followed the mouse. A click on a port (no drag) leaves the wire "sticky" until the n…

  • The class library replaces fields.rs; the window gets each… · schema

    The class library replaces fields.rs; the window gets each used class's attributes (with the project's additions) in derived().attrs Why: One owner of "what data a thing has"; project attributes show at once

  • The datasheet layout is project data (Settings.ds_layout)… · schema

    The datasheet layout is project data (Settings.ds_layout), filtering the datasheet view only: hidden rows keep data, are imported and are in issue snapshots; Δ counts only shown rows. The shell copies the default layout …

  • The DXF was read back with an independent reader (ezdxf… · schema

    The DXF was read back with an independent reader (ezdxf 1.4.5): all four examples open with 0 errors and 0 repairs, blocks and TAG attributes intact, and render the right way up Why: "Opens in any CAD program" should be …

  • The history is kept in the document (not in the undo… · schema

    The history is kept in the document (not in the undo snapshots) and saved in the file; undo and redo are recorded as changes too Why: An audit trail must not disappear with an undo

  • The release workflow's Windows tests found that saving failed… · schema

    The release workflow's Windows tests found that saving failed on Windows (flushing the new database through a read-only handle); fixed before 0.1.5 was published Why: Windows refuses FlushFileBuffers on a read-only handl…

  • The router marks cells and edges inside symbols by index… · schema

    The router marks cells and edges inside symbols by index ranges (binary search on the grid lines) and keeps distances in arrays, and its second search window is 120 mm Why: Routing was 5 s on a crowded 500-symbol sheet; …

  • The shell (main.rs, styles, ribbon, File page, print, help) is… · schema

    The shell (main.rs, styles, ribbon, File page, print, help) is copied from Datum Pipe, the newest copy of Plan's shell; the updater, guard, crash.log and atomic writes from Plan 0.4.3 itself Why: Pipe's shell is already …

  • The Tell Me overlay was class="ov top"; the title bar's .top {… · schema

    The Tell Me overlay was class="ov top"; the title bar's .top { background } rule, later in the stylesheet, made it opaque and hid the window. Renamed the overlay's class to high (the same clash exists in Datum Plan's sty…

  • The UI tests drive the real engine: examples/serve.rs answers… · schema

    The UI tests drive the real engine: examples/serve.rs answers the shell's commands over a local HTTP port and serves the built window; api.rs holds what both return Why: The brief's UI tests (place, connect, split, see a…

  • Undo keeps the whole project before each edit (bounded to 200)… · schema

    Undo keeps the whole project before each edit (bounded to 200) rather than inverse operations Why: The brief asks for undo as operations; edits are operations, and a snapshot per operation is the simplest exact undo for …

  • Versions stay consecutive (0.1.4 released, then 0.1.5…); the… · schema

    Versions stay consecutive (0.1.4 released, then 0.1.5…); the object core order and defaults are in docs/PLAN-0.2.md §7; no reverse engineering of commercial software, only public documentation and open standards Why: The…

  • A double-click on a wire is two presses on the same wire… · sim

    A double-click on a wire is two presses on the same wire within 450 ms (the browser did not report dblclick on a wire after the first press selected it) Why: Works the same in every WebView; tested

  • A new library group Drives (source, inverter, PWM, transforms… · sim

    A new library group Drives (source, inverter, PWM, transforms, encoder); motors stay in Motors Why: The user's "all motor types" brings drive pieces that are not motors

  • Block interface: outputs, derivatives, update (major steps)… · sim

    Block interface: outputs, derivatives, update (major steps), next hit, zero-crossings; feedthrough; sorting on feedthrough edges; a cycle without state is an algebraic loop error Why: How open simulators are built; ideas…

  • Cursor values, step marks and the probe's values come from the… · sim

    Cursor values, step marks and the probe's values come from the engine (value_at, step_marks in measure.rs); the window only draws Why: "The window never calculates"

  • Discrete blocks keep their own state inside the block (not the… · sim

    Discrete blocks keep their own state inside the block (not the solver's state vector) and change only at sample hits; at a hit the output is computed from state and input, then update moves the state on Why: Same pattern…

  • File format 2 (masks); format 1 files need no change · sim

    File format 2 (masks); format 1 files need no change Why: Older apps refuse a format 2 file with a clear message instead of losing the masks

  • Goto/From resolved in flattening: a From becomes a… · sim

    Goto/From resolved in flattening: a From becomes a pass-through fed by its Goto's source; local = same diagram, global = anywhere Why: No runtime cost, errors point at the block

  • Library drag uses plain mouse events with a ghost, and the… · sim

    Library drag uses plain mouse events with a ghost, and the window's dragDropEnabled is off Why: On Windows Tauri catches drags for file drops, so HTML drag-and-drop never reached the diagram (the user's Windows test); mo…

  • Log all signals is a run setting (SimSettings.log_all); probe… · sim

    Log all signals is a run setting (SimSettings.log_all); probe channels carry probe: true and the block (or subsystem) and port the wire leaves from Why: One logging path; sinks and the probe never mix

  • Machines in their natural frames: induction in the stationary… · sim

    Machines in their natural frames: induction in the stationary αβ frame with flux linkages as states (no speed-dependent frame, wound-rotor voltages turned by p·θ); synchronous machines in the rotor dq frame with Park ins…

  • Masks are on the subsystem block (Block.mask: params, icon… · sim

    Masks are on the subsystem block (Block.mask: params, icon text, help, presets); values live in the block's params like any block's. Flattening opens a scope per masked subsystem; scope_vars evaluates each mask's values …

  • Motor blocks: DC motor and PMSM (d–q) as library blocks, plus… · sim

    Motor blocks: DC motor and PMSM (d–q) as library blocks, plus a DC motor built from blocks in a subsystem as an example; induction motor in 0.2 Why: The user asked for motor simulation; a library block is fast and exact,…

  • Moving a wire segment writes the whole moved path's corners as… · sim

    Moving a wire segment writes the whole moved path's corners as the wire's bend points; the router keeps a wire through its bend points Why: No new routing mode; undo, files and printing work unchanged

  • My blocks are .dsimblock files (name, help, a library clip of… · sim

    My blocks are .dsimblock files (name, help, a library clip of the subsystem moved to 0, 0) in a folder (Options; default the app's data folder); adding one pastes a copy Why: The user's choice: copied, not linked (PLAN-0…

  • Notes are a block kind (Note) that flattening skips; colours… · sim

    Notes are a block kind (Note) that flattening skips; colours are Block.color from blocks::COLOURS Why: Notes move, copy, undo and print like blocks; one owner for the colours

  • One installer with Python inside; every update downloads it… · sim

    One installer with Python inside; every update downloads it whole Why: Datum Plot's rule (the user did not ask otherwise; question 8 left open)

  • Orange accent #C2410C (a new family accent) · sim

    Orange accent #C2410C (a new family accent) Why: The user's answer 1 (session 2); distinct from blue, teal and violet; 5.2:1 on white

  • Order: motors (0.1.2), discrete control (0.1.3), then wires… · sim

    Order: motors (0.1.2), discrete control (0.1.3), then wires and scopes; live tuning moves to 0.3 Why: The user's answers in PLAN-0.1.x §5

  • Own expression parser (expr.rs), not evalexpr · sim

    Own expression parser (expr.rs), not evalexpr Why: evalexpr is AGPL-3.0 from v12; meval/fasteval unmaintained; we need symbolic work later anyway

  • Own orthogonal wire router in Rust · sim

    Own orthogonal wire router in Rust Why: libavoid is LGPL, elkjs EPL; a router in the engine is testable and fast

  • Own Rosenbrock 2(3) stiff solver instead of diffsol's BDF for… · sim

    Own Rosenbrock 2(3) stiff solver instead of diffsol's BDF for now Why: The block system is a black box stepped by our loop (hits, zero-crossings, streaming, stop/pause); a one-step method with a finite-difference Jacobia…

  • Piecewise-constant sources use the step's start time inside a… · sim

    Piecewise-constant sources use the step's start time inside a step (Ctx::tseg) and the solver lands on every jump (next_hit) Why: A step input never smears across a solver step: the step time is hit exactly with every so…

  • Plan's Network Diagram gives only the viewport ideas; the… · sim

    Plan's Network Diagram gives only the viewport ideas; the block editor's interaction layer and the wire router are new Why: Plan's diagram is read-only with fixed wires through boxes (found in session 1)

  • Publisher "Datum" in tauri.conf.json (bundle.publisher)… · sim

    Publisher "Datum" in tauri.conf.json (bundle.publisher); copyright stays "© 2026 Edgar Mendonca". Discrete control, wires and scopes move to 0.1.4, 0.1.5 and 0.1.6 Why: The user's family-wide change (hub FAMILY §9); a pa…

  • Python from the start (numpy, SciPy, python-control only)… · sim

    Python from the start (numpy, SciPy, python-control only), started on the first analysis Why: The user's answer 2: "add Python in the beginning, not too big"; lazy start keeps launch fast

  • Rates worked out in the compiler (Rt::rate, fixed point over… · sim

    Rates worked out in the compiler (Rt::rate, fixed point over inputs: constant < continuous/discrete < mixed); rates command; View › Sample-time colours Why: One owner (the engine); the window only colours

  • Release order for the bigger build: 0.1.4 discrete + motor… · sim

    Release order for the bigger build: 0.1.4 discrete + motor extras, 0.1.5 scopes + probe, 0.1.6 wires, 0.2.0 masks + My blocks; buses and algebraic loops move to 0.3 Why: The user: "as you please" (PLAN-0.2 §7)

  • Ribbon Model · Simulate · Analyze · View · Help with a… · sim

    Ribbon Model · Simulate · Analyze · View · Help with a contextual Format tab; planned tools dimmed with their release Why: The user agreed (answer 6); Plot's "whole UI laid out" rule

  • Scope layout and y range are Scope block parameters (layout… · sim

    Scope layout and y range are Scope block parameters (layout, ymin, ymax), set from the scope's More menu as undoable edits Why: Saved with the model, one owner, no window-only state

  • Send to Datum Plot = a CSV Plot can open (time first, named… · sim

    Send to Datum Plot = a CSV Plot can open (time first, named columns) Why: Plot opens only .dplot files from the command line; a direct hand-over needs a change in Plot

  • Signal names live on wires (Wire.name); NameWire names every… · sim

    Signal names live on wires (Wire.name); NameWire names every wire from the same output; flattening uses the name for the source's output name, so legends, results and the probe show it Why: One signal, one name, wherever…

  • Signals are vectors with inferred widths; most blocks work… · sim

    Signals are vectors with inferred widths; most blocks work element by element Why: Mux/Demux and vector constants from the start, without a second signal type later

  • site.json has about and steps for the family site's app page… · sim

    site.json has about and steps for the family site's app page (/apps/sim), kept true with every release (CLAUDE.md release step 6); README links to that page Why: The user's request; FAMILY §10. Checking found three overc…

  • Subsystems from 0.1 (create, open, ungroup, nest); masks in 0.2 · sim

    Subsystems from 0.1 (create, open, ungroup, nest); masks in 0.2 Why: The user asked for subsystems in the first build

  • Take rea's practices (inward layers, test depths, goldens… · sim

    Take rea's practices (inward layers, test depths, goldens, verification records); never use rea against another simulator Why: The user asked for a strong way of building; reverse-engineering other simulators would break…

  • The branch claude/dreamy-babbage-dyf9nr is the default branch… · sim

    The branch claude/dreamy-babbage-dyf9nr is the default branch, as in the other apps; signing waits for 1.0 Why: Question 9 left open; the family's way

  • The shell keeps the last five runs (plus the current) for… · sim

    The shell keeps the last five runs (plus the current) for Compare; channels are matched by name Why: Small, enough to compare a few tunings

  • Typical ratings live in the engine (motors::presets, served… · sim

    Typical ratings live in the engine (motors::presets, served with the library) and the Inspector applies one as a single Batch of SetParam Why: One owner for the numbers, testable, one undo step; values come from per-unit…

  • Undo with whole-model snapshots and ops in, as Plan's doc.rs… · sim

    Undo with whole-model snapshots and ops in, as Plan's doc.rs does Why: Simple, and a failed edit leaves the model exactly as it was (FAMILY §11)

  • uPlot for scopes in the family chart style (Chart.js stays for… · sim

    uPlot for scopes in the family chart style (Chart.js stays for small charts) Why: The user's answer 7; Chart.js is too slow for long live signals

  • User libraries (0.2) will be copied into models, not linked · sim

    User libraries (0.2) will be copied into models, not linked Why: The user: "whichever is simpler, safer and faster"

  • Zero-crossing functions keep their last non-zero sign in the… · sim

    Zero-crossing functions keep their last non-zero sign in the solver Why: A crossing landing exactly on 0 was lost (switched inverter test)

  • Zero-crossings count only strict sign changes (with the last… · sim

    Zero-crossings count only strict sign changes (with the last non-zero sign kept) Why: A signal resting at zero made endless tiny steps

  • zip 9 (not 2 as in Plot) in the shell · sim

    zip 9 (not 2 as in Plot) in the shell Why: cargo deny: three advisories in zip 2.x (RUSTSEC-2026-0367/0368/0369)

Source file 325
  • *.json · atlas

    The built-in database (252 materials, 36 sources), status: draft; 20 materials have checked lists (73 values); durability ratings on every material.

  • api.ts · atlas

    Types, fmt/range/valText/mid, FAMILY_COLORS (Okabe-Ito).

  • bridge.rs · atlas

    The engine over stdin/stdout JSON lines for the UI tests.

  • browse.tsx · atlas

    Tree, Browse (grid engine selection.ts, sort, columns menu, Ctrl+C via Rust), Datasheet (groups, numbered references).

  • chart.rs · atlas

    build(db, chart) → ChartOut (axes with limits, bubbles, hulls with members and labels, missing with reasons; for bar charts bands per family, sorted).

  • chart.tsx · atlas

    ticks, ChartSvg (screen, print and export), Legend, ChartView (zoom/pan window per chart, hover, click, drag line/box, Line and Box tools), ChartBar (goal list, Why, bubbles/bars, envelopes, zoom), ChartTools (axes, Pan/…

  • compare.rs · atlas

    Compare and radar: build, RADAR, MAX.

  • compare.tsx · atlas

    The Compare page with the radar, and the selection report (screen and print).

  • db.rs · atlas

    builtin() from the embedded files, Db (built-in + user + derived), derive, tree, search, check (incl. checked values), check_user, props_out.

  • doc.rs · atlas

    Op, Doc (undo 200, open/save).

  • export.rs · atlas

    Results as a table: results, csv, xlsx.

  • features.ts · atlas

    The feature catalogue (A data, B charts, C selection, D compare/report, E eco, F process, G help) and soon(id) cards, Roadmap page; past releases plus RELEASES/PLANS read from docs/site.json.

  • formula.rs · atlas

    Formulas of properties on ranges: parse (with names resolved), key_of, refs, eval (interval arithmetic), show.

  • formula.tsx · atlas

    The formula-properties window (editFormulas(axis?)).

  • geometry.rs · atlas

    t/span/mean in axis space, ellipse, convex, rounded hull, inside, clusters.

  • goals.rs · atlas

    Goal (group, name, index, axes, slope, above, function, constraint, objective, free variable, why, limits, also for a second chart), GOALS (25), get, place, apply.

  • hardening.rs · atlas

    FAMILY §11 tests: failed edits change nothing (incl. a failing Batch and goal), random projects and random edits never panic and keep their invariants (finite geometry, counts add up, every failure has a reason), random …

  • help.tsx · atlas

    HELP (26 topics), the ? button, helpCard. Help › What Is This Tool? lists every topic.

  • importer.tsx · atlas

    The import window (importMaterials) and the Databases section.

  • index.html · atlas

    Icon sprite (Plan/Plot icons recoloured violet + atlas, bar, box, compare, datasheet, db, eco, eye, hull, index, material, pan, poly, process, radar, swap, tree, units).

  • main.rs · atlas

    Commands in the diagram; options (theme, autosave, beta, openLast, labels, guides, dpi, units, paper, landscape, company, logo); user database file; recovery; recent files; open_url only for this repo.

  • material.tsx · atlas

    Add/Edit Material window with the "What you need" panel; deleteMaterial.

  • model.rs · atlas

    Val (untagged arrays), Material (with checked), Source, Database, PROPS (34 properties + 7 derived: key, name, symbol, group, unit, log default), FAMILIES, RATINGS; .datlas Project format 1 (charts, stages, notes, ui), C…

  • pages.tsx · atlas

    Setup (requirements, goal list, design problems), goalCard (Why), Sources page (kinds, licences, cites), Data (your materials, families, sources), Later pages for Compare, Index builder, Report; MiniChart.

  • print.tsx · atlas

    Print page: chart pages (vector, legend, caption), datasheet and results as flowing pages; header/footer codes.

  • ribbon.tsx · atlas

    Family patterns from Plan and Plot, adapted.

  • run.cjs · atlas

    Playwright against ui/dist with the real engine (bridge): 72 checks (goals, units, bars, Tell Me materials, sources, ? help, Home tiles, checked ✓, chart, hulls, hover, click on the line, datasheet, drag changes the pass…

  • select.rs · atlas

    run(db, project) → Results (stage counts, rows with reasons, index, rank, × best, lines with index name and value; index_name writes E½/ρ, σy⅔/ρ).

  • sheet.rs · atlas

    Spreadsheets in and out of a database: read, from_text, guess, range, to_database, of_database, bytes.

  • site.json · atlas

    The public summary (FAMILY §10): tagline, audience, about (Overview paragraphs), three steps, highlights, screenshots, roadmap (Next/Soon/Later/Goal). Read by the family site, the Datum network and Help › Roadmap. site_j…

  • stages.tsx · atlas

    StagesPage (limits, chart selections, family tree), StagePanel, ResultsPage, addLimit.

  • store.ts · atlas

    Signals and actions (see diagram); goals, setGoal; units (imperial, conv, toShown, toStored, unitOf, vtext, setUnits); show(view) also switches the ribbon tab; failed() for greying.

  • templates.rs · atlas

    Design problems built from goals: blank, beam, tie, panel, spring, hot, tough.

  • tests.rs · atlas

    Data checks, bad-data detection, unit round trips, bubbles in log space, hulls contain their bubbles (6 axis pairs × family/class), missing values, index lines for slopes 1/2/3 above/below, limits (missing, flag, whole r…

  • units.rs · atlas

    Imperial factors per stored unit, to/from (exact inverses), fmt (3 significant figures), range.

  • update.rs · atlas

    Datum Plan's updater with REPO = Edgar-Mendonca/Datum-Atlas.

  • api.ts · mesh

    Shell calls and the model's shapes in TypeScript

  • backstage.tsx · mesh

    File page: examples, recent, export, options, updates

  • bench.rs · mesh

    The verification benchmarks as data (run() → rows with result, reference, error, source); the test fails on any row over its tolerance

  • bigpart.rs · mesh

    A 25 000-element bracket's results as JSON, for timing the window by hand (not a test)

  • canvas.tsx · mesh

    The canvas: pan, zoom, adaptive grid, rulers, snap (grid, nodes, corners), select/marquee/drag-move, draw nodes, beams, truss bars, rectangles, circles, polygons and holes, pick edges, place supports and loads; support a…

  • cmds.ts · mesh

    Every command (ribbon, menus, keys, Tell Me)

  • dialogs.tsx · mesh

    Materials, sections, node at coordinates, shortcuts, getting started, glossary, recovery, close

  • doc.rs · mesh

    Edit operations (Add, Set, AddMember by points, Move, Delete with cascade, InsertCorner, RemoveCorner, JoinCrossings, Fillet, Chamfer, Combine, Offset, Pattern, Make, SetSettings, SetMeta, Batch; retarget moves supports,…

  • dump.rs · mesh

    Writes tests_ui/fixture.json (the engine's real examples) for the UI tests

  • examples.rs · mesh

    The worked examples, built in code: blank frame and part, portal frame, roof truss, lifting lug, L-bracket, flange plate, heat sink

  • fonts.css · mesh

    The IBM Plex fonts as woff2 only

  • frame.rs · mesh

    Frames and trusses: beam and truss stiffness, linear member loads as consistent nodal loads, self-weight, springs, reactions, equilibrium sums, exact N, V, M and deflection along each member (41 stations), stress and uti…

  • geom.ts · mesh

    Arcs from bulges, edge points, normals, SVG paths, hit tests

  • hardening.rs · mesh

    FAMILY §11: failed edits change nothing, random edits keep the model valid and round-trip, damaged files, speed gate

  • heat.rs · mesh

    Steady heat conduction: T3/T6, fixed temperatures, flux, convection, generation; heat flux recovered at nodes and per element; heat flows at every support and load and the heat balance

  • help.tsx · mesh

    The ? cards

  • lib.rs · mesh

    Results (frame, plane or heat, tagged by kind) and solve() for any analysis; tests that every example solves, balances and agrees with hand checks

  • main.rs · mesh

    Files written safely (temporary file, sync, rename). Commands: state, apply, history, examples, new model, section properties, open/save, save file, options, recovery, recent, startup file, open_url, version, updates

  • main.tsx · mesh

    Window layout, sidebar (Model, Mesh, Results, Report), status bar (tool hint, cursor, counts, drawing scale), keys, start-up and recovery

  • materials.rs · mesh

    The materials library: 54 metals and plastics from Datum Atlas with sources (E, ρ, k, α the middle of the range, yield the low end, ν typical for the family); the script rebuilds the JSON from an Atlas checkout

  • mesh.rs · mesh

    Meshing parts: outlines (arcs split by the local size) into a spade constrained Delaunay triangulation inside a frame round the part, refined for angle and size; local sizes from refined edges and points grow into the gl…

  • modal.rs · mesh

    Natural frequencies and buckling (subspace shared, Kind): subspace iteration on one sparse Cholesky of K, Rayleigh–Ritz with a small dense Cholesky and Jacobi eigen solve; mode shapes scaled to a largest movement of 1

  • model.rs · mesh

    The model: analysis kind, nodes, members, sections, materials, shapes (polygons with bulge arcs, circles, holes), supports and loads with targets (node, member, edge, point, body), mesh settings; check (every invariant);…

  • modes.tsx · mesh

    Modes on the drawing (frames along members; parts through the contour canvas, 16 cached swing steps), the mode list, the animation, the frequency table

  • panels.tsx · mesh

    The model tree and the Inspector (node, member, shape with its corners and arcs, edge, support, load, model settings); default support and load values

  • parts.tsx · mesh

    Part results: fields and colour scales (12 bands, rainbow or viridis, safety factor reversed), band paths built once in model coordinates (isobands by clipping) and painted on a canvas under the drawing with one transfor…

  • PLAN-0.1.md · mesh

    The plan, the public summary and roadmap, the change log

  • plane.rs · mesh

    Plane stress and plane strain: T3/T6 elements, edge pressure (× thickness) and edge forces (whole force or per length, for the whole thickness), gravity, point loads, fixed/pinned/roller/symmetry supports (rollers on slo…

  • plane3.ts · mesh

    Working planes of a 3D frame: the projected model the canvas edits (planeModel), faint members off the plane, depths, and lift turning canvas edits into 3D

  • print.tsx · mesh

    Print: the model drawn to fit the page with a title block, and a report with the results and the equilibrium check

  • realapp.sh · mesh

    Screenshots of the real app under Xvfb

  • results.tsx · mesh

    Frame results over the canvas (deflected shape, diagrams, reactions, utilisation, probe), the legend bar, and View › Results (equilibrium, reactions, members, solver)

  • ribbon.tsx · mesh

    Title bar, quick access, Tell Me, the ribbon (Home, Geometry, Mesh, Loads, Solve, Results, View, Help, contextual Format); planned tools dimmed with their release

  • roadmap.tsx · mesh

    File › Roadmap from docs/site.json

  • run.cjs · mesh

    142 UI checks of the built window with a mocked bridge (results in the fixture packed as the shell sends them)

  • sections.rs · mesh

    Section properties (A, I, c) for rectangle, round bar, tube, box, I, channel, angle and custom

  • size.cjs · mesh

    The window's size budgets (startup code 400 kB, whole window 1.6 MB), run by CI

  • sketch.rs · mesh

    Sketch tools (0.3.1): corner (fillet or chamfer), combine (i_overlay on short pieces, each result edge traced back to the line or circle it lies on so arcs come back as arcs, corners where the exact curves meet, the inpu…

  • sketch.tsx · mesh

    The sketch tools' dialogs and the Combine buttons (selection order: first picked is kept)

  • solid.rs · mesh

    3D solids (0.3.0): the section's 2D mesh swept into layers (Swept), 18- and 6-node wedges (triangle × line shape functions), faces for loads and supports (side faces from edges, end faces), penalty rollers on sloping fac…

  • space.rs · mesh

    3D frames: local axes (axes), the 12×12 beam (axial, torsion, bending both ways) and truss bars, member loads in any direction, supports and springs in six directions, results along members (N, Vy, Vz, T, My, Mz, 3D defl…

  • space3.tsx · mesh

    3D frames without three.js: the colour-by choice and range, the deflection scale, the 3D legend and the plane bar (loaded at startup)

  • sparse.rs · mesh

    The shared linear solver: triplets, supports by elimination, prescribed values, faer sparse Cholesky, a probe solve that catches mechanisms, residual

  • store.ts · mesh

    Window state: the model (out().m), selection, picked edge, canvas tool, menus, dialogs

  • styles.css · mesh

    Plan's styles (crimson accent) and components; the icon sprite

  • units.ts · mesh

    Display units (SI/US) and conversions

  • update.rs · mesh

    The updater (Plan's, REPO = Datum-Mesh)

  • verify.rs · mesh

    Writes the dated verification record (docs/verification/x.y.z.md)

  • view3d.tsx · mesh

    Loaded lazily (the only module importing three.js). The three.js 3D view: members, nodes, supports, loads, the deflected shape coloured by a result, picking and placing, the probe, the plane bar and the 3D legend

  • wire.rs · mesh

    Results packed for the window: long numeric arrays as base64 (f32 values, u32 indices), everything else unchanged; the window's unwire (ui/src/api.ts) unpacks them

  • api.ts · pipe

    Shell calls and the model's shapes in TypeScript

  • backstage.tsx · pipe

    File page: examples, recent, export, options, updates

  • bench.rs · pipe

    The verification benchmarks 1–8 (run()), with an independent plane-frame flexibility method by hand for the thermal cases; a test fails on any row over its tolerance

  • cases.rs · pipe

    Which operating cases are used; the recommended load cases (OPE1–3, SUS, EXP1–3, EXP ranges between cases, HYD); rebuild keeps ids by name

  • cmds.ts · pipe

    Every command (ribbon, menus, keys, Tell Me)

  • code.rs · pipe

    The process piping code's equations: pressure design thickness and hoop stress, minimum wall with corrosion and mill tolerance, bend and tee SIFs and flexibility (h, pressure correction), reducer SIF, sustained stress, d…

  • dialogs.tsx · pipe

    Save changes, close, recovery, shortcuts, getting started, glossary

  • doc.rs · pipe

    Edit operations (Add, Set, Delete with cascade, SetStart, Split, Renumber, Loop (expansion loop wizard), Duplicate (copy or mirror a section with its supports), SetSettings, SetMeta, SetCases, RecommendCases, Batch) on a…

  • dump.rs · pipe

    Writes tests_ui/fixture.json (the engine's real models, unit table and library) for the UI tests

  • elements.rs · pipe

    The 3D pipe element from its exact flexibility ∫ Bᵀ C B ds (axial, shear with κ = 0.5, torsion, bending with the bend's k), inverted and moved to 12×12; uniform loads and thermal growth as equivalent nodal loads; end for…

  • examples.rs · pipe

    The worked examples, built in code; table() builds a model from rows

  • geom.rs · pipe

    The analysis geometry: bends trimmed by R·tan(θ/2) into arcs (near, middle = the bend's node, far points), shared points, tees with their plane; bend radii from NPS; sent to the window for the 3D view

  • hardening.rs · pipe

    FAMILY §11: failed edits change nothing, random models keep their rules and round-trip, damaged files, speed gate

  • help.tsx · pipe

    The ? cards

  • iso.rs · pipe

    The isometric: the 30° projection (x = (X − Z) cos 30°, y = (X + Z) sin 30° − Y), lines per segment (arcs sampled), node labels, a dimension per element offset away from the middle, symbols for supports, nozzles and tees…

  • iso.tsx · pipe

    The isometric view: each sheet as SVG (symbols, dimensions in mm or ft-in, north arrow, continuation notes, stress ratio and support load tags), sheet tabs, Save as SVG, and the sheets in the printed report

  • library.rs · pipe

    Pipe sizes ½"–24" and schedules (ASME B36.10M/B36.19M dimensions); five materials (carbon, 1¼Cr-½Mo, 304, 316, duplex 2205) with E and α against temperature and typical allowables min(Su/3, 2Sy/3), with sources; interp

  • main.rs · pipe

    Commands: state, apply, history, examples, new model, library, unit table, open/save, save file, options, recovery, recent, startup file, open_url, version, updates

  • main.tsx · pipe

    Window layout (3D view, element table, Inspector; Results, Isometric, Report views), sidebar, status bar, keys, start-up and recovery

  • mat.rs · pipe

    3-vectors, 6×6 matrices (inverse, move a force to another point), local axes of a pipe, 4-point Gauss

  • model.rs · pipe

    The model: nodes (number and position), elements (From, To, DX/DY/DZ, pipe, material, line conditions, component, extra load), pipes, materials (tables against temperature), line conditions (T1–T3, P1–P3, hydrotest), sup…

  • panels.tsx · pipe

    The Inspector: element, node (supports, nozzle, loads), support (direction, stiffness, imposed displacements), nozzle (axis, allowables), load, model (title block, analysis settings)

  • PLAN-0.1.md · pipe

    The plan, the public summary and roadmap, the change log

  • print.tsx · pipe

    Print (Plan's page: paper, header and footer codes, preview, the report flowed over pages); the stress report's blocks and the Report view

  • props.tsx · pipe

    Pipes, materials (tables), line conditions and load cases dialogs

  • realapp.sh · pipe

    Screenshots of the real app under Xvfb

  • ribbon.tsx · pipe

    Title bar, quick access, Tell Me, the ribbon (Home, Model, Loads, Supports, Analyze, Results, Isometric, View, Help, contextual Component); planned tools dimmed with their release

  • roadmap.tsx · pipe

    File › Roadmap from docs/site.json

  • rstate.ts · pipe

    Results state (last analysis, out of date, case shown, colour and deformation options) and Analyze; the Results tab and view (summary, code stresses, displacements, forces, support loads, nozzle loads, minimum wall, equi…

  • run.cjs · pipe

    UI checks of the built window with a mocked bridge

  • screens.cjs · pipe

    The four README and site screenshots (1440×900) from the built window with the engine's real results

  • solve.rs · pipe

    The analysis: parts (sections, weights, strains, SIFs), assembly, supports (rigid axis-aligned ones held exactly with imposed displacements as prescribed values; skewed or flexible ones as springs), basic loads, every ca…

  • sparse.rs · pipe

    Mesh's sparse solver: triplets, faer Cholesky, probe solve for mechanisms, iterative refinement, residual; solve_many (every load case with one factorisation, prescribed values per case)

  • store.ts · pipe

    Window state: the model (out().m), the selection (element, node, support, nozzle, load), views, menus, dialogs

  • styles.css · pipe

    Plan's styles (moss accent) and components; the icon sprite

  • summary.rs · pipe

    Every example's worst ratios, imbalances, nozzle ratios and reactions, for tuning examples by hand

  • table.tsx · pipe

    The element table: editable rows, the new row that adds an element, keyboard moves, component choices

  • tools.tsx · pipe

    The expansion loop wizard (with a picture to scale) and copy or mirror a section of table rows

  • units.rs · pipe

    Calc's unit table (NIST SP 811) with unit expressions and the display table for SI and US

  • units.ts · pipe

    Applies the engine's display table

  • update.rs · pipe

    The updater (Plan's, REPO = Datum-Pipe)

  • verify.rs · pipe

    Writes the verification record (docs/verification/x.y.z.md)

  • view3d.tsx · pipe

    The 3D view (three.js): pipes at true diameter from the engine's geometry, arcs, insulation, components, support and nozzle symbols, node labels, picking, standard views, fit, stress-ratio colours and legend, the deforme…

  • worked.rs · pipe

    Hand-worked cases for every component and support kind (spring, settlement, guide, line stop, rest, skewed restraint, valve weight, constant support, reducer taper and SIF, tee SIF, nozzle axes, liberal allowable and f)

  • · plan

    mspdi.rs, xer.rs, table.rs (CSV/XLSX in with mapping; out with chosen columns), formats.rs (JSON, HTML, ICS, MPX, PMXML out), xml.rs. JSON/dplan import.

  • · plan

    bench.rs (20k-task timing), dump.rs (JSON fixtures for UI tests).

  • · plan

    datum-cli: info, schedule, ops, apply, export, risk, lookahead, new, templates, and mcp (Model Context Protocol over stdio: open_plan, new_plan, get_schedule, list_operations, apply_operation, undo, schedule_risk, lookah…

  • api.ts · plan

    Types matching the Rust JSON, invoke, date and money helpers.

  • cal.rs · plan

    WorkCal: working-time arithmetic.

  • cases.rs · plan

    Hand-worked scheduling cases (47 cases, 90+ task dates): rows as "duration \| preds \| field=value" set through doc::set, results as "early start, early finish, float".

  • cells.ts · plan

    Shared by both grids: parseTsv/toTsv/transpose, series (Excel fill rules), clip (last copy: values + styles for Paste Special).

  • charts.tsx · plan

    Chart.js wrapper used by every chart: modern style (smooth lines, faded fill, rounded bars, light grid), status pill, hover line, resize with box and for print, empty-data text, PNG save.

  • check.rs · plan
  • cmds.ts · plan

    Command functions C and the ALL_CMDS list for Tell Me.

  • dashboards.tsx · plan

    Custom dashboards: DashTabs, CustomDashboard (12-column tile grid, edit mode, drag reorder, size menu), tile views (number, ring, chart, table, countries, text), editTile dialog, TEMPLATES; formulas evaluated in one dash…

  • deny.toml · plan

    cargo deny check: advisories, licences (MIT-compatible list), sources (crates.io + gridcraft git).

  • doc.rs · plan

    Ops (see the enum: edits, Level, Split, Interim, UpdateProject, Snapshot, ProjectSet, FieldDef, CodeDef, Risk, TaskList, ResJson, Ui, Baseline n, …), undo/redo, .dplan.

  • en.md · plan

    The Datum Plan Guide: Markdown sources (English, Simplified Chinese), screenshots, built PDFs (attached to every release as DatumPlan-Guide-en.pdf / -zh.pdf).

  • fields.rs · plan

    Field registry (task_fields, resource_fields), Calc (one scheduled plan + loads + EV), val/text/format/icon, filter test, money.

  • flags.tsx · plan

    Country flags (flag-icons SVGs, MIT, lazy assets): countryCode (code/name/alias), Flag, FlagText, CountryList.

  • fmt.ts · plan

    Text formatting: style strings b;i;u;s;c:#hex;f:#hex;z:12;a:c, css(), the focused grid registers a Target (get/set selected cells), toggle/setProp/clear, Format Painter.

  • formula.rs · plan
  • formulas.ts · plan

    Pure formula-text helpers for the editor: refs, canPoint, suggest, callAt/sigArgs, cycleAnchor (F4), ERRORS.

  • gantt.tsx · plan

    As in the diagram. styles.css holds the light theme and print styles.

  • grid.tsx · plan

    Excel-like task sheet: one scroller with sticky header and frozen ID/name, ranges (ranges signal), fill handle, TSV clipboard via copy/paste events, Cells op for range edits, AutoFilter menus, header rename (Title op), F…

  • guide_shots.cjs · plan

    Guide screenshots: the built window with dump guide (a plan in progress) behind the mocked bridge, numbered markers drawn on the page, optional clip. Home and Project Setup come from the real app (Xvfb).

  • guide.cjs · plan

    Builds the guide PDFs: small Markdown subset → HTML (cover, clickable contents, figures, tips, tables, [[keys]]) → Chromium A4 PDF with page numbers; IBM Plex + Noto Sans SC (@fontsource/noto-sans-sc, dev only). npm run …

  • hardening.rs · plan

    Hardening tests: a failed edit changes nothing, 1,000 random plans schedule with sane dates, ~3,000 damaged XML/XER/JSON files never panic, 2,000 tasks reschedule fast (debug < 400 ms; release ~3 ms).

  • help.tsx · plan

    "?" help: the HELP table ({ t, what, how?, tip? } per topic), <Help k> (the small ? button, .help), helpCard(k) (the card dialog, .helpcard). Ribbon groups take h= on G, pages help= on Page/Tools. Help › What Is This Too…

  • index.html · plan

    Root and the icon sprite (about 65 icons). ui/public/logo.svg.

  • level.rs · plan

    Serial leveling with a fixed rank; clear.

  • load.rs · plan

    Work/cost per task, assignment and day (rate tables, accruals, actuals); buckets(day/week/month/quarter).

  • main.rs · plan

    Commands listed in the diagram; options (date format, autosave, beta, default currency, company, logo, workspace, setup panel); backups of format < 3 files; recovery.

  • model.rs · plan

    File format 3: Task (also task type, effort, activity/% complete type, physical %, elapsed, splits, leveling delay, priority, fixed cost + accrual, custom values, codes, steps, notebook, expenses, docs, 11 baselines in b…

  • network.rs · plan

    Network Diagram layout (columns by logic, rows by predecessor position).

  • ops.rs · plan

    The named operations catalogue (name, what it does, example JSON); a test applies every example.

  • parity.rs · plan

    Parity files: XML/XER plans with their own dates (network.xml, network.xer, hand-made); the test reschedules and compares every task to the minute. Drop real exports from other tools in the folder.

  • parse.rs · plan

    Durations (also elapsed), dates, predecessors (also % lags), resources, quick add.

  • print.tsx · plan

    File › Print (every view; pkind() = gantt / net / cal / table / flow; Frame draws paper + header/footer/legend; vdata/vpages/ViewPage for network tiles, calendar months and tables; FlowDoc prints report pages in a table …

  • progress.rs · plan

    Progress history: credit_library, manpower (people per period by trade: planned / done / forecast), earned_schedule (ES, SPI(t), SV(t), IEAC(t)), lookahead (tasks in the next weeks + open/overdue constraints).

  • progress.tsx · plan

    Manpower and Look-ahead views, Rules of Credit dialog.

  • query.rs · plan

    Query → Grid (cols, rows with cells, icons, bar geometry), built-in filters, Summary.

  • report.rs · plan

    Usage grids, cost/EV curves, compare; reporting periods (period_ends), weighted progress S-curves (scurve: planned from baseline, actual linear from actual start to today's %, forecast), period_report (this vs previous p…

  • risk.rs · plan

    Schedule risk (Monte Carlo): SimOpts (iterations, default range −low/+high %, seed), simulate → P10/50/80/90, chance of the planned finish, finish-day histogram, cost P50/P80, criticality, drivers (correlation), risk hit…

  • risk.tsx · plan

    The Schedule Risk view (simrisk).

  • roadmap.tsx · plan

    File › Roadmap: the ROADMAP list (keep it in step with the roadmap table and "Pending and next" in this file).

  • run.cjs · plan

    Playwright UI tests against the built UI with a mocked shell and dump fixture (alignment, ranges, menus, ribbon, sidebar, every view). Runs in CI.

  • sched.rs · plan

    CPM → Sched (es/ef/ls/lf/tf/ff, edges with driving flags, longest path, float paths, calendars incl. a 24-hour one). critical() follows the options.

  • SECURITY.md · plan

    How to report a problem, what the app protects; how to build and the checks to run.

  • selection.ts · plan

    The grid engine's selection, shared by the task sheet and Sheets: createSel (ranges, active cell, pick/drag/rows/cols/all/each), aggregate (Sum/Average/Count).

  • sheet.rs · plan

    GridCraft bridge: value conversion (dates ↔ Excel serials, durations in days), [Field] translation, task_formulas (all Excel formula columns in one in-memory workbook, one row per task), book/sheet_view (Plan sheet with …

  • sheetdlg.tsx · plan

    Insert Function (search, categories) and Plan Data (live FILTER/SORT/CHOOSECOLS list of Tasks or Resources).

  • sheets.tsx · plan

    Sheet tabs, Excel-like: point-and-click references with coloured boxes, suggestions + argument hints, AutoSum, fill/paste moving formulas (formula_shift), insert/delete rows/cols (SheetInsert), number formats, column wid…

  • store.ts · plan

    Global signals, built-in tables, query(), refresh(), act(), menus, dialogs, toast, theme (applyTheme, themeTick).

  • tests.rs · plan

    Engine tests (26).

  • tools.tsx · plan

    Update Progress page, Relationship Diagram (SVG), Report Builder (sections, TEMPLATES, saved in ui.reports).

  • ui.tsx · plan

    Icon, Menu (with submenus), Dialog (optional help key puts a ? in its header), Tabs, form helpers.

  • update.rs · plan

    Updater; check(beta) reads /releases when beta is on; versions compare with pre-release tags.

  • analysis.py · plot

    Analyses: run(kind, table, sets, options) → {title, answer, tabs of formatted tables, checks, methods, legend, code, plots (small SVGs), curves (for graphs), cells (outliers)}. Kinds: describe, normality (Shapiro, D'Agos…

  • api.ts · plot

    Types matching the Rust JSON, Render, spans/width/letter/num.

  • backstage.tsx · plot

    File page: Home (samples with mini graphs, recent, updates card with engine versions), Export tiles, Options (General, Start-up and saving, New data tables, New graphs, Printing and branding, Updates), Print, Updates.

  • ci.yml · plot

    ubuntu: Python deps + unittest, check:ui, build, clippy -D warnings, cargo test, UI tests.

  • console.py · plot

    Console and notebook (H1, H5): frame (a table as a DataFrame: X, then sets; replicates Name 1…, msn Name mean/SD/N), Tables (lazy mapping), to_table (new_table → engine JSON), run (one namespace NS; last expression shown…

  • datatable.tsx · plot

    The XY or column grid (column tables hide the X column: width 0, skipped by the cursor) (selection column 0 = row title, k ≥ 1 = grid column k − 1): two-row headings by data set, typing, ranges, TSV copy/cut/paste (→ Pas…

  • dialogs.tsx · plot
  • doc.rs · plot

    Op: NewTable, Delete, Rename, Duplicate, Cells (col −1 = row title), Import (rows → new table + graph; titles from the first row; sets of reps), AddAnalysis (overlay → drawn on the table's graphs, joining lines off), Set…

  • dump.rs · plot

    Fixture for the UI tests.

  • features.ts · plot

    The feature catalogue in the app (99 entries: id, name, release, description, library), VERSION_NOW, RELEASES, AREAS, ready(). Mirrors PLAN-0.2 §4 with the §10 order; update it when a feature ships.

  • files.py · plot

    atomic(path) (temp file beside the target, fsync, os.replace, cleanup on failure), write_bytes, safe_text (CSV text starting = + - @ gets '). Every export goes through it.

  • format.tsx · plot

    Format Graph (docked right, changes apply at once): Data Sets, X Axis, Y Axis, Graph; SIZES (journal widths), FONTS, ERRORS, OKABE_ITO.

  • graph.py · plot
  • graph.tsx · plot

    useRender, GraphView (zoom, crosshair, hover values, double-click → Format Graph page, context menu, Ctrl+C), copyGraph (PNG to the clipboard), exportGraph dialog, newGraph.

  • groups.py · plot

    Compare groups (B4–B8, B16, B23): column (values by row, for pairing), summary (values, or entered mean/SD/N), pairs_of; ttest (unpaired Welch/Student from stats, paired, ratio, one-sample; effect sizes; Shapiro and Brow…

  • hardening.rs · plot

    FAMILY §11 tests (0.3.0): invariants (unique ids < next_id < ID_LIMIT, table shapes, setting ranges, links), random hostile documents (300, with a save/load round trip), random edit sequences with full undo, damaged file…

  • help.tsx · plot

    "?" help: the HELP table ({ t, what, how?, tip? } per topic), <Help k> (the small ? button, .help), helpCard(k) (the card dialog, .helpcard). Ribbon groups take h= on G, navigator heads h= on Head, dialogs and galleries …

  • imports.py · plot

    Import (A13, A14): read_pzfx (namespace-free ElementTree: Table/HugeTable, TableType → kind, YFormat → entry, X/Y columns and subcolumns, Excluded="1", row titles), plates (96/384 blocks → grouped tables), numeric_table,…

  • index.html · plot

    Root and the icon sprite (Plan's ~90 icons recoloured teal + Plot icons: xy, graph, sheet, results, layout, infosheet, err, axis, log, legend, symbol, image, addset, addrow, delrow, exclude, sigma, curve, size, line, fra…

  • io.py · plot

    File › Import readers: CSV/TSV/TXT (delimiter sniffing, decimal commas with ;, encodings) and XLSX (openpyxl, every sheet); all cells as text. write_excel (G6): a sheet per table (excluded values blue italic) and per res…

  • main.rs · plot

    Commands in the diagram plus result (an analysis via the Calc engine, cached), models, export_all (folder picker, every graph, unique file names), export_excel (save dialog → Python excel), new_table(kind) (column tables…

  • model.rs · plot

    Format 1. normalize, add_table, from_json (refuses newer formats).

  • models.py · plot

    The curve-fit model library (15 models: equation, first guess, description).

  • nav.tsx · plot

    Sidebar (Info first, then Data, Results, Graphs, Layouts), navigator tree with context menus, graph thumbnails (E7, View › Thumbnails, useRender per graph), Info sheet, Results and Layouts empty pages.

  • nested.py · plot

    Nested (A8, B20): subgroups (each sub-column of a group), nested (hierarchical ANOVA: groups tested against subgroups within groups; t from F for two groups; variance components from MixedLM REML with group dummies, ANOV…

  • print.tsx · plot

    File › Print: graph pages at real size or fitted, with caption; data table and Info sheet as flowing pages; header/footer codes (&[Page], &[Pages], &[Date], &[Project], &[Item], &[Title], &[Researcher], &[Company], &[Log…

  • py.rs · plot

    Finds Python (DATUM_PYTHON, the runtime pack, else python/python3); a reader thread lets requests time out (start 180 s, request 60 s → kill and report); restart(); and py/worker.py (bundled or the source tree), MPLCONFI…

  • region.py · plot

    Region tool (E5): region(table, x0, x1, y0, y1) per curve: points, mean, SD, range, area, slope, highest (worker region, shell region).

  • regress.py · plot

    Many variables (B21, B22): pca (SVD of the scaled or centred matrix, signs fixed so the largest loading is positive, Kaiser or 80 % rule, scree + biplot, scores table), cluster (Ward/average/complete linkage or k-means b…

  • release.yml · plot

    windows: runtime pack in rt/ (newest embeddable CPython 3.13 + requirements, pruned, compiled, ping smoke test) zipped to src-tauri/runtime.zip; one build with tauri.release.conf.json → DatumPlot-x.y.z-setup.exe + SHA256…

  • report.py · plot

    Slides and reports (G5): parts (each graph as 300 dpi PNG with its overlays), results, slides (python-pptx, 16:9) and word (python-docx: figures with captions, results with tables, methods). Worker report, shell export_r…

  • requirements.txt · plot

    numpy 2.5.4, scipy 1.18.1, matplotlib 3.11.2, openpyxl 3.1.5, statsmodels 0.15.0, lmfit 1.3.4 (pinned; runtime 2).

  • results.tsx · plot

    KINDS (18 kinds; third field true = curves, "brackets" = column graphs only), draws(kind, table), BY_ID (catalogue id → analysis; B14s = smoothing), "New table from result", analysisDialog (data sets + options per kind; …

  • ribbon.tsx · plot

    Title bar, Tell Me, ribbon: Data · Analyze · Graph · Layout · Tools · View · Help + contextual Graph Tools › Format; Plan's B/G/S, Font group and fitRibbon; N = a planned command (dimmed, amber dot, opens soon(id)).

  • roadmap.tsx · plot

    soon(id) card for planned commands, RoadmapPage (File › Roadmap, Help › Roadmap), galleries newTable, analyze, graphTypes (categories · items · details), importFile dialog (sheet, headings, X column, replicates guessed f…

  • run.cjs · plot

    Playwright: 54 checks (0.2.2 adds: global fit and second model in Curve Fit, Tensile Test op, Test Chooser → ANOVA → no brackets on XY, Sort op, New Table › Column, Styles › Nature, Colour Schemes preview and palette op,…

  • runtime.rs · plot

    The Python runtime pack: %LOCALAPPDATA%/com.edgarmendonca.datumplot/runtime/N (N = py/runtime.txt); unpacked from resources/runtime.zip (in every installer); unzips with progress (engine status event), removes older runt…

  • runtime.txt · plot

    The runtime pack number: bump it whenever py/requirements.txt changes, so installed apps download the new pack.

  • selection.ts · plot

    Copied from Datum Plan (grid engine, TSV and series, formatting, building blocks; Dialog has a docked side mode).

  • sheet.py · plot

    Worksheets and formulas (A9, A11): evaluate (AST-checked formula: names A, B… (row means), X, i, col("title"), numbers made float, text only inside col(); FUNCS whitelist; results rounded to 15 significant digits), recal…

  • signal.py · plot

    Peaks and signals (B24, B25): baseline (none/min/line/poly: polynomial refitted to the points within the noise of the fit), peaks (detection on a Savitzky-Golay copy, heights/FWHM/areas on the data, areas split at valley…

  • smoke.py · plot

    Engine smoke test (CI): cargo run -p datum-core --example dump all → every template through the real worker: analyses, every graph type on every table, every export format, layouts, xlsx/ipynb/console, slides and report …

  • stats.py · plot

    set_columns, value, describe (n, mean, SD, SEM, CI via scipy.stats.t), from_summary, summarize.

  • store.ts · plot

    Signals: out, item {section, id}, backstage, tab, navOpen, engine, options, theme; act, call, loadOut, open; menus, dialogs, toasts.

  • surface.py · plot

    Surface fits (B26): points3 (a matrix grid, or X, Y, Z from three data sets), design/TERMS (plane, quad, cubic by statsmodels OLS; the quadratic's stationary point and its kind from the Hessian), gauss2d (curve_fit), sur…

  • survival.py · plot

    Survival (A5, B19, D9): subjects (time in X, 1/0 in the group's column), km (Kaplan-Meier with Greenwood log CIs; upper limit NaN once S = 0, as R), median (R's rule, incl. CI limits), logrank (k groups, O−E with the var…

  • tauri.conf.json · plot

    Bundles py/worker.py and py/datum/*.py; the release config adds runtime.zip.

  • templates.rs · plot

    Blank XY, Growth curve, Standard curve (mean/SD/N), Dose-response (log X), Tensile test (modulus fit 0–0.003 + tensile analysis), Arrhenius (activation energy, log Y), Compare groups (column table, ANOVA + Tukey brackets…

  • test_analysis.py · plot

    Linear regression vs R lm() on Anscombe's data; NIST StRD Misra1a; model recovery for 6 library models; fixed parameters; Arrhenius Ea; describe; Shapiro vs R; Grubbs cells; compare lines; interpolation; Deming; replicat…

  • test_engine.py · plot

    Statistics vs R, exclusions, mean/SD/N entry, renders, log axes, every export format, the worker protocol.

  • test_groups.py · plot

    0.2.2 analyses vs R: Welch/Student/paired t (sleep), from mean/SD/N, Mann-Whitney, Wilcoxon, Kruskal-Wallis, ANOVA + Tukey (PlantGrowth), every ANOVA variant, Pearson CI (Anscombe), power.t.test; transforms, AUC, derivat…

  • test_hardening.py · plot

    Damaged files for every reader, the worker answering bad requests and continuing, xlsx without live formulas, atomic exports, random tables through every analysis and graph.

  • thermal.py · plot

    Materials curves (B30, B31): dsc (peaks above a line/poly baseline found on a smoothed copy; onset/endset from the steepest tangents meeting the baseline; area; ΔH = area ÷ (rate/60)), tga (DTG peaks; onset/end from the …

  • tools.py · plot

    Data tools and materials (A15, A18, D4, B14, B27, B29): transform (X/Y functions, baseline, normalise, replicates → mean/SD/N), check, frequency (common bins, histogram/QQ/ECDF plots), auc (trapezoid, baselines incl. a s…

  • tools.tsx · plot

    Sort, Find (Ctrl+F; goto signal selects the cell), Exclude Rows by a rule, Test Chooser (questions → kind + preset), Statistics Guide, STYLES + applyStyle/saveStyle/styleMenu (D13), PALETTES + colour-blind preview (Macha…

  • update.rs · plot

    Datum Plan's updater with REPO = Edgar-Mendonca/Datum-Plot; downloads the release's -setup.exe; download() (progress + SHA-256).

  • worker.py · plot

    The protocol loop: warm-up render, {"ready": true}, then one answer line per request; stdout reserved for the protocol.

  • api.rs · schema

    What the shell's commands return (derived: the sheet's view, issues, hydraulics, runs, numbers; library), shared with the test server

  • backstage.tsx · schema

    File page (examples, export, options with the check rules and limits, updates), print (sheets at size or A3, lists, legend; the SVG writer), roadmap

  • bench.rs · schema

    Where the time goes on a 500-symbol sheet

  • canvas.tsx · schema

    The drawing canvas (from Sim's): pan, zoom, snap, marquee, move, draw lines from ports, drag segments and ends, drop symbols (in-line ones into lines), the symbol sprite, primitives

  • cause.rs · schema

    Cause and effect: matrix (each interlock symbol: the items signalled to it, effects = valves, drives, equipment, final elements; the rest are causes; a switch wired straight to a final element is its own group, cell "X")…

  • classes.json · schema

    The class library (83 classes, DEXPI-style names, inheritance from PlantItem, symbols, prefixes, attributes with quantity, type, choices, DEXPI name, required) and its reader: attrs(project, class) merges inherited, own …

  • datasheets.rs · schema

    Datasheets: per instrument, primary element, control valve and relief device; General, Process conditions (from process_source: its line, a primary element it is tapped to, the equipment it is mounted on, else its loop's…

  • dexpi.rs · schema

    DEXPI (Proteus XML) import (read: element tree with limits, units and fit-to-sheet, symbols from DatumSchemaSymbol, the class or a stand-in, nozzles matched by position, segments as pieces From → components → To, branche…

  • doc.rs · schema

    The history (Change: who, when, what, object, old, new; recorded by diffing objects after every edit, undo and redo). Edit operations (NewLineObject, SetNode, AddNode, SetNode2, DeleteNode, add, set, move, rotate, mirror…

  • dxf.rs · schema

    The DXF writer (R12: layers per line type and symbol category, blocks with a TAG attribute, text, frame) and read_back for the tests

  • examples.rs · schema

    The examples built through the edit operations: pump transfer, compressor package, exchanger loop, Find the faults (tests: 0 errors and warnings; exactly the planted faults)

  • file.rs · schema

    The project file: SQLite tables (meta, nodes, objects, attributes, sheets, items, lines, notes, issues (datasheet revisions with their snapshot), history, and an object_attributes view), atomic write, table-by-table read…

  • frame.rs · schema

    The sheet frame: border, zones, title block, revision table, as primitives

  • graph.rs · schema

    Connectivity: port positions, line numbers from the format, the network (lines per port, branches), runs (one line number through in-line items and off-page pairs), walks along the piping (reach), from/to, pump suction/d…

  • hardening.rs · schema

    FAMILY §11: random projects and edits, failed edits change nothing, damaged files, hostile values, speed gate (500 symbols)

  • help.tsx · schema

    The ? cards and the rule list; dialogs (save changes, recovery, add a symbol by name, pair connectors, shortcuts, getting started, glossary)

  • hydraulics.rs · schema

    Inside diameter, velocity, Reynolds, Colebrook (or 64/Re), Δp per 100 m and over length + fittings, limits by service, status

  • import.rs · schema

    Datasheet import from Excel (calamine): read (sheets as text grids, capped), plan (match by tag; a table with a Tag header, or one datasheet per worksheet; labels by norm; units by unit_expr/quantity; kinds set, same, co…

  • inspector.tsx · schema

    The Inspector: item, line (with hydraulics), note, or the sheet and title block

  • lists.rs · schema

    The line list (one row per line number: from/to, hydraulics), equipment list, instrument index, valve list; CSV with a formula guard; Excel (rust_xlsxwriter)

  • loops.rs · schema

    Loop diagrams: all (loops of ≥ 2 members by first letter and number, relief devices left out), diagram (A3 sheet with the frame: field devices with their own symbols, JB terminal block, I/O box, control-system functions;…

  • main.rs · schema

    Commands: state, apply, history, derived, list, views, examples, new project, library, unit table, open/save, save file, export (CSV, Excel, DXF), options, recovery, recent, startup file, open_url, version, updates; guar…

  • main.tsx · schema

    Window layout (palette, sheet with its tab bar, inspector, bottom panel), status bar, keys, start-up and recovery

  • model.rs · schema

    The project: plant objects (Obj: id, uid, class, tag, hierarchy node, data; line numbers are PipingNetworkSystem objects) and the hierarchy (Node: plant › unit › area); items and line pieces are views with obj; the 0.1 J…

  • palette.tsx · schema

    The left panel: the symbol palette (categories, search, common instruments) and the Plant tab

  • panels.tsx · schema

    The bottom panel: Checks and the four lists (sort, filter, group, click to find, edit, export)

  • pipes.rs · schema

    Pipe's sizes ½"–24" and schedules (ASME B36.10M/B36.19M dimensions); inside diameters

  • PLAN-0.1.md · schema

    The plan, the public summary and roadmap, the change log

  • plant.tsx · schema

    The Plant panel: hierarchy tree with every object, drawn or not; drag to a sheet to draw, onto an area to move; add, rename, delete levels; delete objects

  • ribbon.tsx · schema

    Title bar, quick access, Tell Me, the ribbon; every command

  • route.rs · schema

    Sim's orthogonal router, extended to ports facing four directions and open ends

  • run.cjs · schema

    UI checks of the built window against the real engine (through the test server)

  • screens.cjs · schema

    The four README and site screenshots (1440×900, docs/images/)

  • serve.rs · schema

    The test server: the window and the engine behind one local HTTP port, answering the shell's commands, for the UI tests

  • store.ts · schema

    Window state: the project, the open sheet, the engine's derived data, the library, the selection, the drawing tool, layers, panel, menus, dialogs

  • styles.css · schema

    Plan's styles (magenta accent) and components; the icon sprite

  • symbols.rs · schema

    The symbol library (about 80 of our own drawings in a small drawing language: polylines, outlines, fills, dashes, circles, arcs, ellipses, rectangles, text), ports with directions, categories, tag prefixes, in-line and t…

  • tags.rs · schema

    Tags: split, next free per prefix and sheet, copies (P-101A → P-101B), renumber, duplicates, ISA-5.1 letters, controllers, measurements, final elements

  • tests.rs) · schema

    The 13 checks, one function per rule, each issue with level, reason, ids and place; a passing and a failing test per rule

  • units.rs · schema

    Calc's unit table (NIST SP 811) with unit expressions and Schema's display table

  • update.rs · schema

    The updater (Plan's, REPO = Datum-Schema)

  • view.rs · schema

    What the window draws for a sheet: items with ports and upright texts (tags, instrument letters and loop numbers, fail positions, connector partners), lines (route, pieces with hops, arrows or signal marks, line number, …

  • 2026-10-27.md · sim

    Verification records: 0.1.0 (solvers, blocks), 0.1.2 (motors and drives), 0.1.4 (discrete control, motor extras, power balance): what was checked, numbers, what was not

  • api.ts · sim

    Shell calls and the shapes they return

  • backstage.tsx · sim

    File page: examples, recent, export, options, updates

  • blocks.rs · sim

    The block library: names, categories, parameters with units and hints, help text, sizes, ports, port names and positions, labels, typical ratings (from motors.rs); planned blocks

  • canvas.tsx · sim

    The block editor: drawing, select, move, resize, wire, bend, pan/zoom, minimap, quick insert, context menu, keys

  • cmds.ts · sim

    Every command (ribbon, menus, keys, Tell Me); run events

  • compile.rs · sim

    Flatten, parameters, widths, sorting, signal layout, logged channels; the run loop; CSV; decimation; the linear model of one block for analysis

  • dialogs.tsx · sim

    Variables page, Issues page, sweep, analyses, step specifications, help pages, recovery

  • discrete.rs · sim

    Discrete blocks (0.1.4): discrete TF and state space, discrete integrator (3 methods, limits, reset), discrete PID (filtered D, clamping/back-calculation); square, triangle, chirp, repeating-sequence sources. Discrete bl…

  • doc.rs · sim

    Edit operations (add, move, resize, set parameter, rename, flip, delete, connect, bend points, paste, group into a subsystem, ungroup, variables, settings, batch) with snapshot undo; copy

  • dump.rs · sim

    Writes tests_ui/fixture.json (the engine's real output) for the UI tests

  • examples.rs · sim

    The worked examples, built in code

  • expr.rs · sim

    Our expression parser: numbers, variables, + − * / ^, comparisons, functions, matrices [1 2; 3 4]; fast slot evaluation for the Function block

  • hardening.rs · sim

    FAMILY §11: failed edits, random models, damaged files, speed gate

  • help.tsx · sim

    The ? cards; block cards come from the library

  • linalg.rs · sim

    Dense LU with pivoting (for the stiff solver)

  • main.rs · sim

    Commands: state, library, diagram, apply, history, copy/paste, examples, check, open/save, run/control, results/series, sweep, CSV, analysis, options, recovery, recent, updates

  • main.tsx · sim

    Window layout, sidebar, status bar, keys, start-up and recovery

  • measure.rs · sim

    Value at a time (probe, cursors) and step-response marks (10–90 % rise, peak, overshoot, 2 % settling)

  • model.rs · sim

    Model, diagrams, blocks (colour, mask), wires (name), variables, run settings; .dsim format 2 read (migrations from 1, repair of damaged files) and write

  • motors.rs · sim

    The motor library (0.1.2): DC (sep. excited, shunt, series, compound), induction (cage, double cage, wound rotor; αβ frame, flux states), PMSM3, SynRM, wound-field synchronous with dampers, BLDC, stepper; Clarke/Park, th…

  • panels.tsx · sim

    Library panel and Inspector (block parameters, or the run settings and variables)

  • PLAN-0.1.md · sim

    The plans, the public summary and roadmap, the change log

  • print.tsx · sim

    Print: diagrams (with subsystems), scopes and a results report as pages

  • py.rs · sim

    The Python engine: one worker on demand, JSON lines with ids, progress lines, per-request time limits

  • realapp.sh · sim

    Screenshots of the real app under Xvfb (xdotool steps)

  • ribbon.tsx · sim

    Title bar, quick access, Tell Me, the ribbon (Model, Simulate, Analyze, View, Help, contextual Format)

  • roadmap.tsx · sim

    File › Roadmap from docs/site.json

  • route.rs · sim

    Orthogonal wire routing on a sparse grid (bend and shared-segment penalties, user bend points)

  • rt.rs · sim

    How each block runs (about 45 kinds, including the DC motor and the d–q PMSM), transfer function → state space, roots → polynomials; hands motor and drive kinds to motors.rs

  • run.cjs · sim

    60 UI checks of the built window with a mocked bridge (the fixture also holds the induction motor start's diagram)

  • runtime.rs · sim

    Unpacks the Python runtime pack from the installer (Plot's)

  • scope.tsx · sim

    uPlot scopes (live, zoom x and y, sweep overlays, cursors A/B, step marks, compare runs, stacked plots, fixed y range, PNG, 3× PNG, SVG, CSV), XY graph, the dock, Scopes and Results pages

  • solve.rs · sim

    Euler, Heun, RK4, Dormand–Prince 5(4), Rosenbrock 2(3); the stepping loop with hits and zero-crossings; solver conformance tests

  • store.ts · sim

    Window state: model, diagram, selection, runs, results, menus, dialogs

  • styles.css · sim

    Plan's styles (orange accent) and components; the icon sprite

  • sweep.rs · sim

    Parameter sweeps on threads; values from any expression (linspace(…))

  • test_worker.py · sim

    Python tests against closed-form answers and the protocol

  • update.rs · sim

    The updater (Plan's, REPO = Datum-Sim)

  • verify.rs · sim

    Verification tests: blocks and models against closed-form answers

  • view.rs · sim

    One diagram as the window draws it: blocks with port positions, labels, parameters, colours; routed wires with signal names (notes do not block routing); find across subsystems

  • worker.py · sim

    The Python worker and the linear analyses (python-control)

Release 105
  • Atlas 0.1.0 · atlas

    The first Datum Atlas: about 100 referenced materials, property charts with family envelopes, and selection with limits and index lines.

  • Atlas 0.1.1 · atlas

    Design goals that set up the chart, the line and the limits in one pick; SI or imperial units; bar charts; a Sources page; ? help beside the tools; and the first values checked against published datasheets.

  • Atlas 0.2.0 · atlas

    The big update: sturdier files, several selections and weighted ranking, a library of performance indices and your own formulas, compare and a selection report, about 250 materials, and your own databases with spreadshee…

  • Atlas 0.2.1 · atlas

    The publisher name for the whole Datum family.

  • Calc 0.1.0 · calc

    The first release of Datum Calc: the window, the calc sheet, saving and opening, printing, and updates from day one.

  • Calc 0.1.1 · calc

    The engine arrives: every equation is worked out with its units, shown as maths, and checked.

  • Calc 0.1.2 · calc

    Tables, pictures and the list of every unit; a fix for gravity after a unit.

  • Calc 0.1.3 · calc

    Ten ready calc packs, notes on every line, copying results and CSV export: the convention build.

  • Calc 0.1.4 · calc

    A Getting Started sheet, inputs that keep their units, clearer numbers, and calc packs that convert to US units.

  • Calc 0.1.5 · calc

    A bigger release: equations shown with their numbers, three more calc packs, a list of every check, and a round of hardening that found and fixed four ways the engine could fail.

  • Calc 0.1.6 · calc

    Safer saving, three more calc packs, a summary of checks on the printed sheet, figures per sheet, Duplicate and Insert Above.

  • Calc 0.1.7 · calc

    Windows now lists the publisher as Datum.

  • Calc 0.1.8 · calc

    What visitors asked for: complex numbers for AC circuits, and torque in N·m.

  • Mesh 0.1.0 · mesh

    The first version: the Datum Mesh window, the drawing canvas, and models that save and open. Solving arrives in the next releases: frames and trusses in 0.1.1, parts in 0.1.2.

  • Mesh 0.1.1 · mesh

    Frames and trusses solve: press Solve (F5) and see the deflected shape, the moment, shear and axial diagrams, the reactions and the equilibrium check.

  • Mesh 0.1.2 · mesh

    A fixes release: thirteen problems found by reviewing and using 0.1.1, each now covered by a test.

  • Mesh 0.1.3 · mesh

    Parts are meshed and solved: plane stress, plane strain and steady heat conduction, with stress and temperature contours, a probe, the deformed shape, a materials library and a printed results report. Help › Verification…

  • Mesh 0.1.4 · mesh

    Polish: large parts open faster, a pin load for lugs and clevises, members joined where they cross when you ask, and the small problems left over from the 0.1.1 review.

  • Mesh 0.2.0 · mesh

    Thermal stress: parts and frames that are warmed or cooled push on what holds them. The first release on the way to 3D (see the roadmap).

  • Mesh 0.2.1 · mesh

    Axisymmetric solids: pressure vessels, shafts, discs and nozzles solved from their half-section.

  • Mesh 0.2.2 · mesh

    Natural frequencies: how frames and parts vibrate on their own.

  • Mesh 0.2.3 · mesh

    Buckling of frames: how far the loads can grow before a frame buckles.

  • Mesh 0.2.4 · mesh

    3D frames: frames and trusses in space, drawn on planes and seen in 3D.

  • Mesh 0.2.5 · mesh

    Windows now lists the publisher as Datum.

  • Mesh 0.2.6 · mesh

    3D frames vibrate and buckle; the app starts lighter and keeps to size and speed budgets.

  • Mesh 0.3.0 · mesh

    3D solids: a part's outline extruded by its thickness and solved in 3D.

  • Mesh 0.3.1 · mesh

    Sketch tools: shape a part's section with rounds, bevels, cut-outs and patterns before it is solved.

  • Pipe 0.1.0 · pipe

    The first release of Datum Pipe: the window, the element table and the model file.

  • Pipe 0.1.1 · pipe

    The solver and the 3D view: Datum Pipe now analyzes the piping.

  • Pipe 0.1.2 · pipe

    Every component checked by hand, four more worked examples, the isometric drawing, and the results in the stress report.

  • Pipe 0.1.3 · pipe

    Editing tools, smoother typing in the table, and a tidier report and isometric.

  • Pipe 0.1.4 · pipe

    Polish: the build to start with. Every example analyzes, draws its isometric and prints its report.

  • Pipe 0.1.5 · pipe

    Code check fixes, and where every equation comes from.

  • Pipe 0.1.6 · pipe

    Windows now lists the publisher as Datum.

  • Pipe 0.1.7 · pipe

    One-way rests and gaps.

  • Pipe 0.1.8 · pipe

    Friction at rests and guides.

  • Plan 0.1.0 · plan

    The first version: the application shell, the scheduling engine and automatic updates.

  • Plan 0.1.1 · plan

    A lighter look, a view sidebar, templates, a Gantt chart you can drag, and progress reporting.

  • Plan 0.2.0 · plan
  • Plan 0.3.0 · plan

    Everything planned for 0.2.1 to 0.5.2 is in this one release, including the network diagram.

  • Plan 0.3.1 · plan

    A rebuilt foundation: a real spreadsheet grid, Excel formulas, period reporting and a cleaner look.

  • Plan 0.3.10 · plan

    Roadmap on the File page (a Home tile and a sidebar item): everything Datum Plan will do next and when, with links to suggest a feature or report an issue.

  • Plan 0.3.11 · plan

    Sturdier: new automatic checks found and fixed two ways a damaged file could stop the app, and two small bugs are gone.

  • Plan 0.3.12 · plan

    Trust in the dates: the scheduling engine is now checked against worked examples, plan files that carry their own dates, and thousands of random plans. The checks found two scheduling mistakes, now fixed.

  • Plan 0.3.2 · plan

    Progress updating, a report builder and power tools, plus the fixes from your 0.3.1 screenshots.

  • Plan 0.3.8 · plan

    Printed Gantt charts now show the links between tasks (Finish-to-Start and the other types), as on screen. Critical links are drawn in red.

  • Plan 0.3.9 · plan

    A small "?" beside the tools: click it to see what the tool is for and how to use it.

  • Plan 0.4.0 · plan

    Risk and resources: see how likely your finish date is, see the workload of each trade, preview levelling, and get a report on every import.

  • Plan 0.4.1 · plan

    Progress history: the actual S-curve follows what really happened at each period close, and new tools for the weeks ahead.

  • Plan 0.4.2 · plan

    Stronger and safer, with a command line for scripts and AI assistants, and every report view printable.

  • Plan 0.4.3 · plan

    Windows now lists the publisher as Datum.

  • Plan 0.4.4 · plan

    The Datum Plan Guide: a step-by-step guide with pictures, in English and Simplified Chinese.

  • Plan 0.5.0 · plan

    Sheets that work like Excel and read the plan live: your own reports and vendor lists inside the plan file, with nothing copied by hand.

  • Plan 0.5.1 · plan

    Two fixes.

  • Plan 0.5.2 · plan

    Better-looking charts that are never cut off.

  • Plan 0.5.3 · plan

    Your own dashboards: build the board your client or manager wants, inside the plan, always up to date.

  • Plot 0.1.0 · plot

    The first version of Datum Plot: the application, automatic updates, an XY data table and publication-quality graphs drawn by a built-in Python engine.

  • Plot 0.1.1 · plot

    Copy Picture works, updates are small, data import, and the whole app laid out: every planned feature has its place and says when it arrives.

  • Plot 0.2.0 · plot

    Statistics, linear regression and curve fitting, with results that stay linked to your data and explain themselves.

  • Plot 0.2.1 · plot

    A small "?" beside the tools: click it to see what the tool is for and how to use it.

  • Plot 0.2.10 · plot

    Your requests: new tables open at once, data sets are easy to remove, Significance lets you pick the test, and gaps work on the X axis too.

  • Plot 0.2.11 · plot

    Page layouts: several graphs on one page with panel letters, at a journal's size, exported as one file.

  • Plot 0.2.12 · plot

    Multi-panel figures: lined-up axes, stacked panels sharing one X axis, and insets.

  • Plot 0.2.13 · plot

    Security: updated the library that unpacks the Python engine.

  • Plot 0.2.14 · plot

    Many variables: a table with one row per sample, and multiple, logistic and Poisson regression.

  • Plot 0.2.15 · plot

    Patterns in many variables: principal component analysis and clustering.

  • Plot 0.2.16 · plot

    Survival: time-to-event tables, Kaplan-Meier curves, the log-rank test and hazard ratios.

  • Plot 0.2.17 · plot

    Nested data: subgroups within groups, the nested t-test and the nested one-way ANOVA.

  • Plot 0.2.18 · plot

    Peaks and signals: find and fit peaks, Fourier spectra and filters.

  • Plot 0.2.19 · plot

    Thermal analysis (DSC and TGA) and fatigue S–N curves.

  • Plot 0.2.2 · plot

    A big update: comparing groups, materials testing, data tools, graph styles and exporting everything at once (28 features).

  • Plot 0.2.20 · plot

    Worksheets with free columns, and column formulas.

  • Plot 0.2.21 · plot

    Testers' requests (axis breaks on column graphs, wider columns, empty columns left alone), and matrices with contour maps, 3D surfaces, polar graphs and surface fits.

  • Plot 0.2.22 · plot

    Large data, region statistics, importing projects, plates and many runs, and slides, reports and posters.

  • Plot 0.2.23 · plot

    The Python console, your own analyses, templates, batch processing and notebooks; and a full security, robustness and hardening review.

  • Plot 0.2.3 · plot

    Two factors at once: grouped tables, two-way ANOVA and grouped graphs.

  • Plot 0.2.4 · plot

    Counts: contingency tables with the chi-square and Fisher's exact tests.

  • Plot 0.2.5 · plot

    Parts of a whole: pie and donut charts, and each part as a percentage.

  • Plot 0.2.6 · plot

    Do two methods agree, and how good is a test: Bland-Altman and ROC curves.

  • Plot 0.2.7 · plot

    Axis breaks and a second Y axis.

  • Plot 0.2.8 · plot

    Notes on graphs: text, arrows, lines and boxes.

  • Plot 0.2.9 · plot

    Work directly on the graph: move notes, zoom and pan, exclude points.

  • Plot 0.3.0 · plot

    A full check of the whole application: security, robustness, reliability and speed. No new features; everything that was there works more safely.

  • Plot 0.3.1 · plot

    The family publisher name.

  • Schema 0.1.0 · schema

    The first release: the window, the sheet, symbols and lines, and the updater.

  • Schema 0.1.1 · schema

    The drawing now checks itself, lists itself and sizes its lines; the examples, printing and DXF.

  • Schema 0.1.10 · schema

    Datasheets from Excel, your company's datasheet form, and loop diagrams.

  • Schema 0.1.11 · schema

    Drawing fixes, the cause-and-effect matrix, the DEXPI exchange format, and loop diagrams in DXF.

  • Schema 0.1.12 · schema

    Tell Me shows the drawing behind it, DEXPI import, a check valve's direction, bend points kept, the logo in Excel.

  • Schema 0.1.2 · schema

    Fast with big drawings; hydraulic badges in colour.

  • Schema 0.1.3 · schema

    Fixes from an independent review of the engine, and polish.

  • Schema 0.1.4 · schema

    The exhibition build.

  • Schema 0.1.5 · schema

    The first step to an object-based plant engineering tool: plant objects, a database file and a history.

  • Schema 0.1.6 · schema

    Classes: every kind of object is defined by data, and you can add your own attributes.

  • Schema 0.1.7 · schema

    The Plant panel: every object in its place in the plant, drawn or not.

  • Schema 0.1.8 · schema

    Instrument datasheets, made from the drawing.

  • Schema 0.1.9 · schema

    Datasheet revisions: issue, track what changed, issue again.

  • Sim 0.1.0 · sim

    The first version: draw a model as blocks and wires, press Run and watch the scopes.

  • Sim 0.1.1 · sim

    Dragging blocks from the library works on Windows, and small fixes from first use.

  • Sim 0.1.2 · sim

    The motor library: DC, induction and synchronous motors, BLDC and stepper motors, and the pieces of a drive.

  • Sim 0.1.3 · sim

    Windows now lists the publisher as Datum.

  • Sim 0.1.4 · sim

    Discrete control: controllers that run at a sample time, as in a microcontroller, and more motor and drive blocks.

  • Sim 0.1.5 · sim

    Scopes you can measure with, and a probe that reads any wire.

  • Sim 0.1.6 · sim

    Wires and the diagram: easier to draw, read and find your way in.

  • Sim 0.2.0 · sim

    Reusable models: masks and My blocks.

Planned 37
  • 0.3.0 Eco and process · atlas

    Energy and CO₂ across a product's life, and greener substitutes. Choose manufacturing processes alongside materials.

  • 1.0.0 Stable · atlas

    About 1,000 materials, a user guide and a signed installer.

  • 0.1.9 Fixes from the convention · calc

    Fixes from trying every pack on a clean Windows PC What visitors ask for at the convention

  • 0.2 Materials and more packs · calc

    Material properties from Datum Atlas More calc packs Symbolic simplify

  • 0.3 Matrices and ODEs · calc

    Matrices and linear systems Solve ordinary differential equations Tables from CSV

  • 0.4 Programs and templates · calc

    Loops and conditions inside a region Sheet templates A company title block

  • 1.0 Validation · calc

    A validation report: every pack against its reference A user guide A signed installer

  • 0.3.2–0.3.4 3D solids, continued · mesh

    Revolved solids (shafts, hubs, vessels) with symmetry faces; verified on NAFEMS LE10 A cutting plane through the part and picking faces in the 3D view Heat conduction and natural frequencies of 3D solids DXF import of se…

  • 0.4 Any 3D part, and beyond linear · mesh

    STEP import of any 3D part, meshed with an open mesher that comes in the installer Yielding, large deflection and contact

  • 0.5 Flow · mesh

    Incompressible flow and conjugate heat transfer with open CFD solvers

  • 1.0 Validated · mesh

    A validation report covering every analysis type User guide Signed installer

  • 0.1.10 Spring hangers · pipe

    Spring hanger selection from hot load, travel and load variation Spring data entered by you (rate, range), with typical values

  • 0.1.11 Import and benchmarks · pipe

    Import of plain-text piping component files from design tools The public piping benchmark problems published by nuclear regulators in Help › Verification

  • 0.1.5 Code check fixes · pipe

    Minimum wall: the t < D/6 limit and the bend thickness factor Reducers checked at both ends Tee stress factors with the effective branch section modulus Pressure elongation of straight pipe Two supports holding one direc…

  • 0.1.7 One-way rests and gaps · pipe

    Rests that lift off (iterative solve until every support's state settles) Gaps on guides and line stops Results show which supports lifted off or closed Benchmarks for lift-off and a closing gap

  • 0.1.8 Friction · pipe

    Friction at rests and guides Equilibrium check including friction forces A friction benchmark

  • 0.1.9 Wind and seismic · pipe

    Wind loads (pressure on the projected area) Static seismic loads (g-factors) Occasional load cases and the occasional stress check

  • 0.2.0 Nonlinear supports and more loads, complete · pipe

    Everything in 0.1.5–0.1.11 reviewed, with the verification record and examples updated No new features: 0.2.0 marks the stage as finished

  • 0.3 Equipment and flanges · pipe

    Nozzle checks to the published pump, compressor and steam turbine standards Flange leakage check Local stresses at vessel nozzles Relief valve thrust Broken into small 0.x.y steps before it starts

  • 0.4 Dynamics · pipe

    Natural frequencies and mode shapes Harmonic response Response spectrum Broken into small 0.x.y steps before it starts

  • 0.5 More codes · pipe

    Power piping and European piping code equations Buried pipe Cold spring Broken into small 0.x.y steps before it starts

  • 1.0 Validated · pipe

    A validation report covering every analysis type A user guide A signed installer Broken into small 0.x.y steps before it starts

  • 0.5 Schedule quality and scenarios · plan

    A schedule health score with its trend; baseline compare with ghost bars; a log of logic changes; a milestone trend chart. What-if scenarios: branch a plan, change it, compare side by side, keep or discard. Delay analysi…

  • 0.6 Portfolio and hardening · plan

    Master plans with subprojects, one resource pool shared by several plans, links between projects, a portfolio dashboard. Smooth with 100,000 tasks; a signed installer (no Windows warning); crash reports. Exchange files c…

  • 0.7 Working together · plan

    Shared plans in a shared folder, with check-out per WBS so no one overwrites anyone. Comments on tasks, an audit trail, progress updates from a phone.

  • 1.0 Stable · plan

    Text styles by task type, saved custom views, a user guide, a frozen file format.

  • 1.0.0 Stable · plot

    Signed installer Validation report against reference values User guide

  • 0.2 Exchange and links · schema

    Send a line to Datum Pipe as a stress model Send a loop to Datum Sim (pump, valve, tank, controller) as a dynamic model DXF import of an old drawing as a background

  • 0.3 Process flow diagrams · schema

    Stream tables (flow, pressure, temperature, composition per stream) Heat and mass balance checks Revision clouds and comparing revisions

  • 0.4 Instrument documents · schema

    Instrument index reports and loop checks

  • 0.5 Company templates and review · schema

    Company symbol and title-block templates Project-wide reports (valve and fitting take-off) Review comments from several people

  • 1.0 Version 1 · schema

    User guide A validation note for the hydraulics Signed installer

  • 0.3 Control design · sim

    Operating points and linearisation of whole models Nyquist and root locus PID auto-tuning Live tuning while the model runs Buses Solving algebraic loops

  • 0.4 Physical components · sim

    Mechanical, rotational, electrical, hydraulic and thermal components you connect by ports

  • 0.5 Exchange · sim

    FMU import and export (FMI standard) Modelica models through an external compiler

  • 0.6 Studies · sim

    State machines Python blocks Monte Carlo and sensitivity analysis Fitting model parameters to measured data

  • 1.0 Validated · sim

    Validation suite and report User guide Signed installer

Future app (bucket list) 17
  • Datum Calc

    (Released, in apps.json since session 14.) Engineering calculation sheets with real units, shown as readable maths, with checks (pass/fail), solve and plot regions, calc packs in the user's field (pumps, pipes, compresso…

  • Datum Draft

    2D technical drawings: parametric sketches, dimensions, title blocks, DXF For: Engineers, drafters Reuses: Print Size: Large Status: Long-term

  • Datum Estimate

    Cost estimating: quantities, rates, contingency, cost curves, feeding costs into Plan For: Estimators, contractors, PMs Reuses: Grid, formulas, Plan Size: Medium Status: Later

  • Datum Flow

    Pipe pressure drop, pump and compressor sizing, performance curves, open fluid property data For: Process and mechanical engineers Reuses: Units, charts Size: Medium Status: Later

  • Datum Hub (app)

    One launcher that installs and updates every Datum app, recent files across apps, "open with" For: Everyone with more than one app Reuses: update.rs, apps.json, the brain Size: Small Status: Later (when there are more ap…

  • Datum Inspect

    Quality: inspection and test plans, measurement reports, non-conformances, control charts, Cp/Cpk, certificates as PDF For: QA/QC, suppliers, manufacturing Reuses: Plot statistics, print Size: Medium Status: Later

  • Datum Lab

    Local lab notebook: test plans, specimens, instrument data import, send results to Plot For: R&D labs, materials testing Reuses: Plot, Atlas, grid Size: Medium Status: Later

  • Datum Mesh (was Datum Field)

    (Released, in apps.json since session 14.) Finite-element analysis on the desktop, grown in steps: 0.1 2D frames, trusses, plane stress/strain and heat conduction with an own Rust solver (T6 triangles, spade meshing, fae…

  • Datum Phase

    Phase diagrams, kinetics, heat-treatment curves For: Materials scientists Reuses: Plot (Arrhenius), Atlas Size: Large Status: Long-term

  • Datum Pipe

    (Released 0.1.4, in apps.json since session 18.) Pipe stress analysis: 3D routing (element table + 3D view), pipe library, supports, operating cases, automatic load cases, the process piping code equations (hoop, minimum…

  • Datum Reliability

    Weibull and life data, reliability block diagrams, FMEA, RCM (session 15 research: no free GUI tool exists) For: Reliability, maintenance and quality engineers Reuses: Plot statistics, Plan Monte Carlo Size: Medium Statu…

  • Datum Report

    Technical reports: numbered equations, live figures from Plot/Atlas/Calc, references, PDF For: Engineers, researchers Reuses: Calc, Plot, print Size: Medium Status: Long-term

  • Datum Risk

    Risk registers, FMEA, bow-ties, shared Monte Carlo For: PMs, safety and reliability engineers Reuses: Plan, Tolerance Size: Medium Status: Long-term

  • Datum Schema (was "Flowsheet")

    Intelligent P&IDs and process flow diagrams: our own symbols (ISO 10628-2 / ISA-5.1 conventions), data on every item and line, connectivity, live checks (13 rules), line hydraulics (velocity, ΔP, limits), line list, equi…

  • Datum Signal

    Vibration and sound: FFT, filters, spectrograms, order analysis (may graduate out of Plot) For: Test engineers Reuses: Plot Size: Medium Status: Long-term

  • Datum Sim

    Model and simulate dynamic systems: block diagrams (signals), control design (linearise, Bode, root locus, PID tuning), physical components (mechanical, electrical, hydraulic, thermal), sweeps, Monte Carlo, fitting to me…

  • Datum Tolerance

    Tolerance stack-ups: worst case, RSS, Monte Carlo, datum chain, contributor ranking, GD&T helpers For: Design and manufacturing engineers Reuses: Monte Carlo (Plan 0.4), charts, print; maybe a module of Calc Size: Small …

Session 144
  • Session 1 (plan) · atlas

    · The user started Datum Atlas as the third Datum app: Violet accent, .datlas/.datdb, com.edgarmendonca.datumatlas, this repo for releases, no Python, data from public sources with a reference for every value. Asked for …

  • Session 10 (the big update) · atlas

    · The user asked for one big update instead of small splits, because Atlas is behind the other apps (Plan 0.4.1, Plot 0.2.20). · Wrote PLAN-0.2.0.md: · 28 items in 7 groups (sturdy, selection, indices and formulas, chart…

  • Session 11 (0.2.0 stage A: hardening) · atlas

    · Engine: · db::read_user: a damaged file is an error, never empty; unusable values are dropped and listed. · doc::write_atomic: saves go through a temporary file and a rename. · hardening.rs: 8 tests. · db::check refuse…

  • Session 11, continued (0.2.0 stage B: selection) · atlas

    · Engine: · Chart.sels is a list of selections (Line, Box, new Poly); a material passes a chart when it passes all of them, so facing lines make a band. Old files' select moves into sels and is never written. · Stages.ra…

  • Session 11, continued (0.2.0 stage C: indices… · atlas

    · Engine: · formula.rs: a parser on Datum Plan's pattern (+ − * / ^, brackets, sqrt ln log10 exp abs min max, properties in brackets by key, name or symbol), interval evaluation (a missing input, a division by a range ho…

  • Session 11, continued (0.2.0 stage D+E… · atlas

    · Engine: · export.rs turns the results into a table (rank, index, × best, passes, the typical value of each property the selection uses, the reasons) and writes CSV (with a byte-order mark, quoted) or .xlsx (rust_xlsxwr…

  • Session 11, continued (0.2.0 stage F, data) · atlas

    · 252 materials (+152): 105 metals, 53 polymers, 16 elastomers, 30 ceramics and glasses, 15 composites, 12 foams, 21 natural materials. · New metal classes: tool steels, precious and refractory metals. · New polymer clas…

  • Session 11, continued (0.2.0 stage F: more… · atlas

    · 22 more values checked (73 in all) against producers' and suppliers' own datasheets and NIST: · 316 (Rolled Alloys); 430 (Combined Metals, ATI); · aluminium 1100 (NIST "Properties of Wrought Aluminum Alloys", Alloys In…

  • Session 11, continued (0.2.0 stage F… · atlas

    · Engine: · sheet.rs: · reads CSV (the separator is guessed; quotes) and the first sheet of a workbook (calamine 0.37, as in Plan); · guesses each column from its heading (key, name or symbol; an imperial unit in bracket…

  • Session 11, continued (0.2.0 stage G and… · atlas

    · Help › Roadmap and the in-app release list read docs/site.json (features.ts imports it), so the site and the app say the same. · Ribbon and File stubs wired: Best 5 Labels, Style, Import, Save My Materials, Open Databa…

  • Session 12 (0.2.1: publisher) · atlas

    · bundle.publisher is now "Datum" (hub FAMILY §9, the whole family); copyright stays "© 2026 Edgar Mendonca". No other place in the repo writes the publisher name; this repo has no FAMILY.md copy. · Version 0.2.1, CHANGE…

  • Session 2 (answers, 0.1.0) · atlas

    · Answers recorded in PLAN-0.1.md §10 (see decisions). Built 0.1.0: · Engine: model, units, db (embedded data + checks), geometry (ellipses, rounded hulls, clusters), chart, select (stages, reasons, ranking, line values)…

  • Session 3 (review of 0.1.0, plan for 0.1.1) · atlas

    · The user reviewed 0.1.0 (3 screenshots). · Wants the design goal drop-down from their earlier attempt (16 goals in groups: minimum mass, cost, carbon; elastic design; damage tolerance; thermal). · Wants Home tiles Mate…

  • Session 4 (answers, 0.1.1) · atlas

    · Answers recorded in PLAN-0.1.1.md §7 (see decisions). Built 0.1.1: · Engine: goals.rs (22 goals, apply), Op::Goal, derived properties, imperial units for the new units, bar charts (bands), index names with ½ ⅓ ⅔ ², tem…

  • Session 5 (site.json) · atlas

    · Added docs/site.json (hub FAMILY §10) from the user's draft, checked against the roadmap and CHANGELOG. Corrected: not every value cites a public source (our compilation and price estimates are our own), so it now says…

  • Session 6 (wording, plan for 0.1.2) · atlas

    · Reworded "Excel" to "spreadsheet" in the README, CHANGELOG 0.1.0 and the app (Material Library tile, Browse copy toast, ? help, shortcuts, ribbon Import, Data page, roadmap features), and removed other product names fr…

  • Session 7 (site Overview) · atlas

    · Added about and steps to docs/site.json (hub FAMILY §10: the Overview of /apps/atlas) from the user's draft, checked against the app. Corrected: · not every value cites a public source, so it now says every value "name…

  • Session 8 (hardening in the plan) · atlas

    · Added hardening (hub FAMILY §11) to PLAN-0.1.2.md: · what Atlas has and lacks; · the work (§3 item 8, done first); · its size (~1,200 lines in all); · Q8: in 0.1.2 or alone first. · Found: a damaged My materials.datdb …

  • Session 9 (answer Q8) · atlas

    · The user: hardening goes into 0.1.2 together with the new features (PLAN-0.1.2 §7). Questions 1–7 are still open.

  • Session 1 (plan + 0.1.0) · calc

    · Read the hub brief, CLAUDE.md, MEMORY.md, FAMILY.md and Datum Plan's code; wrote docs/PLAN-0.1.md. · Built the skeleton from Plan: workspace, crates/core (sheet document with ops, undo/redo, tolerant reader, hardening …

  • Session 1, continued (0.1.1, the engine) · calc

    · Engine: units.rs (about 200 units, NIST factors, absolute temperatures, display ladders), parse.rs (Pratt parser, units after numbers, statements), eval.rs (dimensions, functions, constants, vectors, checks, solve, plo…

  • Session 1, continued (0.1.2, tables and… · calc

    · Engine: table regions (columns → vectors, units per column, formula columns), names defined by tables in the Variables panel; the constant/parameter fix for units after numbers. · Window: table view and editor, picture…

  • Session 1, continued (0.1.3, the convention… · calc

    · Ten calc packs with hand values worked out first (independent Python evaluation of the same formulas) and a test each: all ten matched on the first run. · Notes after # on a line; File › New with the packs grouped by f…

  • Session 1, continued (0.1.4) · calc

    · The user asked to stop after 0.1.3 and assess, then to build 0.1.4 first. · Went through every pack in SI and US units (--example packs): inputs now keep their typed units, large numbers are rounded and grouped, packs …

  • Session 1, continued (0.1.5, a bigger release) · calc

    · The user was unwell and asked for a self-checked, hardened, larger release (three or four versions in one). · Hardening: a probe of extreme lines found a stack overflow (deep brackets), a range-count overflow, unit pow…

  • Session 1, continued (0.1.6) · calc

    · The user asked to keep going the same way: self-checked, hardened, several features in one release. · Hardening: atomic save (temporary file and rename) with a test that a failed save leaves the sheet untouched; file s…

  • Session 1, continued (0.1.7) · calc

    · Family-wide change: the Windows publisher is "Datum" (bundle.publisher in tauri.conf.json); the copyright stays "© 2026 Edgar Mendonca". No other file writes the publisher. Noted in docs/FAMILY.md. · The convention fix…

  • Session 1, continued (0.1.8) · calc

    · The user asked to keep going with 0.1.8 the same way. Two visitors had opened issues: complex numbers for AC circuits (#1) and N·m as a unit of torque (#2); both went into 0.1.8, and the convention fixes moved to 0.1.9…

  • Session 1 (the hub)

    · Read the brief, FAMILY.md, and each app's README and MEMORY (read-only clones of Plan, Plot, Atlas). · Wrote README, FAMILY.md (neutral wording, §13 principles, site.json spec in §10, step 7 of the new-app checklist), …

  • Session 10 (Datum Sim joins the family)

    · The Datum Sim chat (after its 0.1.0 release) asked, through the user: add Sim to apps.json (id sim, accent #C2410C, tagline "Model and simulate dynamic systems: block diagrams, control and motors."), copy its icon into…

  • Session 11 (app pages, simpler hero, README)

    · User (screenshot of the hero): the README is out of date; one page per app explaining the software; the hero should be just four animated vector icons for the current apps; the changing text keeps changing by itself; e…

  • Session 12 (Datum Home)

    · User: a launcher to install, update and uninstall all the apps; is it possible? Brainstormed first (how it works, trust, SmartScreen, size). Answers: name Datum Home; build it in this repo, foldered properly; check whe…

  • Session 13 (brainstorm: Calc and Mesh for the…

    · User: which new apps fit best, given four apps and their skills? Ranked: Calc (every engineer; calc packs in the user's field), Flow (pumps, pipes, compressors; start as Calc packs), Signal (vibration for rotating equi…

  • Session 13 (from Datum Plan's chat: 0.3.12…

    · Plan 0.3.12 shipped hand-worked scheduling cases (47), parity files with their own dates (crates/core/tests/parity, hand-made XML and XER; real exports can be dropped in), random plans with constraints and calendars (l…

  • Session 14 (Calc and Mesh join the family)

    · Both apps were built in their own chats from the session 13 briefs: Calc 0.1.3 and Mesh 0.1.1, each with docs/site.json (about, steps), icons, and releases with SHA256SUMS.txt. · Hub: apps.json (calc #A8650F, mesh #B83…

  • Session 14 (from Datum Plan's chat: 0.4.0…

    · Plan 0.4.0 shipped Schedule Risk (Monte Carlo: P50/P80/P90 finish and cost, criticality, drivers, risk-register delays, optimistic/pessimistic durations), workload by trade (resource Group) in hours or people, a levell…

  • Session 15 (from Datum Plan's chat: 0.4.1…

    · Plan 0.4.1 shipped actual S-curves through the stored periods, earned schedule (SPI(t), finish at this pace), Manpower by trade (planned / done / forecast), rules of credit and installed quantities, and a look-ahead wi…

  • Session 16 (Datum Pipe brief)

    · Session 15 (brainstorm, no files): researched where engineers, students and researchers lack free tools. Already covered by open source: process simulation, statistics and SPC, chromatography, load flow. Real gaps: pip…

  • Session 17 (from Datum Plan's chat: 0.4.2…

    · Plan 0.4.2: a full security and robustness pass (see decisions), datum-cli with an MCP server and a catalogue of named operations, costs exact to the cent, and Schedule Risk / Look-ahead / Manpower printing as themselv…

  • Session 18 (Datum Pipe joins the family)

    · Session 17 (brainstorm, no files): a data-acquisition, control and test app (the user used a graphical DAQ tool for control and ADC work). Recommended a separate app, "Datum Bench", not part of Sim: real-time I/O, driv…

  • Session 19 (brainstorm: the brain, AI and…

    · User: is the network a neural network that can be "trained" as Datum's brain, and could an AI assistant use it? Answer: brain/graph.json is a knowledge graph (facts and links, rebuilt hourly, exact, explainable), not a…

  • Session 2 (landing page, network, logo)

    · User: the Pages build failed with Jekyll YAML errors (the Pages source was "Deploy from a branch", so GitHub ran Jekyll over the .astro files; our own Actions build had passed but could not deploy because Pages was not…

  • Session 20 (Datum Home: no more rate-limit…

    · User (screenshot): Datum Home showed "GitHub is busy (rate limit)" on every card. Cause: GitHub allows about 60 unauthenticated API calls an hour per network (shared by everyone behind one connection); Home made eight …

  • Session 21 (publisher "Datum")

    · User (screenshot of Windows Settings › Apps): every Datum app lists "Edgar Mendonca" as publisher; wanted "Datum". The value is bundle.publisher in each app's tauri.conf.json. · Datum Home 0.1.4: its own publisher "Dat…

  • Session 22 (Datum Schema brief)

    · User needs an eighth app for next week's exhibition; asked Bench vs P&ID, and what a P&ID app adds over plain CAD. Research: intelligent P&IDs carry data per item (automatic line/equipment/instrument/valve lists, integ…

  • Session 23 (Schema's direction: enterprise…

    · User (Schema chat already running) asked which tools exist and said the target is the enterprise class, not drawing tools. Listed the market in chat only (no names in files): enterprise object-based suites, mid-range P…

  • Session 24 (Datum Schema joins the family…

    · Datum Schema released 0.1.3 (site.json, icon, SHA256SUMS, publisher "Datum"). · Hub: apps.json (schema #9C1F84), brand icon, --schema (#9C1F84 / dark #E07BC9), AppGlyph "schema" (a vessel, a process line with a valve a…

  • Session 25 (from Datum Plan's chat: 0.4.4, the…

    · Plan 0.4.4 shipped the Datum Plan Guide in English and Simplified Chinese (about 30 pages each, numbered screenshots), downloaded from the release by Help › Guide; 0.4.3 had changed the Windows publisher to "Datum". Re…

  • Session 26 (from Datum Plan's chat: 0.5.0…

    · Plan 0.5.0: Sheets work like Excel (point-and-click formulas, 490 functions suggested, AutoSum, fill and paste with formulas, rows and columns) and read the plan live through Tasks/Resources tables and names; Plan Data…

  • Session 3 (logo and hero)

    · User: the logo's three app colours do not scale to more apps; wants a generalized, unique, vector-style symbolic D, used everywhere. And a new page header: illustrations placed around it as on the reference site, some …

  • Session 4 (the user's logo, a simple technical…

    · User: sent their own logo ("Continuum", brand/source/datum-continuum-original.svg) and asked to improve on it and use it everywhere; more branding guidance to follow. The hero must be simple: two panels, writing on the…

  • Session 5 (the workbench hero)

    · User: the instrument panel loaded slowly, could not be clicked, and looked empty while fading; bring back the rotating blue "Tools to …" line and the small animated icons, but in the right pane, playable, not like the …

  • Session 6 (capability bench, scroll features…

    · User (screenshots of the live site): the Analysis wave and the Atlas bubbles misbehaved; the hero did not define our work; no app counts; changing text in the session 3 italic; light/dark not working; smaller app cards…

  • Session 7 (bucket list)

    · Brainstorm of future free, open-source apps (§7). The user asked how Calc and Tolerance relate to a commercial maths worksheet and to Plot: Calc is that category (formulas and units → design values and a calc sheet), P…

  • Session 8 (live site 404)

    · User: the live site showed a 404. Cause: Pages › Source is still "Deploy from a branch", so every push runs two deploys, ours (the built site) and GitHub's branch build (the raw repo, no index.html at the root). Since …

  • Session 9 (Datum Sim and Datum Field)

    · User: two big apps for the long run: one for all kinds of finite-element analysis, simulation and CFD, and one for system simulation and control design. Names agreed: Datum Sim (systems in time: block diagrams, control…

  • Session 9 (from Datum Plan's chat: the…

    · In Plan's chat the user asked for a quick comparison with another open-source scheduler, then for the quick wins and for everything to be recorded here too. Plan 0.3.11 shipped the Dashboard and date-picker fixes and t…

  • Session 1 (day 1: plan, skeleton, 0.1.0) · mesh

    · Read the brief, the hub's CLAUDE, MEMORY, FAMILY and brand; Plan's and Sim's code; Atlas's data (31 metals with sources; no Poisson's ratio). · Wrote PLAN-0.1, CLAUDE.md, this memory, docs/site.json, README, CHANGELOG,…

  • Session 1, continued (0.1.3: parts, heat… · mesh

    · The user asked for 0.1.3 with 0.1.4's work in it. Restored the stashed mesh.rs and plane.rs; fixed the sloping-roller case (a frame round the part); found and fixed a slow check that made edits of large frames take 52 …

  • Session 1, continued (0.1.4: polish) · mesh

    · The user: "next is 0.1.4 proceed". Scope chosen from the open lists: result transfer size, the 0.1.1 review's low findings, and two known limits (the lug's pin, crossing members). · Engine: wire.rs (packed results, rou…

  • Session 1, continued (0.2.1 axisymmetric) · mesh

    · Released 0.2.0. Axisymmetric solids in plane.rs and heat.rs; benchmark 10 (Lamé cylinder and sphere with convergence, an axial patch test, free warming); the pressure vessel example with a pr/t hand check; random axisy…

  • Session 1, continued (0.2.2 natural frequencies) · mesh

    · Released 0.2.1. modal.rs, frame and plane masses, modes() for every stress analysis, benchmark 11 (beams against Euler–Bernoulli, a plate strip's bending and stretching), a test that every example vibrates with rising …

  • Session 1, continued (0.2.3 buckling of frames) · mesh

    · Released 0.2.2. modal.rs generalised (subspace for vibration and buckling); frame.rs gains kg_local, scatter, split and buckling; the assembly cuts beams into pieces on request and keeps every inner node's position. Be…

  • Session 1, continued (0.2.4 3D frames) · mesh

    · Released 0.2.3. Engine: Analysis::Space, z on nodes, roll on members, 3D loads and springs (serde defaults), section Iy, J (Roark, Bredt, open thin-walled), doc ops in 3D (node finding, splitting, crossings by closest …

  • Session 1, continued (0.2.5 publisher) · mesh

    · Released 0.2.4. Windows publisher set to "Datum" in tauri.conf.json (the only place it was written; docs/FAMILY.md only links to the hub). Patch release 0.2.5.

  • Session 1, continued (0.2.6 3D frame dynamics… · mesh

    · Released 0.2.5 (publisher Datum). Wrote down the purpose with the user; frames stay in Datum Mesh but stop short of building design. Engine: space.rs assemble with splitting, modes, buckling, benchmark 14, bench::timin…

  • Session 1, continued (0.3.0 3D solids) · mesh

    · Released 0.2.6. Engine: Analysis::Solid, Target::End, MeshSettings.layers, Traction.fz; solid.rs; System::lower; faer with rayon; benchmark 15 (patch test, cantilever, Lamé in 3D); the 3D bracket and blank solid exampl…

  • Session 1, continued (0.3.1 sketch tools) · mesh

    · Agreed the direction with the user (docs/PLAN-0.3-0.4.md): simple parts by sketch tools plus extrude/revolve, complex parts from STEP via Gmsh bundled from 0.4. Engine: sketch.rs (fillet, chamfer, combine with arcs rec…

  • Session 1, continued (day 2 brought forward… · mesh

    · Engine: sparse.rs (faer), frame.rs, bench.rs with benchmarks 1–3 (12 checks, all within 1e-9), solver hardening (random frames always balance and their curves meet their nodes; a 60 × 60 grid frame solves inside the sp…

  • Session 1, continued (plan for 0.2–0.3; 0.2.0… · mesh

    · The user asked for a big update to reach 3D FEA for simple problems, finishing the roadmap first. Wrote docs/PLAN-0.2-0.3.md and asked four questions; answers recorded in Decisions. · 0.2.0: Warming body load, t_ref, t…

  • Session 1, continued (review and the 0.1.2… · mesh

    · Released 0.1.1. The user asked to stop and analyse the app. Two passes: an independent code review by a separate agent (it confirmed the solver maths numerically and found 15 issues in the checks, editing and window la…

  • Session 1 (overnight run, 0.1.0) · pipe

    · Read the brief, the hub's CLAUDE, MEMORY, FAMILY, brand and brain; Mesh's code (the skeleton, frame and sparse solver, verification), Calc's units, Atlas's metals (room-temperature values with sources; no temperature t…

  • Session 1, continued (0.1.1: the solver and… · pipe

    · Engine: mat, geom (bends as arcs), elements (exact flexibility), code (the equations), solve (assembly, supports, cases, reactions, stresses, nozzles, walls, equilibrium), bench (8 benchmarks, 21 checks, all within 1e-…

  • Session 1, continued (0.1.2: components… · pipe

    · Released 0.1.1 (Release run 2). · Engine: worked.rs (8 hand-worked cases; found my own sign error for a settling anchor's reaction, the engine was right), the four remaining examples (tuned with examples/summary.rs), i…

  • Session 1, continued (0.1.3: editing tools and… · pipe

    · Released 0.1.2 (Release run 3). CI runs 1–2 green on Linux, Windows and macOS. · Found by a new UI test: the table lost the cursor after every edit (rows rebuilt); fixed with position-keyed rows. Checked typing rows wi…

  • Session 1, continued (0.1.4: polish, review… · pipe

    · Released 0.1.3 (Release run 4; CI green). · Polish: the isometric fills the window, the report's title block (a stray CSS rule pushed its labels to the foot of page 1, found by inspecting the printed page), stresses in…

  • Session 2 (roadmap in small steps) · pipe

    · The owner asked for small releases: the 0.2 stage became 0.1.5–0.1.10, with 0.2.0 as the milestone. Updated the roadmap here, docs/site.json (File › Roadmap) and the "planned for" labels in the ribbon, File page, help …

  • Session 2, continued (0.1.5: code check fixes… · pipe

    · Engine: bend factor at the intrados, the D/6 limit, reducers at both ends, Ze at tee branches (geom Tee.branch), pressure elongation, shared rigid reactions; two new settings. Benchmarks 9–11 (29 checks) and six worked…

  • Session 2, continued (0.1.6: publisher) · pipe

    · The Windows publisher became "Datum" across the family; released as 0.1.6. The roadmap's one-way rests and gaps move to the next release number.

  • Session 2, continued (0.1.7: one-way rests and… · pipe

    · Engine: Support.one_way, Support.gap, Support::conditional; solve_conditional (per-case iteration, exact holds, springs with offsets, 1 N/mm fallback); CaseResult.contacts and iterations. Benchmarks 12–13 (34 checks), …

  • Session 2, continued (0.1.8: friction) · pipe

    · Engine: Support.mu, Support::has_friction; Fric, across, FState, slide_force, Linear; friction in solve_conditional (stick holds, exact sliding force per support, Gauss–Seidel, light stiffness fallback for sliding supp…

  • Summary of the overnight run · pipe

    · Released: 0.1.0 (shell, table, model file), 0.1.1 (solver, 3D view, results, verification), 0.1.2 (components checked, four more examples, isometric, full report), 0.1.3 (loop wizard, copy and mirror, table typing), 0.…

  • Session 1 (brainstorm + 0.1.0) · plan

    · Read Cairn and CentriForge. Wrote the brainstorm and a draft logo. · The user approved the name, Windows only, no .mpp, Rust/Tauri 2, and small releases. · Built and released 0.1.0: Rust core, Tauri shell, custom updat…

  • Session 10 (site.json about and steps) · plan

    · User (from the hub): add about and steps to docs/site.json and link the family page from the README. Checked each sentence against the code: MPX is export-only, so "open from XML, XER, MPX" became "open from XML and XE…

  • Session 11 (0.3.12, trust in the dates) · plan

    · User: build 0.3.12. Wrote cases.rs (hand-worked cases, dates worked out before running), parity.rs + tests/parity (hand-made XML and XER with their own dates; a deliberate wrong date is reported), and four new hardenin…

  • Session 12 (0.4.0, risk and resources) · plan

    · User: build 0.4.0. Built risk.rs (+ dmin/dmax task fields, Risk.days), usage by group with capacity and person, level::preview, import notes in both readers + compare_dates, XER activity types; window: Schedule Risk vi…

  • Session 13 (0.4.1, progress history) · plan

    · User: build 0.4.1. Built progress.rs (manpower, earned schedule, look-ahead, credit library), report::history (actual through snapshots), task quantities, CreditRule/LogItem with Op::Credit/ApplyCredit/Log; window: Man…

  • Session 14 (0.4.2, hardening, command line… · plan

    · User: build 0.4.2 and 0.4.3 together overnight, with a complete security, robustness and hardening pass of the whole app. · Audit and fixes. Probing hostile values found panics in calendar arithmetic (huge durations, l…

  • Session 15 (0.4.3, publisher "Datum") · plan

    · User (family rule): the Windows publisher becomes "Datum". Changed bundle.publisher (copyright unchanged); nothing else in the repo writes the publisher (LICENSE, NOTICE and README keep the copyright holder). Read Taur…

  • Session 16 (0.4.4, the guide) · plan

    · User: users (some Chinese-speaking) need a guide, not a tutorial: English and mainland Simplified Chinese PDFs, inside the app as a PDF icon that downloads from GitHub (not in the installer); screenshots in English wit…

  • Session 17 (0.5.0, sheets like Excel) · plan

    · User: Sheets were unusable ("can't even SUM"); they build client dashboards in Excel by copying MPP values; wants GridCraft's engine used, and country flags for vendors. Asked for gaps vs other tools first (web search:…

  • Session 2 (0.1.1) · plan

    · Feedback: too dark, logo too heavy, no domain sample, Gantt not interactive, wanted a Cairn sidebar and periodic reporting. · Released 0.1.1: light theme, new logo, sidebar, templates, drag bars, Calendar, Dashboard, R…

  • Session 3 (0.2.0) · plan

    · The user asked for 0.1.2, 0.1.3, 0.1.4 and the "0.2 onwards" items (calendars, constraints, exchange, resources) all in 0.2. · Rewrote the engine on minutes with real calendars. Added constraints, deadlines, ALAP, manu…

  • Session 4 (0.3 brainstorm) · plan

    · Feedback on 0.2.0: · too few fields, and no custom fields, formulas or Field Settings · weak information dialogs and reporting · ribbon buttons such as "Gantt Chart" should be dropdowns · Agreed that 0.2.1 → 0.5.2 beco…

  • Session 5 (0.3.0) · plan

    · The user said "build and release 0.3". Built it as one release. Benchmark: 20k tasks schedule 36 ms, calc 44 ms, grid 49 ms (release). · Shell: new commands, beta channel, backups of older plans, logo picker, file savi…

  • Session 6 (0.3.1 brainstorm) · plan

    · The user reviewed 0.3.0: buggy, misaligned cells, no range selection, no obvious formulas (e.g. % complete − baseline %), weak reporting (wants dashboard → charts → tables → notes, week vs previous week with variance),…

  • Session 6, continued (0.3.1) · plan

    · Answers: keep the ribbon (style only), light/dark/auto, Excel formulas per column with field names, sheet tabs OK, no Python (future app Datum Plot), user-chosen periods, all kinds of S-curves (elegant, hoverable, prin…

  • Session 6, continued (0.3.2) · plan

    · User feedback on 0.3.1: dropdown arrows under big buttons, no icons in the heading menu, Format tab and Gantt Chart Tools label squeezed, Gantt Chart Style gallery missing, File sidebar black. All fixed. · Engine: Recu…

  • Session 6, continued (0.3.3 hotfix) · plan

    · User: could not click or select cells (row stuck on the first selection). Cause: in grid.tsx the effect that follows Gantt/find selection tracked cur, ran before the effect syncing sel from ranges, saw the old sel and …

  • Session 6, continued (0.3.4) · plan

    · User asked to merge 0.3.4 and 0.3.5 and fix: printing (incomplete pages, no page control, no date range, no headers/footers/logos/page numbers), the jumbled Options page (stray <span /> after each <h4> shifted the labe…

  • Session 6, continued (0.3.5 feedback) · plan

    · Diagnosis and proposal in PLAN-0.3.5.md; questions sent; build after the answers.

  • Session 6, continued (0.3.5) · plan

    · Answers: keep "Task" (no Home), add more tabs; Setup as a page; hide + unhide + delete columns; printing as proposed; other views' printing, the shared grid and xlsx formatting in 0.3.6. · Also fixed: the Insert Column…

  • Session 6, continued (0.3.6 feedback) · plan

    · Plan and questions in PLAN-0.3.6.md.

  • Session 6, continued (0.3.6) · plan

    · Answers: fonts as listed; Task tab extras as proposed; network boxes as proposed; everything in 0.3.6; add GitHub, Releases and Report-an-issue links; explain terms (SS, FF…) for new users. · Built: font family (n: sty…

  • Session 6, continued (0.3.7) · plan

    · User: Gantt and Tracking looked identical; wanted Cairn's whiteboard network look and cards; man-hours with 8-hour shifts and resources in the templates; finish the 0.3.7 carry-overs. · Built: Tracking Gantt (view swit…

  • Session 6, continued (0.3.8) · plan

    · User: printed Gantt had no link lines; wanted a date picker for dates; asked to record the workflow. · Built: link paths in print.tsx Strip (same elbow rules as the canvas), DateBtn (ui.tsx, uses showPicker() on a hidd…

  • Session 6, end (Datum Atlas brief) · plan

    Wrote docs/briefs/DATUM-ATLAS.md (concepts, features, window, architecture, data model, release plan, quality bar, questions), a draft logo docs/brand/datum-atlas-icon.svg (violet), and added Atlas to FAMILY.md. Recommen…

  • Session 6, end (family) · plan

    Wrote docs/FAMILY.md (stack, colours with accents per app, type, logo rules, layout, components, icons, charts, printing, updates and releases, docs, workflow, new-app checklist) and a draft docs/brand/datum-plot-icon.sv…

  • Session 6, end (README) · plan

    · README rewritten as an independent product (no comparisons with other tools), with new screenshots (Gantt, Tracking, Network, Dashboard) taken from 0.3.8; old images removed. "Pending and next" written below, including…

  • Session 7 (0.3.9, ? help) · plan

    · User: every Datum app gets a small ? beside its tools that says what the tool is for and how to use it (built first in Datum Atlas 0.1.1); no separate teaching mode. · Built: ui/src/help.tsx copied from Atlas with 46 P…

  • Session 8 (0.3.10, Roadmap) · plan

    · User: Plot and Atlas have a Roadmap tile on Home; add the same to Plan. Another session had already released 0.3.9 (? help), so this shipped as 0.3.10. Built roadmap.tsx (Home tile + File sidebar item), fixed the print…

  • Session 8, end (open-source comparison) · plan

    Verdict: Datum Plan leads on features and polish; ProjectCraft leads on rigour (about 550 tests, date parity fixtures, CI gates, a command line). Wrote the "Hardening plan" in §5; nothing built yet.

  • Session 9 (0.3.11, hardening quick wins) · plan

    · User: build 0.3.11 with the two bugs and the hardening quick wins; record everything here, in the CHANGELOG and in the DATUM hub memory. · Built crates/core/src/hardening.rs (4 tests). On first run it found real faults…

  • Session 1 (brainstorm) · plot

    · The user started Datum Plot as the second Datum app and asked to follow FAMILY.md exactly, brainstorm, write docs/PLAN-0.1.md, and create CLAUDE.md and this file before building. · Read Datum Plan (read-only): FAMILY.m…

  • Session 1, continued (0.1.0) · plot

    · The user approved the plan, icon and colours, wants to see the app before answering the questions, and decided Python goes inside the app (numpy, SciPy, matplotlib; Rust as the shell, SolidJS as the window; 200–300 MB …

  • Session 2 (review of 0.1.0, feature brainstorm) · plot

    · Feedback on 0.1.0 (one screenshot: Growth graph with Format Graph docked): first start 3–6 s, install under a minute, the app is fast and should stay so; graph text is in Arial as intended; Copy Picture does not work; …

  • Session 3 (answers, 0.1.1) · plot

    Decisions and the new order are in PLAN-0.2 §10 and the decisions table. · Built 0.1.1: · Engine: Import op (+ test); Python io.py (CSV/TSV/TXT with delimiter sniffing and decimal commas, XLSX with openpyxl) + 2 tests; w…

  • Session 4 (one installer, 0.2 plan) · plot

    · Feedback on 0.1.1: updated from the app (~87 MB), installed quickly, opened fast; wants one file per release (no separate update installer or runtime pack, it confuses people); import "kind of works"; Copy Picture work…

  • Session 5 (answers, roadmap, 0.2.0) · plot

    · The user: combine the first two parts into one 0.2.0, then small consecutive releases 0.2.1, 0.2.2 … up to 0.3 (no jumped numbers); Arrhenius yes; the rest as proposed; keep updates small and quick to save tokens; keep…

  • Session 6 (0.2.1, ? help) · plot

    · User: every Datum app gets a small ? beside its tools that says what the tool is for and how to use it (built first in Datum Atlas 0.1.1); no separate teaching mode. · Built: ui/src/help.tsx copied from Atlas with 35 P…

  • Session 7 (the big build, 0.2.2) · plot

    · User (after testing 0.2.0: "works very well… loads in a few seconds"): list what is pending and propose a big build of 10–15 features. Proposed seven big builds; the user: "complete 0.2.1 and 0.2.2 together, as one ver…

  • Session 8 (small steps, 0.2.3) · plot

    · User: list what 0.2.2 applied, and split the rest into very small versions to save tokens and finish as much as possible this week. Agreed plan: 49 features in 22 small releases (PLAN-0.2 §12), then 1.0. · Built 0.2.3:…

  • Session 1 (0.1.0) · schema

    · Read the brief, the hub (CLAUDE, MEMORY, FAMILY, BRAND, BRAIN) and the reference apps (Plan's shell and updater, Sim's canvas and router, Calc's units and pipe pack, Pipe's sizes and shell). · Wrote CLAUDE.md, this MEM…

  • Session 1, 0.1.10 (import, company layout… · schema

    · The user asked for the three planned steps (Excel import, company layout, loop diagrams) as one release, 0.1.10. · Engine: import.rs (calamine reader; table and one-sheet layouts; unit conversion; conflicts for line, v…

  • Session 1, 0.1.11 (the user's two drawing… · schema

    · The user reported: the symbol search popup covers everything; a line being drawn does not show until it is finished. Root cause of the second: the drag overlay in canvas.tsx was a non-keyed <Show> whose child read the …

  • Session 1, 0.1.12 · schema

    · The user showed Ctrl+K hiding the whole window (and compared with Datum Plan). Reproduced in the test browser: the overlay's top class picked up the title bar's opaque background. Fixed, with a UI check that the overla…

  • Session 1, 0.1.5 (the object core begins) · schema

    · 0.1.4 released as agreed. Built 0.1.5: objects and views, line-number objects, the plant hierarchy model, the history, the SQLite file with 0.1 conversion. Engine 58 tests (new: SQLite round trip with history, 0.1 conv…

  • Session 1, 0.1.6 → 0.1.8, and where we are · schema

    · Released: 0.1.5 (objects, SQLite file with history; re-released after the Windows save fix), 0.1.6 (class library, Options › Classes, required attributes), 0.1.7 (Plant panel, delete the object or only the drawing, obj…

  • Session 1, 0.1.9 (datasheet revisions) · schema

    · Built and released 0.1.9: Op::IssueDatasheet (one or many, rev suggested per status, by from the document's user), model::Issue with the snapshot, the issues table (format 3), Δ marks and was per row, revision block, n…

  • Session 1, course change · schema

    · The user changed direction after 0.1.3: an object-based plant engineering application, not a drawing tool (objects master, views on sheets, plant hierarchy, class library as data, SQLite with history, DEXPI names). 0.1…

  • Session 1, summary (0.1.0 → 0.1.4) · schema

    · Released: 0.1.0 (shell, sheet, symbols, lines, updater), 0.1.1 (checks, hydraulics, lists, examples, print, DXF), 0.1.2 (fast routing, coloured badges, line number highlight, screenshots), 0.1.3 (fixes from an independ…

  • Session 1 (planning) · sim

    · The user pasted the brief and asked for a complete brainstorm and plan before deciding how to deploy and build 0.1, and pointed at morluto/rea for how hard apps are built. · Read: the hub (CLAUDE, MEMORY, FAMILY, BRAND…

  • Session 2 (0.1.0 built) · sim

    · The user's answers: orange accent; Python from the start but small; the worked examples plus motor simulation and subsystems ("a little bigger build"); the family look; uPlot; "just start building, push bit by bit"; up…

  • Session 3 (0.1.0 released) · sim

    · Brainstormed the next steps with the user (wire branches and probes, masks and user libraries, discrete control, motor drives, control design, live tuning). The user asked to release 0.1.0 first. · Released 0.1.0: rele…

  • Session 4 (0.1.1) · sim

    · The user tested 0.1.0 on Windows: it works; drag-and-drop from the library did not. Answers: order as I choose; all motor types (LV, MV, HV, synchronous, asynchronous, AC, DC); live tuning later; copied libraries; disc…

  • Session 4 (plan for 0.1.x) · sim

    · Gave the user the zip 9 and deny.toml fix for Datum Plot (tested on a copy of Plot 0.2.12: all checks pass; BSL-1.0 added to the allow-list for Plot's clipboard crates). · Wrote docs/PLAN-0.1.x.md: brainstorm and small…

  • Session 5 (0.1.2, the motor library) · sim

    · The user: "start the motor library 0.1.2". · Built motors.rs (14 motor kinds, 8 drive pieces, presets for LV/MV/HV ratings), a Drives group, the Inspector's Typical ratings, motor glyphs and port names, seven motor exa…

  • Session 5 (0.1.3) · sim

    · The user: the Windows publisher becomes "Datum" for the whole family. Only src-tauri/tauri.conf.json wrote it (the installer takes it from there; the About page and docs/FAMILY.md, a link to the hub, do not). Copyright…

  • Session 6 (0.1.4) · sim

    · The user answered PLAN-0.2: all four parts, releases and order as I choose, motor extras yes. · Built part A: discrete.rs, rate transition, integrator reset, Goto/From, Terminator, new sources, rates and sample-time co…

  • Session 6 (0.1.5) · sim

    · Built part C: measure.rs, Log all signals with probe channels, the shell's run history, value_at and step_marks; the new scopes (cursors, marks, compare, stacked, y range, 3× PNG, SVG) and the wire probe; help card upd…

  • Session 6 (0.1.6) · sim

    · Built part B: wire names (engine and window), segment moving, branching from a wire, removing bends, notes, Find, Distribute, block colours, wire context menu. · Checked: 67 Rust tests, 53 UI checks (7 new), clippy; th…

  • Session 6 (0.2.0) · sim

    · Built part D: masks (engine scopes, SetMask with checks, Inspector, mask editor with ratings, look under the mask, ? card, Model › Mask) and My blocks (save, list in the Library, drag or double-click to add a copy, rem…

  • Session 6 (plan for a bigger build) · sim

    · The user: "can we plan a little bigger build?" Wrote docs/PLAN-0.2.md: one release 0.2.0 that merges discrete control, wires and scopes (the planned 0.1.4–0.1.6) with masks and copied My blocks; the engine changes behi…

  • Session 7 (plan for 0.3) · sim

    · The user: "plan 0.3 control design". Wrote docs/PLAN-0.3.md: analysis points and linearising whole models (central differences on the compiled model; z for single-rate discrete loops); trim (Levenberg–Marquardt); loop …