If node performs a destructive operation, return a short human-readable
description of it; otherwise None. Used by the per-step confirmation gate
(roadmap E1). Detection is intentionally conservative - it flags the clear
data-loss cases (deleting files, rm, git push/reset --hard/clean,
kubectl delete, drop table/database, truncate, mkfs, dd if=,
shutdown/reboot) rather than guessing at every possible command.
A pre-apply advisory about a node in a proposed flow, surfaced in the review
Out-of-band pause/resume/cancel control for a run, shared (Arc) between
FlowApp (which the host’s pause/resume/stop commands signal) and the
Executor (which polls it at node boundaries). One instance is created per
run and registered under that run’s execution id, so several flows (e.g.
multiple canvas tabs) can run and be steered independently.
Run phase used by RunControl. Pause and cancel are honored at node
boundaries (the executor checkpoints between node executions), so an
in-flight node finishes before the request takes effect.
Static pre-apply scan of a proposed graph: flags nodes that perform a
destructive operation (reusing destructive_reason) or reference a path
that would escape the workspace jail (.. parent traversal). Advisory only -
it does not block; the executor’s runtime gates still apply.
Session-scoped store backing {{memory.<key>}}. Shared (Arc) so it
survives across Executor::run calls within a FlowApp session, and
interior-mutable (Mutex) so a node can write it through &self.