Phase 0 – Inventory and triage (2026-09-30)#
Result: in format 2.0 flowcharts, only a node’s parameters are settings. Paul’s view
holds for every current plug-in. Every other attribute is either a constant or run-time
state set in the step’s __init__, or a cache that the GUI derives from the
parameters. The exceptions are three kinds of legacy file, written before a plug-in
moved its settings into parameters; only one of them needs handling in the converter.
Method#
Parsed every flowchart on this Mac (1,332 files; the 38 other
*.flowfiles are JavaScript type files inseamm_webui/frontend/node_modules) and listed each attribute outside_uuid,_title,extension,parametersandx/y/w/h, keeping only non-empty values (notNone,0,"",[],{}, orcitation_level2).For each attribute found, traced it to the plug-in’s code: where it is set, and whether any headless code reads it before setting it.
Counted jobs and flowcharts in each machine’s datastore (read-only queries).
Extra attributes in current plug-ins: all junk#
Step |
Attributes |
Where they come from |
|---|---|---|
Table (table_step) |
|
Counter set to 0 in |
Loop (loop_step) |
|
|
Energy, Optimization, BandStructure, DOS, ChooseParameters (dftbplus_step); FHI-aims sub-steps |
|
|
Reaction Path |
|
|
Diffusivity, Thermal Conductivity |
|
Plotting constants and a citation level set in |
Every node |
|
A GUI cache: |
Gaussian Energy, Optimization, Wavefunction Stability, Thermodynamics; Thermochemistry |
|
A GUI cache: set by |
Every node |
|
Always the class’s default title (12 pairs such as |
The comment in Node.to_dict() that keeps _method “because
forcefield_step/forcefield.py does not use parameters yet” is stale: forcefield_step
uses ForcefieldParameters (forcefield.py:40).
Legacy files: settings stored as attributes#
Where |
What |
Handling |
|---|---|---|
lammps_step Minimization, versions 2023.6.17 to 2024.7.21.1 (11 nodes in job directories on this Mac) |
|
Map in the converter (one small legacy table): |
table_step before commit acfb417 (2021-12-21): |
|
Replace the file with Tutorial 3 from Zenodo (record 10108673, 2023) rather than mapping. |
|
A test fixture from before plug-in versions and Parameters: LAMMPS settings as
attributes, |
Leave it or delete it; the old Dashboard is superseded by the webui. |
Other findings#
Malformed edges. Three SEAMM_DEV jobs (3885, 3886, 3976) contain five edges with
edge_typenull(3) or"next"(2) instead of"execution"– flowcharts built by scripts that calledadd_edgewithout an edge type, the exact pitfall the builder removes. The converter treats any edge with subtypenextas an execution edge.Edge subtypes across all files:
next16,837,loop695,exit433. A loop at the end of a flowchart has no exit edge.Subflowcharts are stored under the key
subflowchartby all 20 plug-ins that have one (DFTB+, LAMMPS, MOPAC, ORCA, Gaussian, Psi4, VASP, FHI-aims, TorchANI, Dimer Builder, Reaction Path, Structure, Subflowchart, Diffusivity, Thermal Conductivity, Thermochemistry, Thermomechanical, Energy Scan, Conformer Search, …), exceptlammps_flowchartin the Dashboard fixture.Parameter values are plain JSON (str 194,538; list 5,226; float 5,006; dict 4,691; int 3,429). No Pint, datetime or other encoded object appears inside a parameter; the only Pint value found is the legacy Minimization
ftolattribute.YAML round trip. PyYAML 6.0.3’s
safe_dumpquotesyes,no,on,null,~and0.10, andsafe_loadgets back exactly the same strings;ORCA:DFT@B3LYP/bse:def2-SVPD,$SMILESand2026.6.28pass unquoted. So the converter, which starts from typed JSON, needs no snapshot of parameter kinds. Coercing by kind (D3) is still needed for hand-written specs.
Inventory#
Jobs and flowcharts in each datastore (jobs rows / flowcharts rows / distinct
flowcharts used by jobs / first job), 2026-09-30:
Machine and datastore |
Jobs |
Flowcharts |
Used by jobs |
First job |
|---|---|---|---|---|
This Mac, |
2,076 |
981 |
950 |
2022-02-24 |
This Mac, |
322 |
282 |
168 |
2023-11-07 |
This Mac, |
109 |
127 |
79 |
2022-02-25 |
ChemAI, |
2,477 |
321 |
252 |
2022-09-16 |
ChemAI, |
0 |
0 |
0 |
|
MolSSI10 ( |
347 |
237 |
164 |
2023-06-29 |
TinkerCliffs/ARC ( |
53,081 |
56 |
56 |
2025-05-28 |
paul.local |
0 |
0 |
0 |
Loose flowcharts outside job directories: this Mac 115 (~/SEAMM/flowcharts 27,
Testing/ 27, package tests and docs); a few dozen on each of ChemAI (~/ARC,
~/GM, ~/flowcharts, Science_Flowcharts), TinkerCliffs (~/GM,
~/flowcharts) and MolSSI10 (~/Work, tests).
Every job directory holds its own flowchart.flow, so TinkerCliffs has about 53,000
copies of 56 flowcharts. The migration converts by content: hash each file’s text,
convert each distinct flowchart once, and reuse the result.
Consequences for the design#
D4 simplifies. No settings hooks are needed: a node’s settings are its
parameters, full stop. A 3.0 step is its step name, parameters, sub-steps (for subflowchart steps) and optional layout.titleis dropped.Phase 2 must rebuild the GUI caches on load:
node.tablesfrom theresultsparameter (a headless helper besideTkNode.setup_results) and each step’smethodwhen its dialog opens (already the case). Test with the Exercise-Tk-dialogs pattern on a flowchart with tables.D10’s frozen converter is generic apart from one legacy table (lammps_step Minimization before 2025.3.16). No snapshot of plug-in parameter kinds is needed.
Migration by content hash, with a cache, because of the job arrays.
Remove the stale
_methodexception and comment fromNode.to_dict()when the 2.0 writer is removed (phase 3).