Files
ScadaBridge/docs/plans/2026-09-05-flow-debugger.md.tasks.json
T
Joseph Doherty d11dcb77c5 feat(management): FlowDebug run-method / run-value-change / replay commands (Deployer, active-node gated, inline trace)
Flow Debugger (design 2026-09-05 §7.1): FlowDebugRunMethodCommand / FlowDebugRunValueChangeCommand /
FlowDebugReplayCommand on the per-node ManagementActor (Deployer role; the two run commands
are long-running), all delegating to FlowDebugRunner. RunMethod refuses on a standby with
STANDBY_NODE (ManagementCommandException now carries an optional Code that replaces
COMMAND_FAILED), validates parameters through the real ParameterValidator/SchemaRefResolver
(made public), synthesizes the inbound row (actor = operator, Extra.source = flow-debugger)
and runs the method through InboundScriptExecutor with a trace-sink RouteHelper so the reply
carries the RouteCall row + the site's inline events. RunValueChange does a traced routed
write via IInstanceRouter, then polls IPullTraceEventsClient (interface moved to Commons so
ManagementService can consume it) until a ScriptRun parented to the root settles, else
NO_TRIGGER_WITHIN_WINDOW. Replay reads IAuditLogRepository.GetTraceEventsAsync.

Claude-Session: https://claude.ai/code/session_01GSLkkHKz9JrAtmJjmQK3cP
2026-09-06 00:04:18 -04:00

211 lines
4.7 KiB
JSON

{
"planPath": "docs/plans/2026-09-05-flow-debugger.md",
"tasks": [
{
"id": 0,
"subject": "Task 0: Amend the design doc with the four planning corrections",
"status": "completed"
},
{
"id": 1,
"subject": "Task 1: Audit enums — ScriptTrace channel and four kinds",
"status": "completed",
"blockedBy": [
0
]
},
{
"id": 2,
"subject": "Task 2: Additive Trace / trace-payload fields on the message records",
"status": "completed",
"blockedBy": [
0
]
},
{
"id": 3,
"subject": "Task 3: ApiMethod.TraceAllCalls — entity, EF migration, management command, CLI flag",
"status": "completed",
"blockedBy": [
0
]
},
{
"id": 4,
"subject": "Task 4: FlowStep projection + FlowGraph model + FlowGraphBuilder (pure)",
"status": "completed",
"blockedBy": [
1,
2
]
},
{
"id": 5,
"subject": "Task 5: FlowTraceCollector (site, per run)",
"status": "completed",
"blockedBy": [
0
]
},
{
"id": 6,
"subject": "Task 6: ScriptRuntimeContext — traced flag, trace emission for writes and waits, flag inheritance",
"status": "completed",
"blockedBy": [
4,
5
]
},
{
"id": 7,
"subject": "Task 7: ScriptRunLauncher + ScriptActor — ScriptRun rows, ExecutionId + events, value-change inheritance",
"status": "completed",
"blockedBy": [
6
]
},
{
"id": 8,
"subject": "Task 8: InstanceActor — trace arm for data-sourced writes; Trace on published changes",
"status": "completed",
"blockedBy": [
2
]
},
{
"id": 9,
"subject": "Task 9: DeploymentManagerActor routing — pass Trace, return child id + events",
"status": "completed",
"blockedBy": [
7,
8
]
},
{
"id": 10,
"subject": "Task 10: Wire — site_command.proto trace fields, mapper, golden samples",
"status": "completed",
"blockedBy": [
2,
11
]
},
{
"id": 11,
"subject": "Task 11: Wire — sitestream.proto source_execution_id/trace + PullTraceEvents RPC; site SQLite read by execution ids",
"status": "completed",
"blockedBy": [
2
]
},
{
"id": 12,
"subject": "Task 12: RouteHelper — always-on RouteCall audit row, WithTrace, inline trace sink",
"status": "completed",
"blockedBy": [
1,
2,
4
]
},
{
"id": 13,
"subject": "Task 13: InboundScriptExecutor.ExecuteAsync(trace) + endpoint honours TraceAllCalls",
"status": "completed",
"blockedBy": [
12
]
},
{
"id": 14,
"subject": "Task 14: IAuditLogRepository.GetTraceEventsAsync(rootExecutionId)",
"status": "completed",
"blockedBy": [
1
]
},
{
"id": 15,
"subject": "Task 15: Management commands — FlowDebugRunMethod / RunValueChange / Replay",
"status": "pending",
"blockedBy": [
9,
10,
11,
12,
13,
14
]
},
{
"id": 16,
"subject": "Task 16: CLI flow-debug command group",
"status": "pending",
"blockedBy": [
15
]
},
{
"id": 17,
"subject": "Task 17: FlowShapePredictor (Script Analysis)",
"status": "pending",
"blockedBy": [
4
]
},
{
"id": 18,
"subject": "Task 18: Central UI service — IFlowDebugService / FlowDebugService",
"status": "pending",
"blockedBy": [
15,
17
]
},
{
"id": 19,
"subject": "Task 19: FlowGraphView — custom SVG swimlane renderer",
"status": "pending",
"blockedBy": [
4
]
},
{
"id": 20,
"subject": "Task 20: Flow Debugger page — toolbar, inputs, predicted graph, run, detail panel",
"status": "pending",
"blockedBy": [
18,
19
]
},
{
"id": 21,
"subject": "Task 21: Drill-ins and the TraceAllCalls checkbox",
"status": "pending",
"blockedBy": [
3,
20
]
},
{
"id": 22,
"subject": "Task 22: Rig — retention override, redeploy, verification step H",
"status": "pending",
"blockedBy": [
16,
20,
21
]
},
{
"id": 23,
"subject": "Task 23: Documentation sweep",
"status": "pending",
"blockedBy": [
22
]
}
],
"lastUpdated": "2026-09-06T03:58:13.917546+00:00"
}