ForceLayout

:= []

The seeded, multilevel, Barnes-Hut force-directed placement behind Graph.Force. ForcePrepared is the algorithm's witness — build is the only fallible boundary, and a successfully built value proves that place and run are total. This face re-exports the witness surface under the module's name for the wiring layer.

prepare_force : Spec, Settings -> [Ok(ForcePrepared), Err(List(Problem))]

Check the spec and settings jointly and cache the reusable reading.

place_force : ForcePrepared, RunArgs -> { positions : List({ x : F64, y : F64 }), components : List(U64), convergence : { iterations : U64, converged : Bool } }

Placement only — final packed center positions, no routes.

run_force : ForcePrepared, RunArgs -> Result

Placement plus shared routing and normalization.

layout_force : Spec, Settings, RunArgs -> [Ok(Result), Err(List(Problem))]

Check and lay out in one call: exactly build followed by run.