The editor¶
Layout¶
The sidebar’s panels (Node, Outputs, Problems, Study, Tracked, Requirements, Constants, History, Help) can go wherever suits the work, as in VS Code:
Drag a tab onto another group’s tabs to move it there, onto the top or bottom edge of a group to split the sidebar (History above Requirements, say), or under the canvas to start a bottom panel. Drop it anywhere else and it floats over the page; a floating panel moves by its tab strip, resizes from its corner, and ⇲ docks it back.
Right-click a tab for the same moves, Open in new window (a panel of its own on a second screen, still live; closing the window puts it back), and Reset layout.
⧉ next to Processing/Reporting (or
\) shows both canvases side by side. The one you last clicked gets the shortcuts, the Node panel and new nodes;`moves between them.
The layout, the pane sizes and the split are kept in this browser.
Requirements¶
Write down what a design must achieve in a Requirements node, one per line (or load a CSV/YAML spec):
COM-003 link_margin >= 3 dB [Analysis] # The link shall close with 3 dB to spare
PWR-001 dc_power <= 40 W [Inspection] # The radio shall draw at most 40 W
> and < are strict: a value at the limit meets >= but not >. Requirements are values in the graph. Requirement Value feeds a limit into the design, Verify Requirement checks a result and reports its margin, and Check Candidates scores every row of a trade table or sweep. A requirement that is not met marks its node, is listed with its margin in the Problems tab, fails noodlelab test and is recorded in the run’s provenance. A result with an uncertainty is judged with its expanded uncertainty U = 2u: when the nominal value meets the limit, but by no more than U, the requirement is inconclusive (marked amber with “?”). That is not a pass, and noodlelab test and noodlelab verify fail on it too. Add Compliance Matrix puts the verifications in a report. Examples 8, 17, 21 and 23 use them.
The Requirements tab lists every requirement of the graph as passed, failed, inconclusive or not verified yet (defined but never checked). Each one shows the value achieved against the limit, its margin, the node that checked it, and where the verdict came from: whether the run computed the check or reused it, and which run computed it when. The tab also has a history of the margin over every run of the saved graph, with a CSV export. Runs from the editor and from noodlelab run both add to it, kept in .noodlelab/requirements/ in the workspace, and GET /api/workspaces/{ws}/requirements/{graph} serves it.
Tracked values¶
Right-click any output socket and choose Add to Tracked to follow that value from run to run. The Tracked tab shows each tracked value with its latest result, whether it is up to date, and which run computed it and when (a reused result names the run that computed it). It also shows a history of every run of the saved graph, with a sparkline for numbers and a CSV export. The list is saved with the graph. Runs from the editor and from noodlelab run both add to the history, which is kept in .noodlelab/tracked/ in the workspace. Examples 8, 9, 17, 21 and 23 track some values already.
In the editor, the add-node search and menu offer only the nodes for the tab you’re on: Report nodes on Reporting, processing nodes on Processing. Turn this off under Help → Editor settings, or from the canvas right-click menu.
Constants¶
A Constant node gives a named constant with its unit: pi, tau and e (plain numbers, as in Python’s math), the exact SI constants (c, h, k_B, N_A, q_e…), measured ones with their CODATA 2022 uncertainty (G, m_e, alpha…), conventions (g0, atm, T0) and a few for Earth and space (R_E, GM_E, au). Its unit setting converts it: 1 makes π a dimensionless quantity for Quantity Math. In a symbolic Values node, a line g = g0, or just c, does the same. A name alone is taken as a constant before a unit, so t = h is Planck’s constant: write t = 1 h for an hour. Values warns when a name like that means something else as a unit (h, e, G, F), and stays quiet for names that mean the same either way (c, g0, atm). Evaluate never fills in a constant by itself, since c might be a damping coefficient, but its error says which missing symbols name one.
The Constants tab lists every constant in force, and clicking one adds a Constant node for it. The graph’s own constants are added and edited there, and saved with the graph. Constants for every graph in a workspace go in constants.toml at its root:
rho_w = "998.2 kg/m^3"
k_spring = "1520 ± 12 N/m"
[g_local]
value = 9.8123
unit = "m/s^2"
uncertainty = 0.0005
source = "gravity survey 2024, station 12"
A graph’s constant replaces a workspace one of the same name, and both can replace a built-in one, which is flagged unless the entry says override = true. pi, tau and e are fixed. Mistakes in the file show in the Problems tab. Editing a constant reruns exactly the nodes that use it, every run’s provenance lists the constants it used, and exported scripts define the graph’s and the workspace’s constants so they run on their own. noodlelab constants prints the same list, and noodlelab.constants has them in Python.
Examples¶
The Help tab has 25 examples. They go from a 3-node “plot a function” up to full studies: calibration curves, uncertainty budgets, time series, spectra, symbolic beam equations with SymPy, parameter sweeps, GPS tracks, watersheds, a satellite downlink link budget, sizing a cantilever bracket with the engineering pack, and controlling two masses on springs, from their equations to a PID loop. Open one, then press Ctrl+Enter to run it.