flowrs-engine/crates/flowrs-core/PROVENANCE.md
flowRS 2b6f30d348 flowRS engine, cut from flowRS f907e0756a7c
Built alone from an empty CARGO_HOME, its tests passed, and flowrsc checked, ran and exported a
document from the conformance corpus; the export built alone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 08:54:33 -05:00

2.2 KiB

Provenance

What flowrs-core takes from other projects, beyond the crates it depends on. Each module that ports more than an idea says so here.

Graph functions (src/graph/function.rs)

Ideas only, no code copied. The model is LabVIEW's subVI (a subgraph with a typed connector pane, called from many diagrams), with three choices taken from elsewhere:

  • boundary nodes for a function's inputs and outputs, each with a name, a type, a default and a place in the signature: Unreal Engine's material functions (FunctionInput, FunctionOutput, their SortPriority and preview value), from Epic's documentation;
  • a call pins the exact version it was made against and a newer version sits beside it: Houdini's digital assets (name::version) and APEX's graph functions, from SideFX's documentation;
  • recursion refused and the call depth bounded, at both tiers: LabCraft's --max-call-depth (docs/cli.md), whose default of 1,024 is lower here (64) because flowRS's interpreter recurses on the thread's stack.

The station call tree (src/graph/corpus/station_call_tree.fdsl)

Translated, no code copied: LabCraft, https://github.com/corail-labs/labcraft, read at commit 22b8dff, MIT OR Apache-2.0 (Cargo.toml, NOTICE), its contributors' copyright.

The call tree and what each function does are LabCraft's example programs:

here there
station@1: steps run in turn, the run passes when each does examples/station.lcf
run_step@1: set the supply, settle, compare the reading with the step's low and high limits examples/run_step.lcf
settle@1: read, compare with the target within a tolerance (0.2 V at its call, as there) examples/settle.lcf
dmm_driver.read_dc_volts@1: MEAS:VOLT:DC?, the answer in volts examples/dmm_driver/read_dc_volts.lcf
scpi.query_f64@1: a query whose answer is a number libs/scpi/query_f64.lcf

Where this differs, on purpose: there is no VISA session, error wire, state machine or loop (flowRS has none of the first three yet, and phase 1 refuses a held wire in a body), so settle reads once, the station runs its two steps side by side, and the instrument is simulated as a supply behind 0.05 ohm under a 0.5 A load, in place of LabCraft's simulation file.