feat(commons): Flow Debugger outbound kinds, External lane, Pending/Parked outcomes, FlowLifecycleRow

FlowLane.External (3); FlowStepKind.External replaced by ApiCall/DbCall/Notify;
FlowStepOutcome gains Pending/Parked; new FlowLifecycleRow + additive
FlowStep.Lifecycle; FlowEdge gains Async/Spawn (default false). Predictor and
graph-view references renamed compile-only (full work in Tasks 6/7).

Claude-Session: https://claude.ai/code/session_01NcMG6xXdsJbmD2wYAgkK29
This commit is contained in:
Joseph Doherty
2026-09-06 01:37:29 -04:00
parent 3a933e3f68
commit cc1bbf3975
8 changed files with 99 additions and 15 deletions
@@ -385,20 +385,20 @@ public static class FlowShapePredictor
if (receiverText == "ExternalSystem" && member is "Call" or "CachedCall")
{
var (system, dependent) = LiteralOrExpr(args.FirstOrDefault()?.Expression);
_b.AddNode(FlowStepKind.External, _lane, $"ExternalSystem.{member}({system})", dependent, null);
_b.AddNode(FlowStepKind.ApiCall, _lane, $"ExternalSystem.{member}({system})", dependent, null);
return true;
}
if (receiverText == "Database")
{
var (conn, dependent) = LiteralOrExpr(args.FirstOrDefault()?.Expression);
_b.AddNode(FlowStepKind.External, _lane, $"Database.{member}({conn})", dependent, null);
_b.AddNode(FlowStepKind.DbCall, _lane, $"Database.{member}({conn})", dependent, null);
return true;
}
if (receiverText == "Notify" && member == "Send")
{
_b.AddNode(FlowStepKind.External, _lane, "Notify.Send", false, null);
_b.AddNode(FlowStepKind.Notify, _lane, "Notify.Send", false, null);
return true;
}