chore(plans): flow-debugger step logs — all 15 tasks complete, gate evidence

This commit is contained in:
Joseph Doherty
2026-09-09 13:03:37 -04:00
parent bc586b6249
commit 0bacc3630e
2 changed files with 18 additions and 16 deletions
@@ -2,6 +2,8 @@
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers-extended-cc:executing-plans to implement this plan task-by-task. > **For Claude:** REQUIRED SUB-SKILL: Use superpowers-extended-cc:executing-plans to implement this plan task-by-task.
**Status:** all 15 tasks complete 2026-09-09 (branch `feat/flow-debugger-step-logs`); every task spec- and code-reviewed; 7 test projects green (4 499 tests); rig rebuilt via `docker/deploy.sh`, `verify-delmia-notifier.sh` H/H2/I/**J** all YES (J root `5793ddc2-5273-4e62-86c2-ccfc8de0e080`); browser-verified. Deviations from the plan text: `FlowTraceCollector.Add(evt, lowPriority:)` instead of `AddLowPriority` (Commons 3-public-method constraint); inline shared scripts share the caller's `ScriptLogger` (design §5, not a per-child logger); `LogsTruncated` clears once a refresh merges in more log rows; the inbound editor host `InboundScriptHost` also mirrors `Log`.
**Goal:** A traced Flow Debugger run shows, on the node that produced them, the exception a failing step threw (type, message, stack) and every log line the script or the runtime wrote during that step — in Live and in Replay. **Goal:** A traced Flow Debugger run shows, on the node that produced them, the exception a failing step threw (type, message, stack) and every log line the script or the runtime wrote during that step — in Live and in Replay.
**Architecture:** One new audit kind, `ScriptTrace.ScriptLog`, one row per line, riding the existing collector (Live) and audit store (Replay); `FlowGraphBuilder` folds the rows into their owning step (`stepEventId`, else the execution's anchor step) and never draws them as nodes. Scripts get a `Log` global on all four compile surfaces; the site context wraps its own logger while traced so runtime warnings inside a helper step land on that step. Exception detail is the `errorDetail` field that already exists on `AuditDetails` — populated on the site `ScriptRun` row and the central inbound row, projected onto `FlowStep.ErrorDetail`. **Architecture:** One new audit kind, `ScriptTrace.ScriptLog`, one row per line, riding the existing collector (Live) and audit store (Replay); `FlowGraphBuilder` folds the rows into their owning step (`stepEventId`, else the execution's anchor step) and never draws them as nodes. Scripts get a `Log` global on all four compile surfaces; the site context wraps its own logger while traced so runtime warnings inside a helper step land on that step. Exception detail is the `errorDetail` field that already exists on `AuditDetails` — populated on the site `ScriptRun` row and the central inbound row, projected onto `FlowStep.ErrorDetail`.
@@ -4,17 +4,17 @@
{ {
"id": 1, "id": 1,
"subject": "Task 1: Commons \u2014 ScriptLog kind, trace extra fields, FlowStep.ErrorDetail/Logs", "subject": "Task 1: Commons \u2014 ScriptLog kind, trace extra fields, FlowStep.ErrorDetail/Logs",
"status": "pending" "status": "completed"
}, },
{ {
"id": 2, "id": 2,
"subject": "Task 2: Commons \u2014 FlowTraceCollector.AddLowPriority + LogsTruncated", "subject": "Task 2: Commons \u2014 FlowTraceCollector.AddLowPriority + LogsTruncated",
"status": "pending" "status": "completed"
}, },
{ {
"id": 3, "id": 3,
"subject": "Task 3: Commons \u2014 FlowGraphBuilder attaches log lines to steps", "subject": "Task 3: Commons \u2014 FlowGraphBuilder attaches log lines to steps",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
1 1
] ]
@@ -22,7 +22,7 @@
{ {
"id": 4, "id": 4,
"subject": "Task 4: SiteRuntime \u2014 ScriptLogger, TraceStepScope, TraceCapturingLogger", "subject": "Task 4: SiteRuntime \u2014 ScriptLogger, TraceStepScope, TraceCapturingLogger",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
1 1
] ]
@@ -30,7 +30,7 @@
{ {
"id": 5, "id": 5,
"subject": "Task 5: SiteRuntime \u2014 wire Log into ScriptRuntimeContext + ScriptGlobals", "subject": "Task 5: SiteRuntime \u2014 wire Log into ScriptRuntimeContext + ScriptGlobals",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
1, 1,
2, 2,
@@ -40,7 +40,7 @@
{ {
"id": 6, "id": 6,
"subject": "Task 6: SiteRuntime \u2014 launcher errorDetail, dropped-lines flush, MaxLogLinesPerRun", "subject": "Task 6: SiteRuntime \u2014 launcher errorDetail, dropped-lines flush, MaxLogLinesPerRun",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
5 5
] ]
@@ -48,7 +48,7 @@
{ {
"id": 7, "id": 7,
"subject": "Task 7: Script surfaces \u2014 ScriptCompileSurface.Log, sandbox mirrors, trust pin", "subject": "Task 7: Script surfaces \u2014 ScriptCompileSurface.Log, sandbox mirrors, trust pin",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
5 5
] ]
@@ -56,7 +56,7 @@
{ {
"id": 8, "id": 8,
"subject": "Task 8: InboundAPI \u2014 InboundScriptContext.Log + MaxLogLinesPerRun", "subject": "Task 8: InboundAPI \u2014 InboundScriptContext.Log + MaxLogLinesPerRun",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
1 1
] ]
@@ -64,7 +64,7 @@
{ {
"id": 9, "id": 9,
"subject": "Task 9: InboundAPI \u2014 exception detail on the inbound row", "subject": "Task 9: InboundAPI \u2014 exception detail on the inbound row",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
8 8
] ]
@@ -72,7 +72,7 @@
{ {
"id": 10, "id": 10,
"subject": "Task 10: ManagementService \u2014 runner inbound row ErrorDetail; LogsTruncated on results", "subject": "Task 10: ManagementService \u2014 runner inbound row ErrorDetail; LogsTruncated on results",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
9 9
] ]
@@ -80,7 +80,7 @@
{ {
"id": 11, "id": 11,
"subject": "Task 11: CentralUI \u2014 FlowGraphView log badge + failed-node exception subtitle", "subject": "Task 11: CentralUI \u2014 FlowGraphView log badge + failed-node exception subtitle",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
1 1
] ]
@@ -88,7 +88,7 @@
{ {
"id": 12, "id": 12,
"subject": "Task 12: CentralUI \u2014 FlowStepDetail Log tab", "subject": "Task 12: CentralUI \u2014 FlowStepDetail Log tab",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
1 1
] ]
@@ -96,7 +96,7 @@
{ {
"id": 13, "id": 13,
"subject": "Task 13: CentralUI \u2014 Flow Debugger page strip counts, truncation notes, selection hookup", "subject": "Task 13: CentralUI \u2014 Flow Debugger page strip counts, truncation notes, selection hookup",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
3, 3,
10, 10,
@@ -107,7 +107,7 @@
{ {
"id": 14, "id": 14,
"subject": "Task 14: CLI \u2014 logs column and --show-logs", "subject": "Task 14: CLI \u2014 logs column and --show-logs",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
3 3
] ]
@@ -115,7 +115,7 @@
{ {
"id": 15, "id": 15,
"subject": "Task 15: Specs, register, rig demo + verification step J, full build", "subject": "Task 15: Specs, register, rig demo + verification step J, full build",
"status": "pending", "status": "completed",
"blockedBy": [ "blockedBy": [
6, 6,
7, 7,
@@ -124,5 +124,5 @@
] ]
} }
], ],
"lastUpdated": "2026-09-09T15:20:12.803167+00:00" "lastUpdated": "2026-09-09T17:03:37.474386+00:00"
} }