diff --git a/docs/plans/2026-09-08-flow-debugger-script-entry.md b/docs/plans/2026-09-08-flow-debugger-script-entry.md index ae68b75d..bbfd0f2e 100644 --- a/docs/plans/2026-09-08-flow-debugger-script-entry.md +++ b/docs/plans/2026-09-08-flow-debugger-script-entry.md @@ -1204,3 +1204,15 @@ git commit -am "docs: flow debugger script entry — component specs, CLAUDE.md, 6. `dotnet test tests/ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests --filter "FullyQualifiedName~FlowDebuggerTests"` → all pass. 7. Browser (Claude in Chrome): open `http://localhost:9000/deployment/flow-debugger`, pick Site script → site-a → DelmiaSim01 → `OutboundDemo`, confirm the parameter form / no-params note, Run, graph completes; then pick a ValueChange script on the same instance (if seeded) and confirm the value field names its attribute. 8. Record outcomes in the plan ledger; hand back to the user for merge/push (finishing-a-development-branch). + +--- + +## Gate evidence (2026-09-08, branch head `7792b76b` + text fixes) + +- **Build:** `dotnet build ZB.MOM.WW.ScadaBridge.slnx` — 0 warnings, 0 errors. +- **Full test run** (`dotnet test` on the slnx, 30 projects): all pass except the 11 known role-negative Playwright tests on the login-disabled rig, the 2 new script-entry Playwright tests (run against the pre-rebuild image; pass after the rebuild, below), and `SiteAlarmAggregatorActorTests.Stream_GivenUp_After_MaxRetries_Reopens_On_Reconcile_Tick`, which passes in isolation (30/30) and is untouched by this branch (load-induced flake). +- **Targeted suites after the last fixes:** ManagementService.Tests 631/631 (FlowDebugRunnerTests 34), CentralUI.Tests 1280/1280 (FlowDebuggerPageTests 24, FlowDebugServiceTests 31), CLI.Tests 465/465, Commons.Tests (ScriptTriggerAttributeTests 15, FlowGraphBuilderTests 24). +- **Reviews:** per-task spec + code reviews per classification; a whole-branch review (opus) found I1 (transport faults escaped without a root row), I2 (write-kind completion not script-specific) and I3 (circuit-lifetime script cache) — all fixed (`ca9be68d`, `7197c398`) and re-reviewed (approved; two Minor test gaps left: `MaxWaitSeconds` clamp and the unresolved-option Ask fallback are untested). +- **Rig:** `bash docker/deploy.sh` rebuilt all 8 nodes; `FLOW_ONLY=1 DELMIA_API_KEY=… bash docker/verify-delmia-notifier.sh` → H YES (live 11 / replay 17), **H2 YES** (`run-script` on `DelmiaSim01`/`OutboundDemo`: kinds RouteCall,ApiCall,CachedSubmit,DbWriteCached,CachedResolve,NotifySend,ScriptRun), I YES. +- **Playwright** `FlowDebuggerTests` on the rebuilt rig: 4/4 (incl. `ScriptEntry_LiveRunOfACallScript_InBrowser_Completes`, `ScriptEntry_WriteKindScript_ShowsTheValueFieldForTheTriggerAttribute`). +- **Browser (Claude in Chrome, `localhost:9000`):** Site script → Test Plant A → DelmiaSim01 → picker lists `DelmiaReceiverSimulator (ValueChange: DelmiaReceiver.RecipeDownloadFlag)`, `OutboundDemo (Call)`, `ProcessRecipeDownload (Call)`; `ProcessRecipeDownload` renders the five-field `ParameterValueForm`; `OutboundDemo` shows *This script takes no parameters* and a Live run completed in 21 ms, 5 steps, 1 boundary, all External nodes Ok; `DelmiaReceiverSimulator` shows *New value for DelmiaReceiver.RecipeDownloadFlag* with Run disabled until a value is typed. diff --git a/docs/plans/2026-09-08-flow-debugger-script-entry.md.tasks.json b/docs/plans/2026-09-08-flow-debugger-script-entry.md.tasks.json index daa5ca6c..952a23b7 100644 --- a/docs/plans/2026-09-08-flow-debugger-script-entry.md.tasks.json +++ b/docs/plans/2026-09-08-flow-debugger-script-entry.md.tasks.json @@ -1,19 +1,103 @@ { "planPath": "docs/plans/2026-09-08-flow-debugger-script-entry.md", "tasks": [ - {"id": 1, "subject": "Task 1: ScriptTriggerAttribute helper (Commons)", "status": "pending"}, - {"id": 2, "subject": "Task 2: FlowDebugRunScriptCommand record", "status": "pending"}, - {"id": 3, "subject": "Task 3: Extract WriteAndPollAsync from RunValueChangeAsync", "status": "pending"}, - {"id": 4, "subject": "Task 4: FlowDebugRunner.RunScriptAsync", "status": "pending", "blockedBy": [1, 2, 3]}, - {"id": 5, "subject": "Task 5: ManagementActor dispatch, role matrix, long-running registration", "status": "pending", "blockedBy": [4]}, - {"id": 6, "subject": "Task 6: FlowGraphBuilder RouteCall-root pin", "status": "pending"}, - {"id": 7, "subject": "Task 7: ParameterValueForm.ValidChanged", "status": "pending"}, - {"id": 8, "subject": "Task 8: IFlowDebugService / FlowDebugService script entry", "status": "pending", "blockedBy": [1, 2]}, - {"id": 9, "subject": "Task 9: Flow Debugger page script picker + inputs card", "status": "pending", "blockedBy": [7, 8]}, - {"id": 10, "subject": "Task 10: CLI flow-debug run-script", "status": "pending", "blockedBy": [2]}, - {"id": 11, "subject": "Task 11: Playwright script run + verify script leg", "status": "pending", "blockedBy": [9, 10]}, - {"id": 12, "subject": "Task 12: Documentation", "status": "pending", "blockedBy": [5, 8, 10]}, - {"id": 13, "subject": "Task 13: Gate — build, full tests, rig, browser", "status": "pending", "blockedBy": [11, 12]} + { + "id": 1, + "subject": "Task 1: ScriptTriggerAttribute helper (Commons)", + "status": "completed" + }, + { + "id": 2, + "subject": "Task 2: FlowDebugRunScriptCommand record", + "status": "completed" + }, + { + "id": 3, + "subject": "Task 3: Extract WriteAndPollAsync from RunValueChangeAsync", + "status": "completed" + }, + { + "id": 4, + "subject": "Task 4: FlowDebugRunner.RunScriptAsync", + "status": "completed", + "blockedBy": [ + 1, + 2, + 3 + ] + }, + { + "id": 5, + "subject": "Task 5: ManagementActor dispatch, role matrix, long-running registration", + "status": "completed", + "blockedBy": [ + 4 + ] + }, + { + "id": 6, + "subject": "Task 6: FlowGraphBuilder RouteCall-root pin", + "status": "completed" + }, + { + "id": 7, + "subject": "Task 7: ParameterValueForm.ValidChanged", + "status": "completed" + }, + { + "id": 8, + "subject": "Task 8: IFlowDebugService / FlowDebugService script entry", + "status": "completed", + "blockedBy": [ + 1, + 2 + ] + }, + { + "id": 9, + "subject": "Task 9: Flow Debugger page script picker + inputs card", + "status": "completed", + "blockedBy": [ + 7, + 8 + ] + }, + { + "id": 10, + "subject": "Task 10: CLI flow-debug run-script", + "status": "completed", + "blockedBy": [ + 2 + ] + }, + { + "id": 11, + "subject": "Task 11: Playwright script run + verify script leg", + "status": "completed", + "blockedBy": [ + 9, + 10 + ] + }, + { + "id": 12, + "subject": "Task 12: Documentation", + "status": "completed", + "blockedBy": [ + 5, + 8, + 10 + ] + }, + { + "id": 13, + "subject": "Task 13: Gate \u2014 build, full tests, rig, browser", + "status": "completed", + "blockedBy": [ + 11, + 12 + ] + } ], - "lastUpdated": "2026-09-08T00:00:00Z" + "lastUpdated": "2026-09-08T05:47:49Z" }