From ad3ec9d97e92e08d656ce78dba7025e1cc0d69de Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 16 Jun 2026 17:32:12 -0400 Subject: [PATCH] chore(phase6): mark tasks complete + record live /run results and follow-ups --- ...stillpending-phase-6-adminui.md.tasks.json | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/docs/plans/2026-06-16-stillpending-phase-6-adminui.md.tasks.json b/docs/plans/2026-06-16-stillpending-phase-6-adminui.md.tasks.json index 9773ba40..da7989bd 100644 --- a/docs/plans/2026-06-16-stillpending-phase-6-adminui.md.tasks.json +++ b/docs/plans/2026-06-16-stillpending-phase-6-adminui.md.tasks.json @@ -3,18 +3,44 @@ "branch": "feat/stillpending-phase-6-adminui", "baseMaster": "156aa900", "designCommit": "dbff29dd", - "executionState": "PLANNED — not started (deferred to after /compact)", + "executionState": "COMPLETE — all 10 tasks done; final integration review = SHIP; live /run acceptance PASS. Ready to merge to master + push.", "tasks": [ - {"id": 452, "subject": "P6 Task 1 (A): Typed editors for OpcUaClient + Historian", "status": "pending"}, - {"id": 453, "subject": "P6 Task 2 (B): isHistorized + historianTagname first-class fields", "status": "pending", "blockedBy": [452]}, - {"id": 454, "subject": "P6 Task 3 (C): Native-alarm HistorizeToAveva opt-out", "status": "pending"}, - {"id": 455, "subject": "P6 Task 4 (D): Galaxy picker pre-fills alarm fields from IsAlarm", "status": "pending", "blockedBy": [454]}, - {"id": 456, "subject": "P6 Task 5 (E): Build-address pickers in protocol-driver Tag editors", "status": "pending", "blockedBy": [453]}, - {"id": 457, "subject": "P6 Task 6 (F): UNS-tree delete for Cluster + Enterprise", "status": "pending"}, - {"id": 458, "subject": "P6 Task 7 (G): Create-new-script from the inline vtag panel", "status": "pending"}, - {"id": 459, "subject": "P6 Task 8: Docs + bookkeeping", "status": "pending", "blockedBy": [452, 453, 454, 455, 456, 457, 458]}, - {"id": 460, "subject": "P6 Task 9: Full build + test + final integration review", "status": "pending", "blockedBy": [452, 453, 454, 455, 456, 457, 458, 459]}, - {"id": 461, "subject": "P6 Task 10: Live /run acceptance (agent-driven)", "status": "pending", "blockedBy": [460]} + {"id": 452, "subject": "P6 Task 1 (A): Typed editors for OpcUaClient + Historian", "status": "completed", "commit": "72d414ad"}, + {"id": 453, "subject": "P6 Task 2 (B): isHistorized + historianTagname first-class fields", "status": "completed", "commit": "c00a5471", "blockedBy": [452]}, + {"id": 454, "subject": "P6 Task 3 (C): Native-alarm HistorizeToAveva opt-out", "status": "completed", "commit": "6a8020e7"}, + {"id": 455, "subject": "P6 Task 4 (D): Galaxy picker pre-fills alarm fields from IsAlarm", "status": "completed", "commit": "069a5f31", "blockedBy": [454]}, + {"id": 456, "subject": "P6 Task 5 (E): Build-address pickers in protocol-driver Tag editors", "status": "completed", "commit": "9a8b8ff6", "blockedBy": [453]}, + {"id": 457, "subject": "P6 Task 6 (F): UNS-tree delete for Cluster + Enterprise", "status": "completed", "commit": "526eebb3"}, + {"id": 458, "subject": "P6 Task 7 (G): Create-new-script from the inline vtag panel", "status": "completed", "commit": "c98625fd"}, + {"id": 459, "subject": "P6 Task 8: Docs + bookkeeping", "status": "completed", "commit": "cbaf1c39"}, + {"id": 460, "subject": "P6 Task 9: Full build + test + final integration review", "status": "completed", "commit": "23f353e7"}, + {"id": 461, "subject": "P6 Task 10: Live /run acceptance (agent-driven)", "status": "completed"} ], + "reviewFixCommit": "68f9eef6", + "finalIntegrationReview": "SHIP (no Critical/Important).", + "liveRun": { + "rig": "docker-dev central-1 rebuilt from branch; :9200 login-disabled; verified via Chrome", + "verified": [ + "Task1: OpcUaClient typed editor renders (was raw-JSON)", + "Task2: Historize checkbox + tagname override; create->reopen round-trip persisted; also renders on raw-JSON + Galaxy paths (driver-agnostic)", + "Task4: Galaxy 'Browse Galaxy' DriverTagPicker shell opens live", + "Task6: Cluster + Enterprise Delete tree actions render (were absent)", + "Task7: 'New script' creates+binds a script and expands the inline Monaco editor" + ], + "notDirectlyDriven": [ + "Task5 Modbus 'Build address' button — shell mechanism proven via Galaxy picker (same DriverTagPicker); Modbus typed editor did not dispatch on the rig because MAIN-modbus-eq is seeded DriverType='Modbus' vs AdminUI 'ModbusTcp' (see followups)", + "Task3 native-alarm 'Historize to AVEVA' checkbox — needs a TagConfig.alarm object; unit-tested + reviewed, not driven this pass" + ] + }, + "followups": { + "modbusDriverTypeMismatch": "Pre-existing: AdminUI uses 'ModbusTcp' (DriverIdentitySection/DriverTypePicker/DriverEditRouter/TagConfigEditorMap/Validator/13 tests) but runtime+rig-seed use 'Modbus' (ModbusDriver.DriverType/DriverTypeName). Rig-seeded Modbus drivers fall to raw-JSON tag editor + mis-dispatch the driver-config page. NOT a P6 regression; reconcile across runtime+AdminUI+seed+tests in a separate effort. Memory: project_modbus_drivertype_mismatch.", + "task2_FU1": "Galaxy re-pick of an alarm attribute resets prior alarm edits (document or preserve).", + "task7_FU2": "Inline-created script dropdown label format could drift (reuse canonical label or re-fetch)." + }, + "decisions": { + "task6": "Option B — ServerCluster has no concurrency token; cluster delete takes no RowVersion (matches existing ClusterEdit.razor), refuse-if-children, NO migration. RowVersion concurrency is a migration-gated follow-up.", + "task4": "Additive optional bool IsAlarm on the in-process Commons/Browsing AttributeInfo browse DTO (NOT a wire/proto contract)." + }, + "deferred": "Item 7 (Hosts page per-driver-instance rows) — F7-runtime-blocked, not implemented.", "lastUpdated": "2026-06-16" }