Follow-ups from #5265 review (Codex P1 + P2), deferred to keep that PR scoped.
1. Per-run tentative scoping (Codex P1). The dedup node writes a shared dedup:<node_id>:tentative set; the DedupCommitSubscriber commits/releases the whole set for whichever run finishes. Under two overlapping runs of the SAME flow, run B's success can commit run A's tentative keys (if A failed, those items are wrongly marked seen — unsafe direction). Proper fix: scope tentative per run (dedup:<node_id>:tentative:<run_id>). Blocked on the engine: the dedup node executor (tinyflows nodes/control_flow/dedup.rs) has no stable run id in NodeContext; needs the engine to thread run identity to the node. Documented as a limitation in the node concurrency doc + host node_contracts overlay.
2. Settle from the run's graph snapshot (Codex P2). The subscriber loads the CURRENT saved flow def at finish, not the graph the run executed; a flow edited mid-run (dedup node deleted/renamed) is mis-settled. Capture the run graph at start.
Both bounded/rare. From #5265.
Follow-ups from #5265 review (Codex P1 + P2), deferred to keep that PR scoped.
1. Per-run tentative scoping (Codex P1). The dedup node writes a shared
dedup:<node_id>:tentativeset; theDedupCommitSubscribercommits/releases the whole set for whichever run finishes. Under two overlapping runs of the SAME flow, run B's success can commit run A's tentative keys (if A failed, those items are wrongly marked seen — unsafe direction). Proper fix: scope tentative per run (dedup:<node_id>:tentative:<run_id>). Blocked on the engine: the dedup node executor (tinyflowsnodes/control_flow/dedup.rs) has no stable run id inNodeContext; needs the engine to thread run identity to the node. Documented as a limitation in the node concurrency doc + host node_contracts overlay.2. Settle from the run's graph snapshot (Codex P2). The subscriber loads the CURRENT saved flow def at finish, not the graph the run executed; a flow edited mid-run (dedup node deleted/renamed) is mis-settled. Capture the run graph at start.
Both bounded/rare. From #5265.