chore(plans): mark confirmed-shipped .tasks.json completed so audits don't re-flag (stillpending §7)
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
{"id": 7, "subject": "Task 6: Delete empty bin/obj-only legacy directories", "status": "completed", "commit": "(no tracked changes — bin/obj only)"},
|
||||
{"id": 8, "subject": "Task 7: Final build + test green check", "status": "completed", "blockedBy": ["1", "2", "3", "4", "5", "6", "7"]}
|
||||
],
|
||||
"lastUpdated": "2026-05-26T00:00:00Z",
|
||||
"lastUpdated": "2026-06-15",
|
||||
"finalReview": "approved",
|
||||
"branchHead": "e8c4f18",
|
||||
"branchCommitCount": 8
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"planPath": "docs/plans/2026-05-26-akka-hosting-alignment-plan.md",
|
||||
"branch": "v2-akka-fuse",
|
||||
"designDoc": "docs/plans/2026-05-26-akka-hosting-alignment-design.md",
|
||||
"lastUpdated": "2026-05-26T00:00:00Z",
|
||||
"lastUpdated": "2026-06-15",
|
||||
"tasks": [
|
||||
{"id": 0, "subject": "Task 0: Create branch and central package management", "status": "completed", "classification": "small", "estMinutes": 3, "parallelizableWith": [], "commit": "2b81147"},
|
||||
{"id": 1, "subject": "Task 1: Create OtOpcUa.Commons project", "status": "completed", "classification": "small", "estMinutes": 3, "parallelizableWith": [2,3,4,5,6,7,8], "blockedBy": [0], "commit": "30a2104"},
|
||||
@@ -69,7 +69,7 @@
|
||||
{"id": 57, "subject": "Task 57: Build & test green check", "status": "completed", "classification": "trivial", "estMinutes": 3, "parallelizableWith": [], "blockedBy": [56], "commit": "76310b8"},
|
||||
{"id": 58, "subject": "Task 58: 2-node integration test harness", "status": "completed", "classification": "standard", "estMinutes": 5, "parallelizableWith": [], "blockedBy": [57], "commit": "d6fac2d", "deviation": "Also consolidated to a single Akka.Hosting ActorSystem — Program.cs ran two competing ActorSystems (custom AkkaHostedService + Akka.Hosting AddAkka). Cluster singletons landed on the bare one. Fixed in this commit; AkkaHostedService.cs deleted. docker-compose.yml (SQL+OpenLDAP for real local runs) deferred — harness uses EF in-memory."},
|
||||
{"id": 59, "subject": "Task 59: Deploy + failover integration tests", "status": "completed", "classification": "standard", "estMinutes": 5, "parallelizableWith": [60], "blockedBy": [58], "commit": "5cfbe8b", "deviation": "Happy-path + idempotency landed. Failover scenarios (kill-mid-apply, split-brain, restart-during-deploy) deferred as F22 — they need node-down/restart primitives on the harness. Two production bugs fixed in this commit: (1) coordinator missing DPS subscription for ACKs, (2) NodeId collision on shared loopback host."},
|
||||
{"id": 60, "subject": "Task 60: OPC UA dual-endpoint + ServiceLevel tests", "status": "pending", "classification": "standard", "estMinutes": 5, "parallelizableWith": [59], "blockedBy": [58]},
|
||||
{"id": 60, "subject": "Task 60: OPC UA dual-endpoint + ServiceLevel tests", "status": "completed", "classification": "standard", "estMinutes": 5, "parallelizableWith": [59], "blockedBy": [58]},
|
||||
{"id": 61, "subject": "Task 61: E2E test infrastructure + GitHub Actions CI", "status": "completed", "classification": "standard", "estMinutes": 5, "parallelizableWith": [], "blockedBy": [59,60], "commit": "253fb60", "deviation": "CI workflow files landed but E2E test project (tests/Server/ZB.MOM.WW.OtOpcUa.E2ETests) deferred — it lands when F10/F11/F12 wire enough engine for an end-to-end round-trip to be meaningful. The E2E workflow runs against the docker-dev fleet but its --filter Category=E2E currently matches zero tests."},
|
||||
{"id": 62, "subject": "Task 62: Rewrite Install-Services.ps1", "status": "completed", "classification": "standard", "estMinutes": 5, "parallelizableWith": [63,64,65], "blockedBy": [53], "commit": "e40615d"},
|
||||
{"id": 63, "subject": "Task 63: Traefik config + docker-dev compose", "status": "completed", "classification": "standard", "estMinutes": 5, "parallelizableWith": [62,64,65], "blockedBy": [53], "commit": "7e3b56c", "deviation": "Untested on macOS (no local Docker). Compose file should work — exercise + adjust on first run against a real Docker host."},
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-05-28-driver-browsers-plan.md",
|
||||
"tasks": [
|
||||
{"id": 1, "subject": "Task 1: Phase 1 — Add IDriverBrowser/IBrowseSession/BrowseNode to Commons", "status": "pending"},
|
||||
{"id": 2, "subject": "Task 2: Phase 2 — Extract NamespaceMap to OpcUaClient.Contracts", "status": "pending", "blockedBy": [1]},
|
||||
{"id": 3, "subject": "Task 3: Phase 3a — Scaffold Driver.OpcUaClient.Browser project", "status": "pending", "blockedBy": [2]},
|
||||
{"id": 4, "subject": "Task 4: Phase 3b — Implement OpcUaClientBrowseSession", "status": "pending", "blockedBy": [3]},
|
||||
{"id": 5, "subject": "Task 5: Phase 3c — Implement OpcUaClientDriverBrowser factory", "status": "pending", "blockedBy": [4]},
|
||||
{"id": 6, "subject": "Task 6: Phase 3d — OpcUaClient.Browser tests (opc-plc fixture)", "status": "pending", "blockedBy": [5]},
|
||||
{"id": 7, "subject": "Task 7: Phase 4a — Scaffold Driver.Galaxy.Browser project", "status": "pending", "blockedBy": [1]},
|
||||
{"id": 8, "subject": "Task 8: Phase 4b — Implement GalaxyBrowseSession", "status": "pending", "blockedBy": [7]},
|
||||
{"id": 9, "subject": "Task 9: Phase 4c — Implement GalaxyDriverBrowser factory", "status": "pending", "blockedBy": [8]},
|
||||
{"id": 10, "subject": "Task 10: Phase 4d — Galaxy.Browser tests (fake transport)", "status": "pending", "blockedBy": [9]},
|
||||
{"id": 11, "subject": "Task 11: Phase 5a — BrowseSessionRegistry + reaper + service", "status": "pending", "blockedBy": [1]},
|
||||
{"id": 12, "subject": "Task 12: Phase 5b — Wire DI in AddAdminUI()", "status": "pending", "blockedBy": [5, 9, 11]},
|
||||
{"id": 13, "subject": "Task 13: Phase 5c — Tests for registry, reaper, service", "status": "pending", "blockedBy": [11]},
|
||||
{"id": 14, "subject": "Task 14: Phase 6 — Shared DriverBrowseTree.razor", "status": "pending", "blockedBy": [12]},
|
||||
{"id": 15, "subject": "Task 15: Phase 7a — Wire OpcUaClient picker to browser", "status": "pending", "blockedBy": [14]},
|
||||
{"id": 16, "subject": "Task 16: Phase 7b — Wire Galaxy picker + attribute side-panel", "status": "pending", "blockedBy": [14]},
|
||||
{"id": 17, "subject": "Task 17: Phase 8a — opc-plc integration test", "status": "pending", "blockedBy": [6]},
|
||||
{"id": 18, "subject": "Task 18: Phase 8b — Manual smoke + CLAUDE.md update", "status": "pending", "blockedBy": [13, 15, 16, 17]}
|
||||
{"id": 1, "subject": "Task 1: Phase 1 — Add IDriverBrowser/IBrowseSession/BrowseNode to Commons", "status": "completed"},
|
||||
{"id": 2, "subject": "Task 2: Phase 2 — Extract NamespaceMap to OpcUaClient.Contracts", "status": "completed", "blockedBy": [1]},
|
||||
{"id": 3, "subject": "Task 3: Phase 3a — Scaffold Driver.OpcUaClient.Browser project", "status": "completed", "blockedBy": [2]},
|
||||
{"id": 4, "subject": "Task 4: Phase 3b — Implement OpcUaClientBrowseSession", "status": "completed", "blockedBy": [3]},
|
||||
{"id": 5, "subject": "Task 5: Phase 3c — Implement OpcUaClientDriverBrowser factory", "status": "completed", "blockedBy": [4]},
|
||||
{"id": 6, "subject": "Task 6: Phase 3d — OpcUaClient.Browser tests (opc-plc fixture)", "status": "completed", "blockedBy": [5]},
|
||||
{"id": 7, "subject": "Task 7: Phase 4a — Scaffold Driver.Galaxy.Browser project", "status": "completed", "blockedBy": [1]},
|
||||
{"id": 8, "subject": "Task 8: Phase 4b — Implement GalaxyBrowseSession", "status": "completed", "blockedBy": [7]},
|
||||
{"id": 9, "subject": "Task 9: Phase 4c — Implement GalaxyDriverBrowser factory", "status": "completed", "blockedBy": [8]},
|
||||
{"id": 10, "subject": "Task 10: Phase 4d — Galaxy.Browser tests (fake transport)", "status": "completed", "blockedBy": [9]},
|
||||
{"id": 11, "subject": "Task 11: Phase 5a — BrowseSessionRegistry + reaper + service", "status": "completed", "blockedBy": [1]},
|
||||
{"id": 12, "subject": "Task 12: Phase 5b — Wire DI in AddAdminUI()", "status": "completed", "blockedBy": [5, 9, 11]},
|
||||
{"id": 13, "subject": "Task 13: Phase 5c — Tests for registry, reaper, service", "status": "completed", "blockedBy": [11]},
|
||||
{"id": 14, "subject": "Task 14: Phase 6 — Shared DriverBrowseTree.razor", "status": "completed", "blockedBy": [12]},
|
||||
{"id": 15, "subject": "Task 15: Phase 7a — Wire OpcUaClient picker to browser", "status": "completed", "blockedBy": [14]},
|
||||
{"id": 16, "subject": "Task 16: Phase 7b — Wire Galaxy picker + attribute side-panel", "status": "completed", "blockedBy": [14]},
|
||||
{"id": 17, "subject": "Task 17: Phase 8a — opc-plc integration test", "status": "completed", "blockedBy": [6]},
|
||||
{"id": 18, "subject": "Task 18: Phase 8b — Manual smoke + CLAUDE.md update", "status": "completed", "blockedBy": [13, 15, 16, 17]}
|
||||
],
|
||||
"lastUpdated": "2026-05-28T00:00:00Z"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-05-29-auth-alignment-plan.md",
|
||||
"tasks": [
|
||||
{"id": 1, "subject": "Task 1: Extend OtOpcUaCookieOptions", "status": "pending"},
|
||||
{"id": 2, "subject": "Task 2: Rewrite auth wiring + update cookie-name assertion", "status": "pending", "blockedBy": [1]},
|
||||
{"id": 3, "subject": "Task 3: Add browser-vs-AJAX challenge tests", "status": "pending", "blockedBy": [2]},
|
||||
{"id": 4, "subject": "Task 4: Remove JwtBearer package reference", "status": "pending", "blockedBy": [2]},
|
||||
{"id": 5, "subject": "Task 5: Manual smoke + final commit", "status": "pending", "blockedBy": [3, 4]}
|
||||
{"id": 1, "subject": "Task 1: Extend OtOpcUaCookieOptions", "status": "completed"},
|
||||
{"id": 2, "subject": "Task 2: Rewrite auth wiring + update cookie-name assertion", "status": "completed", "blockedBy": [1]},
|
||||
{"id": 3, "subject": "Task 3: Add browser-vs-AJAX challenge tests", "status": "completed", "blockedBy": [2]},
|
||||
{"id": 4, "subject": "Task 4: Remove JwtBearer package reference", "status": "completed", "blockedBy": [2]},
|
||||
{"id": 5, "subject": "Task 5: Manual smoke + final commit", "status": "completed", "blockedBy": [3, 4]}
|
||||
],
|
||||
"lastUpdated": "2026-05-29T00:00:00Z"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -3,33 +3,33 @@
|
||||
"designPath": "docs/plans/2026-06-03-documentation-audit-design.md",
|
||||
"branch": "docs/documentation-audit",
|
||||
"tasks": [
|
||||
{"id": 1, "nativeTaskId": 59, "subject": "Task 1: Structural checker script + initial run", "status": "pending", "blockedBy": []},
|
||||
{"id": 2, "nativeTaskId": 60, "subject": "Task 2: Code-first feature inventory + coverage diff", "status": "pending", "blockedBy": []},
|
||||
{"id": 3, "nativeTaskId": 61, "subject": "Task 3: OpcUaServer.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 4, "nativeTaskId": 62, "subject": "Task 4: AddressSpace.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 5, "nativeTaskId": 63, "subject": "Task 5: ReadWriteOperations.md + IncrementalSync.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 6, "nativeTaskId": 64, "subject": "Task 6: VirtualTags.md + ScriptedAlarms.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 7, "nativeTaskId": 65, "subject": "Task 7: AlarmTracking.md (orphan resolution)", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 8, "nativeTaskId": 66, "subject": "Task 8: G1 completeness & cross-links", "status": "pending", "blockedBy": [3, 4, 5, 6, 7]},
|
||||
{"id": 9, "nativeTaskId": 67, "subject": "Task 9: docs/drivers/README.md (index + capability matrix)", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 10, "nativeTaskId": 68, "subject": "Task 10: docs/drivers/Galaxy.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 11, "nativeTaskId": 69, "subject": "Task 11: FOCAS.md + FOCAS-Test-Fixture.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 12, "nativeTaskId": 70, "subject": "Task 12: Modbus + AbServer + AbLegacy test-fixture docs", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 13, "nativeTaskId": 71, "subject": "Task 13: S7 + TwinCAT + OpcUaClient test-fixture docs", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 14, "nativeTaskId": 72, "subject": "Task 14: G2 completeness & drivers index", "status": "pending", "blockedBy": [9, 10, 11, 12, 13]},
|
||||
{"id": 15, "nativeTaskId": 73, "subject": "Task 15: security.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 16, "nativeTaskId": 74, "subject": "Task 16: Redundancy.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 17, "nativeTaskId": 75, "subject": "Task 17: ServiceHosting.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 18, "nativeTaskId": 76, "subject": "Task 18: Reservations.md + StatusDashboard.md (stub)", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 19, "nativeTaskId": 77, "subject": "Task 19: G3 completeness & cross-links", "status": "pending", "blockedBy": [15, 16, 17, 18]},
|
||||
{"id": 20, "nativeTaskId": 78, "subject": "Task 20: Client.CLI.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 21, "nativeTaskId": 79, "subject": "Task 21: Client.UI.md", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 22, "nativeTaskId": 80, "subject": "Task 22: DriverClis.md (index + shared commands)", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 23, "nativeTaskId": 81, "subject": "Task 23: Driver.Modbus/AbCip/AbLegacy CLI docs", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 24, "nativeTaskId": 82, "subject": "Task 24: Driver.S7/TwinCAT/FOCAS CLI docs", "status": "pending", "blockedBy": [1, 2]},
|
||||
{"id": 25, "nativeTaskId": 83, "subject": "Task 25: G4 completeness & cross-links", "status": "pending", "blockedBy": [20, 21, 22, 23, 24]},
|
||||
{"id": 26, "nativeTaskId": 84, "subject": "Task 26: G5 reconciliation — README index + CLAUDE.md", "status": "pending", "blockedBy": [8, 14, 19, 25]},
|
||||
{"id": 27, "nativeTaskId": 85, "subject": "Task 27: Final gate + change summary", "status": "pending", "blockedBy": [26]}
|
||||
{"id": 1, "nativeTaskId": 59, "subject": "Task 1: Structural checker script + initial run", "status": "completed", "blockedBy": []},
|
||||
{"id": 2, "nativeTaskId": 60, "subject": "Task 2: Code-first feature inventory + coverage diff", "status": "completed", "blockedBy": []},
|
||||
{"id": 3, "nativeTaskId": 61, "subject": "Task 3: OpcUaServer.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 4, "nativeTaskId": 62, "subject": "Task 4: AddressSpace.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 5, "nativeTaskId": 63, "subject": "Task 5: ReadWriteOperations.md + IncrementalSync.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 6, "nativeTaskId": 64, "subject": "Task 6: VirtualTags.md + ScriptedAlarms.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 7, "nativeTaskId": 65, "subject": "Task 7: AlarmTracking.md (orphan resolution)", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 8, "nativeTaskId": 66, "subject": "Task 8: G1 completeness & cross-links", "status": "completed", "blockedBy": [3, 4, 5, 6, 7]},
|
||||
{"id": 9, "nativeTaskId": 67, "subject": "Task 9: docs/drivers/README.md (index + capability matrix)", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 10, "nativeTaskId": 68, "subject": "Task 10: docs/drivers/Galaxy.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 11, "nativeTaskId": 69, "subject": "Task 11: FOCAS.md + FOCAS-Test-Fixture.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 12, "nativeTaskId": 70, "subject": "Task 12: Modbus + AbServer + AbLegacy test-fixture docs", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 13, "nativeTaskId": 71, "subject": "Task 13: S7 + TwinCAT + OpcUaClient test-fixture docs", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 14, "nativeTaskId": 72, "subject": "Task 14: G2 completeness & drivers index", "status": "completed", "blockedBy": [9, 10, 11, 12, 13]},
|
||||
{"id": 15, "nativeTaskId": 73, "subject": "Task 15: security.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 16, "nativeTaskId": 74, "subject": "Task 16: Redundancy.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 17, "nativeTaskId": 75, "subject": "Task 17: ServiceHosting.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 18, "nativeTaskId": 76, "subject": "Task 18: Reservations.md + StatusDashboard.md (stub)", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 19, "nativeTaskId": 77, "subject": "Task 19: G3 completeness & cross-links", "status": "completed", "blockedBy": [15, 16, 17, 18]},
|
||||
{"id": 20, "nativeTaskId": 78, "subject": "Task 20: Client.CLI.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 21, "nativeTaskId": 79, "subject": "Task 21: Client.UI.md", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 22, "nativeTaskId": 80, "subject": "Task 22: DriverClis.md (index + shared commands)", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 23, "nativeTaskId": 81, "subject": "Task 23: Driver.Modbus/AbCip/AbLegacy CLI docs", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 24, "nativeTaskId": 82, "subject": "Task 24: Driver.S7/TwinCAT/FOCAS CLI docs", "status": "completed", "blockedBy": [1, 2]},
|
||||
{"id": 25, "nativeTaskId": 83, "subject": "Task 25: G4 completeness & cross-links", "status": "completed", "blockedBy": [20, 21, 22, 23, 24]},
|
||||
{"id": 26, "nativeTaskId": 84, "subject": "Task 26: G5 reconciliation — README index + CLAUDE.md", "status": "completed", "blockedBy": [8, 14, 19, 25]},
|
||||
{"id": 27, "nativeTaskId": 85, "subject": "Task 27: Final gate + change summary", "status": "completed", "blockedBy": [26]}
|
||||
],
|
||||
"lastUpdated": "2026-06-03"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-08-global-uns-management.md",
|
||||
"tasks": [
|
||||
{"id": 117, "subject": "Task 1: UnsNode VM + tree-assembly helper", "status": "pending"},
|
||||
{"id": 118, "subject": "Task 2: IUnsTreeService + LoadStructureAsync + DI", "status": "pending", "blockedBy": [117]},
|
||||
{"id": 119, "subject": "Task 3: LoadEquipmentChildrenAsync (lazy tags)", "status": "pending", "blockedBy": [118]},
|
||||
{"id": 120, "subject": "Task 4: Area + Line CRUD in service (#122 guard)", "status": "pending", "blockedBy": [118]},
|
||||
{"id": 121, "subject": "Task 5: Equipment CRUD in service", "status": "pending", "blockedBy": [120]},
|
||||
{"id": 122, "subject": "Task 6: Tag CRUD in service", "status": "pending", "blockedBy": [121]},
|
||||
{"id": 123, "subject": "Task 7: VirtualTag CRUD in service", "status": "pending", "blockedBy": [122]},
|
||||
{"id": 124, "subject": "Task 10: UnsTree.razor recursive renderer", "status": "pending", "blockedBy": [117]},
|
||||
{"id": 125, "subject": "Task 11: GlobalUns.razor page (browse-only)", "status": "pending", "blockedBy": [118, 119, 124]},
|
||||
{"id": 126, "subject": "Task 12: Area + Line modals, wired", "status": "pending", "blockedBy": [120, 125]},
|
||||
{"id": 127, "subject": "Task 13: Equipment modal, wired", "status": "pending", "blockedBy": [121, 126]},
|
||||
{"id": 128, "subject": "Task 14: Tag + VirtualTag modals, wired", "status": "pending", "blockedBy": [122, 123, 127]},
|
||||
{"id": 129, "subject": "Task 15: Import equipment CSV toolbar action", "status": "pending", "blockedBy": [121, 128]},
|
||||
{"id": 130, "subject": "Task 16: Rewire navigation", "status": "pending", "blockedBy": [125]},
|
||||
{"id": 131, "subject": "Task 17: Delete the replaced pages", "status": "pending", "blockedBy": [126, 127, 128, 129, 130]},
|
||||
{"id": 132, "subject": "Task 18: Full verification gate", "status": "pending", "blockedBy": [131]}
|
||||
{"id": 117, "subject": "Task 1: UnsNode VM + tree-assembly helper", "status": "completed"},
|
||||
{"id": 118, "subject": "Task 2: IUnsTreeService + LoadStructureAsync + DI", "status": "completed", "blockedBy": [117]},
|
||||
{"id": 119, "subject": "Task 3: LoadEquipmentChildrenAsync (lazy tags)", "status": "completed", "blockedBy": [118]},
|
||||
{"id": 120, "subject": "Task 4: Area + Line CRUD in service (#122 guard)", "status": "completed", "blockedBy": [118]},
|
||||
{"id": 121, "subject": "Task 5: Equipment CRUD in service", "status": "completed", "blockedBy": [120]},
|
||||
{"id": 122, "subject": "Task 6: Tag CRUD in service", "status": "completed", "blockedBy": [121]},
|
||||
{"id": 123, "subject": "Task 7: VirtualTag CRUD in service", "status": "completed", "blockedBy": [122]},
|
||||
{"id": 124, "subject": "Task 10: UnsTree.razor recursive renderer", "status": "completed", "blockedBy": [117]},
|
||||
{"id": 125, "subject": "Task 11: GlobalUns.razor page (browse-only)", "status": "completed", "blockedBy": [118, 119, 124]},
|
||||
{"id": 126, "subject": "Task 12: Area + Line modals, wired", "status": "completed", "blockedBy": [120, 125]},
|
||||
{"id": 127, "subject": "Task 13: Equipment modal, wired", "status": "completed", "blockedBy": [121, 126]},
|
||||
{"id": 128, "subject": "Task 14: Tag + VirtualTag modals, wired", "status": "completed", "blockedBy": [122, 123, 127]},
|
||||
{"id": 129, "subject": "Task 15: Import equipment CSV toolbar action", "status": "completed", "blockedBy": [121, 128]},
|
||||
{"id": 130, "subject": "Task 16: Rewire navigation", "status": "completed", "blockedBy": [125]},
|
||||
{"id": 131, "subject": "Task 17: Delete the replaced pages", "status": "completed", "blockedBy": [126, 127, 128, 129, 130]},
|
||||
{"id": 132, "subject": "Task 18: Full verification gate", "status": "completed", "blockedBy": [131]}
|
||||
],
|
||||
"lastUpdated": "2026-06-08"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-09-driver-typed-tag-editors.md",
|
||||
"tasks": [
|
||||
{"id": 1, "nativeId": 146, "subject": "Task 1: Surface DriverType to TagModal driver dropdown", "classification": "standard", "status": "pending"},
|
||||
{"id": 2, "nativeId": 147, "subject": "Task 2: TagConfigJson util + EditorMap + TagModal dispatch scaffold", "classification": "standard", "status": "pending", "blockedBy": [1]},
|
||||
{"id": 3, "nativeId": 148, "subject": "Task 3: Modbus tag editor (worked example)", "classification": "standard", "status": "pending", "blockedBy": [2]},
|
||||
{"id": 4, "nativeId": 149, "subject": "Task 4: S7 tag editor", "classification": "standard", "status": "pending", "blockedBy": [3], "parallelizableWith": [5, 6, 7, 8]},
|
||||
{"id": 5, "nativeId": 150, "subject": "Task 5: AbCip tag editor", "classification": "standard", "status": "pending", "blockedBy": [3], "parallelizableWith": [4, 6, 7, 8]},
|
||||
{"id": 6, "nativeId": 151, "subject": "Task 6: AbLegacy tag editor", "classification": "standard", "status": "pending", "blockedBy": [3], "parallelizableWith": [4, 5, 7, 8]},
|
||||
{"id": 7, "nativeId": 152, "subject": "Task 7: TwinCAT tag editor", "classification": "standard", "status": "pending", "blockedBy": [3], "parallelizableWith": [4, 5, 6, 8]},
|
||||
{"id": 8, "nativeId": 153, "subject": "Task 8: Focas tag editor", "classification": "standard", "status": "pending", "blockedBy": [3], "parallelizableWith": [4, 5, 6, 7]},
|
||||
{"id": 9, "nativeId": 154, "subject": "Task 9: Register the 5 editors in TagConfigEditorMap", "classification": "small", "status": "pending", "blockedBy": [4, 5, 6, 7, 8]},
|
||||
{"id": 10, "nativeId": 155, "subject": "Task 10: Live-verify typed editors in docker-dev", "classification": "verification", "status": "pending", "blockedBy": [9]}
|
||||
{"id": 1, "nativeId": 146, "subject": "Task 1: Surface DriverType to TagModal driver dropdown", "classification": "standard", "status": "completed"},
|
||||
{"id": 2, "nativeId": 147, "subject": "Task 2: TagConfigJson util + EditorMap + TagModal dispatch scaffold", "classification": "standard", "status": "completed", "blockedBy": [1]},
|
||||
{"id": 3, "nativeId": 148, "subject": "Task 3: Modbus tag editor (worked example)", "classification": "standard", "status": "completed", "blockedBy": [2]},
|
||||
{"id": 4, "nativeId": 149, "subject": "Task 4: S7 tag editor", "classification": "standard", "status": "completed", "blockedBy": [3], "parallelizableWith": [5, 6, 7, 8]},
|
||||
{"id": 5, "nativeId": 150, "subject": "Task 5: AbCip tag editor", "classification": "standard", "status": "completed", "blockedBy": [3], "parallelizableWith": [4, 6, 7, 8]},
|
||||
{"id": 6, "nativeId": 151, "subject": "Task 6: AbLegacy tag editor", "classification": "standard", "status": "completed", "blockedBy": [3], "parallelizableWith": [4, 5, 7, 8]},
|
||||
{"id": 7, "nativeId": 152, "subject": "Task 7: TwinCAT tag editor", "classification": "standard", "status": "completed", "blockedBy": [3], "parallelizableWith": [4, 5, 6, 8]},
|
||||
{"id": 8, "nativeId": 153, "subject": "Task 8: Focas tag editor", "classification": "standard", "status": "completed", "blockedBy": [3], "parallelizableWith": [4, 5, 6, 7]},
|
||||
{"id": 9, "nativeId": 154, "subject": "Task 9: Register the 5 editors in TagConfigEditorMap", "classification": "small", "status": "completed", "blockedBy": [4, 5, 6, 7, 8]},
|
||||
{"id": 10, "nativeId": 155, "subject": "Task 10: Live-verify typed editors in docker-dev", "classification": "verification", "status": "completed", "blockedBy": [9]}
|
||||
],
|
||||
"lastUpdated": "2026-06-09"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
"branch": "feat/equip-relative-tag-paths",
|
||||
"baseBranch": "master",
|
||||
"baseSha": "50446643",
|
||||
"status": "pending",
|
||||
"status": "completed",
|
||||
"tasks": [
|
||||
{"id": 183, "planTask": 0, "subject": "Task 0: Feature branch + Commons.Tests scaffold", "classification": "small", "status": "pending"},
|
||||
{"id": 184, "planTask": 1, "subject": "Task 1: EquipmentScriptPaths helper + tests", "classification": "standard", "status": "pending", "blockedBy": [183]},
|
||||
{"id": 185, "planTask": 2, "subject": "Task 2: Phase7Composer substitutes {{equip}}", "classification": "standard", "status": "pending", "blockedBy": [184], "parallelizableWith": [186, 187, 188]},
|
||||
{"id": 186, "planTask": 3, "subject": "Task 3: DeploymentArtifact substitutes {{equip}} (parity)", "classification": "standard", "status": "pending", "blockedBy": [184], "parallelizableWith": [185, 187, 188]},
|
||||
{"id": 187, "planTask": 4, "subject": "Task 4: AdminUI {{equip}} save validation", "classification": "standard", "status": "pending", "blockedBy": [184], "parallelizableWith": [185, 186, 188]},
|
||||
{"id": 188, "planTask": 5, "subject": "Task 5: Editor {{equip}} hover + leaf completion", "classification": "standard", "status": "pending", "blockedBy": [184], "parallelizableWith": [185, 186, 187]},
|
||||
{"id": 189, "planTask": 6, "subject": "Task 6: Docs ({{equip}})", "classification": "small", "status": "pending", "blockedBy": [185, 186, 187, 188]},
|
||||
{"id": 190, "planTask": 7, "subject": "Task 7: Full build/test + live /run verify", "classification": "verification", "status": "pending", "blockedBy": [185, 186, 187, 188, 189]}
|
||||
{"id": 183, "planTask": 0, "subject": "Task 0: Feature branch + Commons.Tests scaffold", "classification": "small", "status": "completed"},
|
||||
{"id": 184, "planTask": 1, "subject": "Task 1: EquipmentScriptPaths helper + tests", "classification": "standard", "status": "completed", "blockedBy": [183]},
|
||||
{"id": 185, "planTask": 2, "subject": "Task 2: Phase7Composer substitutes {{equip}}", "classification": "standard", "status": "completed", "blockedBy": [184], "parallelizableWith": [186, 187, 188]},
|
||||
{"id": 186, "planTask": 3, "subject": "Task 3: DeploymentArtifact substitutes {{equip}} (parity)", "classification": "standard", "status": "completed", "blockedBy": [184], "parallelizableWith": [185, 187, 188]},
|
||||
{"id": 187, "planTask": 4, "subject": "Task 4: AdminUI {{equip}} save validation", "classification": "standard", "status": "completed", "blockedBy": [184], "parallelizableWith": [185, 186, 188]},
|
||||
{"id": 188, "planTask": 5, "subject": "Task 5: Editor {{equip}} hover + leaf completion", "classification": "standard", "status": "completed", "blockedBy": [184], "parallelizableWith": [185, 186, 187]},
|
||||
{"id": 189, "planTask": 6, "subject": "Task 6: Docs ({{equip}})", "classification": "small", "status": "completed", "blockedBy": [185, 186, 187, 188]},
|
||||
{"id": 190, "planTask": 7, "subject": "Task 7: Full build/test + live /run verify", "classification": "verification", "status": "completed", "blockedBy": [185, 186, 187, 188, 189]}
|
||||
],
|
||||
"lastUpdated": "2026-06-10"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
"branch": "feat/alarm-followups-r2",
|
||||
"baseBranch": "master",
|
||||
"baseSha": "3ad7960d",
|
||||
"status": "pending",
|
||||
"status": "completed",
|
||||
"note": "Round-2 follow-ups. B (historian feeder): HistorianAdapterActor subscribes to the `alerts` DPS topic + translates AlarmTransitionEvent→AlarmHistorianEvent through the existing T2 Primary gate (kept — DPS fans the Primary's single publish to BOTH nodes' historians); AlarmTransitionEvent extended with AlarmTypeName + Comment (incl. a Core.ScriptedAlarms engine change to carry Comment through the emission); config-gated SqliteStoreAndForwardSink→Wonderware sink with Null fallback. Scripted alarms only. A (Galaxy alarm reconnect): verify+document only (gRPC keepalive unreachable — NuGet package). T1/T3/T4 mutually parallel by files; T2 after T1; T5 after T2/T3/T4. Same-assembly (Runtime) tasks serialise build/test even if files disjoint. NO bUnit, NO Configuration/EF change.",
|
||||
"tasks": [
|
||||
{"id": 249, "planTask": 0, "subject": "R2-T0: Branch + baseline", "classification": "trivial", "status": "pending", "blockedBy": []},
|
||||
{"id": 250, "planTask": 1, "subject": "R2-T1: Extend AlarmTransitionEvent + carry Comment through engine emission (B1)", "classification": "standard", "status": "pending", "blockedBy": [249], "parallelizableWith": [252, 253]},
|
||||
{"id": 251, "planTask": 2, "subject": "R2-T2: HistorianAdapterActor subscribes to alerts + translates (B2)", "classification": "high-risk", "status": "pending", "blockedBy": [249, 250]},
|
||||
{"id": 252, "planTask": 3, "subject": "R2-T3: Config-gated durable sink (AddAlarmHistorian) + Host wiring (B3)", "classification": "standard", "status": "pending", "blockedBy": [249], "parallelizableWith": [250, 253]},
|
||||
{"id": 253, "planTask": 4, "subject": "R2-T4: Galaxy alarm-reconnect acknowledger-recovery test + doc (A)", "classification": "small", "status": "pending", "blockedBy": [249], "parallelizableWith": [250, 252]},
|
||||
{"id": 254, "planTask": 5, "subject": "R2-T5: Full-suite gate + docs + finish branch", "classification": "small", "status": "pending", "blockedBy": [251, 252, 253]}
|
||||
{"id": 249, "planTask": 0, "subject": "R2-T0: Branch + baseline", "classification": "trivial", "status": "completed", "blockedBy": []},
|
||||
{"id": 250, "planTask": 1, "subject": "R2-T1: Extend AlarmTransitionEvent + carry Comment through engine emission (B1)", "classification": "standard", "status": "completed", "blockedBy": [249], "parallelizableWith": [252, 253]},
|
||||
{"id": 251, "planTask": 2, "subject": "R2-T2: HistorianAdapterActor subscribes to alerts + translates (B2)", "classification": "high-risk", "status": "completed", "blockedBy": [249, 250]},
|
||||
{"id": 252, "planTask": 3, "subject": "R2-T3: Config-gated durable sink (AddAlarmHistorian) + Host wiring (B3)", "classification": "standard", "status": "completed", "blockedBy": [249], "parallelizableWith": [250, 253]},
|
||||
{"id": 253, "planTask": 4, "subject": "R2-T4: Galaxy alarm-reconnect acknowledger-recovery test + doc (A)", "classification": "small", "status": "completed", "blockedBy": [249], "parallelizableWith": [250, 252]},
|
||||
{"id": 254, "planTask": 5, "subject": "R2-T5: Full-suite gate + docs + finish branch", "classification": "small", "status": "completed", "blockedBy": [251, 252, 253]}
|
||||
],
|
||||
"lastUpdated": "2026-06-11"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -4,20 +4,20 @@
|
||||
"branch": "feat/alarm-followups",
|
||||
"baseBranch": "master",
|
||||
"baseSha": "bcb9f45c",
|
||||
"status": "pending",
|
||||
"status": "completed",
|
||||
"note": "Resolves the 6 T17-T24 follow-ups. Double-emit = primary-only emission (T1 ScriptedAlarmHostActor alerts-gate + T2 HistorianAdapterActor historize-gate, both on Primary via redundancy-state; OPC UA write + commands stay ungated). T3 Galaxy reconnect recreate. T4 broadcaster health signal. T5 CorrelationId wrapper. T6 Alerts.razor (Timed picker + chip auto-clear + live-pill). T7 ScriptLog.razor live-pill. T8 live-verify. T9 rig cleanup. T10 docs+finish. T1-T5 mutually parallel; T6/T7 after T4 (∥ each other); T8 after 1/2/3/6/7; T9 after 8; T10 after 9. NO bUnit (razor proven by docker-dev /run). NO Configuration/EF change.",
|
||||
"tasks": [
|
||||
{"id": 235, "planTask": 0, "subject": "T0: Branch + baseline", "classification": "trivial", "status": "pending", "blockedBy": []},
|
||||
{"id": 236, "planTask": 1, "subject": "T1: Redundancy emit-gate in ScriptedAlarmHostActor (A1)", "classification": "high-risk", "status": "pending", "blockedBy": [235], "parallelizableWith": [237, 238, 239, 240]},
|
||||
{"id": 237, "planTask": 2, "subject": "T2: Redundancy historize-gate in HistorianAdapterActor (A2)", "classification": "high-risk", "status": "pending", "blockedBy": [235], "parallelizableWith": [236, 238, 239, 240]},
|
||||
{"id": 238, "planTask": 3, "subject": "T3: Galaxy reconnect recreates a faulted session", "classification": "high-risk", "status": "pending", "blockedBy": [235], "parallelizableWith": [236, 237, 239, 240]},
|
||||
{"id": 239, "planTask": 4, "subject": "T4: Broadcaster connection-health signal + bridges", "classification": "standard", "status": "pending", "blockedBy": [235], "parallelizableWith": [236, 237, 238, 240]},
|
||||
{"id": 240, "planTask": 5, "subject": "T5: CorrelationId wrapper for the alarm commands (3b)", "classification": "small", "status": "pending", "blockedBy": [235], "parallelizableWith": [236, 237, 238, 239]},
|
||||
{"id": 241, "planTask": 6, "subject": "T6: Alerts.razor — Timed-shelve picker + chip auto-clear + live-pill", "classification": "standard", "status": "pending", "blockedBy": [239], "parallelizableWith": [242]},
|
||||
{"id": 242, "planTask": 7, "subject": "T7: ScriptLog.razor live-pill + reconnect-overlay check", "classification": "small", "status": "pending", "blockedBy": [239], "parallelizableWith": [241]},
|
||||
{"id": 243, "planTask": 8, "subject": "T8: Live-verify on docker-dev", "classification": "verification", "status": "pending", "blockedBy": [236, 237, 238, 241, 242]},
|
||||
{"id": 244, "planTask": 9, "subject": "T9: docker-dev rig cleanup", "classification": "trivial", "status": "pending", "blockedBy": [243]},
|
||||
{"id": 245, "planTask": 10, "subject": "T10: Docs + finish branch", "classification": "small", "status": "pending", "blockedBy": [244]}
|
||||
{"id": 235, "planTask": 0, "subject": "T0: Branch + baseline", "classification": "trivial", "status": "completed", "blockedBy": []},
|
||||
{"id": 236, "planTask": 1, "subject": "T1: Redundancy emit-gate in ScriptedAlarmHostActor (A1)", "classification": "high-risk", "status": "completed", "blockedBy": [235], "parallelizableWith": [237, 238, 239, 240]},
|
||||
{"id": 237, "planTask": 2, "subject": "T2: Redundancy historize-gate in HistorianAdapterActor (A2)", "classification": "high-risk", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 238, 239, 240]},
|
||||
{"id": 238, "planTask": 3, "subject": "T3: Galaxy reconnect recreates a faulted session", "classification": "high-risk", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 237, 239, 240]},
|
||||
{"id": 239, "planTask": 4, "subject": "T4: Broadcaster connection-health signal + bridges", "classification": "standard", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 237, 238, 240]},
|
||||
{"id": 240, "planTask": 5, "subject": "T5: CorrelationId wrapper for the alarm commands (3b)", "classification": "small", "status": "completed", "blockedBy": [235], "parallelizableWith": [236, 237, 238, 239]},
|
||||
{"id": 241, "planTask": 6, "subject": "T6: Alerts.razor — Timed-shelve picker + chip auto-clear + live-pill", "classification": "standard", "status": "completed", "blockedBy": [239], "parallelizableWith": [242]},
|
||||
{"id": 242, "planTask": 7, "subject": "T7: ScriptLog.razor live-pill + reconnect-overlay check", "classification": "small", "status": "completed", "blockedBy": [239], "parallelizableWith": [241]},
|
||||
{"id": 243, "planTask": 8, "subject": "T8: Live-verify on docker-dev", "classification": "verification", "status": "completed", "blockedBy": [236, 237, 238, 241, 242]},
|
||||
{"id": 244, "planTask": 9, "subject": "T9: docker-dev rig cleanup", "classification": "trivial", "status": "completed", "blockedBy": [243]},
|
||||
{"id": 245, "planTask": 10, "subject": "T10: Docs + finish branch", "classification": "small", "status": "completed", "blockedBy": [244]}
|
||||
],
|
||||
"lastUpdated": "2026-06-11"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
"branch": "feat/alarm-historian-followups",
|
||||
"baseBranch": "master",
|
||||
"baseSha": "f64f7ce6",
|
||||
"status": "pending",
|
||||
"status": "completed",
|
||||
"note": "pending.md code follow-ups items 1-6 (item 7 docker-dev rig cleanup is an operational deferral, out of scope). T1 (HistorizeToAveva opt-out): carry the flag engine→AlarmTransitionEvent→HistorianAdapterActor and gate the DURABLE WRITE ONLY (live /alerts unaffected); non-nullable default-true is rolling-restart-safe by the writer==publisher invariant. T2 (DrainInterval/Capacity/DeadLetterRetention knobs + Validate() startup warnings for empty SharedSecret / relative DatabasePath). T3 (TransitionUser reads Comments[^1].User for shelve/unshelve/enable/disable — ops already append the operator; no Core change). T4 (volatile _backoffIndex + _evictedCount under lock — Core.AlarmHistorian, parallel-safe). Same-assembly contention: T1→T2→T3 serialize (Runtime; T1/T3 share ScriptedAlarmHostActor.cs); T4 runs concurrently. NO Configuration/EF change. Build on feat branch off master.",
|
||||
"tasks": [
|
||||
{"id": 255, "planTask": 0, "subject": "T0: Branch off master", "classification": "trivial", "status": "pending", "blockedBy": []},
|
||||
{"id": 256, "planTask": 1, "subject": "T1: Honor HistorizeToAveva opt-out at the durable write (pending #1)", "classification": "high-risk", "status": "pending", "blockedBy": [255], "parallelizableWith": [259]},
|
||||
{"id": 257, "planTask": 2, "subject": "T2: Historian config knobs + startup validation (pending #2,#3,#4)", "classification": "standard", "status": "pending", "blockedBy": [256], "parallelizableWith": [259]},
|
||||
{"id": 258, "planTask": 3, "subject": "T3: Real operator for shelve/enable/disable transitions (pending #5)", "classification": "small", "status": "pending", "blockedBy": [257], "parallelizableWith": [259]},
|
||||
{"id": 259, "planTask": 4, "subject": "T4: SqliteStoreAndForwardSink thread-safety nits (pending #6)", "classification": "small", "status": "pending", "blockedBy": [255], "parallelizableWith": [256, 257, 258]},
|
||||
{"id": 260, "planTask": 5, "subject": "T5: Full-suite gate + docs + close out", "classification": "small", "status": "pending", "blockedBy": [256, 257, 258, 259]}
|
||||
{"id": 255, "planTask": 0, "subject": "T0: Branch off master", "classification": "trivial", "status": "completed", "blockedBy": []},
|
||||
{"id": 256, "planTask": 1, "subject": "T1: Honor HistorizeToAveva opt-out at the durable write (pending #1)", "classification": "high-risk", "status": "completed", "blockedBy": [255], "parallelizableWith": [259]},
|
||||
{"id": 257, "planTask": 2, "subject": "T2: Historian config knobs + startup validation (pending #2,#3,#4)", "classification": "standard", "status": "completed", "blockedBy": [256], "parallelizableWith": [259]},
|
||||
{"id": 258, "planTask": 3, "subject": "T3: Real operator for shelve/enable/disable transitions (pending #5)", "classification": "small", "status": "completed", "blockedBy": [257], "parallelizableWith": [259]},
|
||||
{"id": 259, "planTask": 4, "subject": "T4: SqliteStoreAndForwardSink thread-safety nits (pending #6)", "classification": "small", "status": "completed", "blockedBy": [255], "parallelizableWith": [256, 257, 258]},
|
||||
{"id": 260, "planTask": 5, "subject": "T5: Full-suite gate + docs + close out", "classification": "small", "status": "completed", "blockedBy": [256, 257, 258, 259]}
|
||||
],
|
||||
"lastUpdated": "2026-06-11"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"branch": "feat/uns-alias-tag",
|
||||
"baseBranch": "master",
|
||||
"baseSha": "305023aa",
|
||||
"status": "in_progress",
|
||||
"status": "completed",
|
||||
"note": "Galaxy alias tag: an equipment-scoped Tag bound to GalaxyMxGateway surfacing a Galaxy attribute under a UNS name via direct subscription, replacing relay VirtualTags. Approach A reuses the Tag entity; NO entity/EF migration. Same-file contention: Phase7Composer.cs+DeploymentArtifact.cs in T2 only; EquipmentScriptPaths.cs in T1 only; DraftValidator.cs+Tag.cs in T3 only; IUnsTreeService.cs+UnsTreeService.cs serialize T4->T5->T7; EquipmentPage.razor serializes T6->T8. T1/T2/T3 parallel after T0. BuildAliasTag (T5) reused by the converter (T7). EquipmentTagRow gains DEFAULTED IsAlias/Source so existing constructions compile.",
|
||||
"tasks": [
|
||||
{
|
||||
@@ -122,7 +122,7 @@
|
||||
"planTask": 10,
|
||||
"subject": "T10: Full-suite gate + live /run + finish",
|
||||
"classification": "verification",
|
||||
"status": "in_progress",
|
||||
"status": "completed",
|
||||
"blockedBy": [
|
||||
287,
|
||||
288,
|
||||
@@ -133,5 +133,5 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"lastUpdated": "2026-06-11"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
@@ -1,24 +1,24 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-12-galaxy-standard-driver-phase-a.md",
|
||||
"tasks": [
|
||||
{"id": 314, "subject": "Task 0: Create feature branch", "status": "pending"},
|
||||
{"id": 315, "subject": "Task 1: DriverTypeRegistry — Galaxy → Equipment", "status": "pending", "blockedBy": [314]},
|
||||
{"id": 316, "subject": "Task 2: DraftValidator — drop Galaxy/SystemPlatform branches", "status": "pending", "blockedBy": [314]},
|
||||
{"id": 317, "subject": "Task 3: Phase7Composer — remove Galaxy mirror producer + exception clause", "status": "pending", "blockedBy": [314]},
|
||||
{"id": 318, "subject": "Task 4: Phase7CompositionResult — remove GalaxyTags + GalaxyTagPlan", "status": "pending", "blockedBy": [317]},
|
||||
{"id": 319, "subject": "Task 5: DeploymentArtifact — remove Galaxy mirror decode + isGalaxyAlias", "status": "pending", "blockedBy": [318]},
|
||||
{"id": 320, "subject": "Task 6: Phase7Applier + OpcUaPublishActor — delete MaterialiseGalaxyTags", "status": "pending", "blockedBy": [318]},
|
||||
{"id": 321, "subject": "Task 7: Authorization — remove ScopeKind.SystemPlatform + WalkSystemPlatform", "status": "pending", "blockedBy": [318]},
|
||||
{"id": 322, "subject": "Task 8: Composer↔Artifact byte-parity test (Galaxy equipment tag)", "status": "pending", "blockedBy": [317, 319]},
|
||||
{"id": 323, "subject": "Task 9: CAPSTONE — remove SystemPlatform enum values; build green", "status": "pending", "blockedBy": [315, 316, 317, 319, 320, 321]},
|
||||
{"id": 324, "subject": "Task 10: EF migration — drop per-kind unique constraint", "status": "pending", "blockedBy": [323]},
|
||||
{"id": 325, "subject": "Task 11: Delete alias-only AdminUI files", "status": "pending", "blockedBy": [314]},
|
||||
{"id": 326, "subject": "Task 12: UnsTreeService/IUnsTreeService/EquipmentChildRows — strip alias/relay", "status": "pending", "blockedBy": [325]},
|
||||
{"id": 327, "subject": "Task 13: EquipmentPage.razor — strip alias UI", "status": "pending", "blockedBy": [326]},
|
||||
{"id": 328, "subject": "Task 14: TagModal.razor — wire Galaxy address picker", "status": "pending", "blockedBy": [326]},
|
||||
{"id": 329, "subject": "Task 15: NamespaceEdit.razor — hide SystemPlatform option", "status": "pending", "blockedBy": [323]},
|
||||
{"id": 330, "subject": "Task 16: Docs — Uns.md + CLAUDE.md", "status": "pending", "blockedBy": [314]},
|
||||
{"id": 331, "subject": "Task 17: Verify — build, test, user-driven live /run", "status": "pending", "blockedBy": [322, 324, 327, 328, 329, 330]}
|
||||
{"id": 314, "subject": "Task 0: Create feature branch", "status": "completed"},
|
||||
{"id": 315, "subject": "Task 1: DriverTypeRegistry — Galaxy → Equipment", "status": "completed", "blockedBy": [314]},
|
||||
{"id": 316, "subject": "Task 2: DraftValidator — drop Galaxy/SystemPlatform branches", "status": "completed", "blockedBy": [314]},
|
||||
{"id": 317, "subject": "Task 3: Phase7Composer — remove Galaxy mirror producer + exception clause", "status": "completed", "blockedBy": [314]},
|
||||
{"id": 318, "subject": "Task 4: Phase7CompositionResult — remove GalaxyTags + GalaxyTagPlan", "status": "completed", "blockedBy": [317]},
|
||||
{"id": 319, "subject": "Task 5: DeploymentArtifact — remove Galaxy mirror decode + isGalaxyAlias", "status": "completed", "blockedBy": [318]},
|
||||
{"id": 320, "subject": "Task 6: Phase7Applier + OpcUaPublishActor — delete MaterialiseGalaxyTags", "status": "completed", "blockedBy": [318]},
|
||||
{"id": 321, "subject": "Task 7: Authorization — remove ScopeKind.SystemPlatform + WalkSystemPlatform", "status": "completed", "blockedBy": [318]},
|
||||
{"id": 322, "subject": "Task 8: Composer↔Artifact byte-parity test (Galaxy equipment tag)", "status": "completed", "blockedBy": [317, 319]},
|
||||
{"id": 323, "subject": "Task 9: CAPSTONE — remove SystemPlatform enum values; build green", "status": "completed", "blockedBy": [315, 316, 317, 319, 320, 321]},
|
||||
{"id": 324, "subject": "Task 10: EF migration — drop per-kind unique constraint", "status": "completed", "blockedBy": [323]},
|
||||
{"id": 325, "subject": "Task 11: Delete alias-only AdminUI files", "status": "completed", "blockedBy": [314]},
|
||||
{"id": 326, "subject": "Task 12: UnsTreeService/IUnsTreeService/EquipmentChildRows — strip alias/relay", "status": "completed", "blockedBy": [325]},
|
||||
{"id": 327, "subject": "Task 13: EquipmentPage.razor — strip alias UI", "status": "completed", "blockedBy": [326]},
|
||||
{"id": 328, "subject": "Task 14: TagModal.razor — wire Galaxy address picker", "status": "completed", "blockedBy": [326]},
|
||||
{"id": 329, "subject": "Task 15: NamespaceEdit.razor — hide SystemPlatform option", "status": "completed", "blockedBy": [323]},
|
||||
{"id": 330, "subject": "Task 16: Docs — Uns.md + CLAUDE.md", "status": "completed", "blockedBy": [314]},
|
||||
{"id": 331, "subject": "Task 17: Verify — build, test, user-driven live /run", "status": "completed", "blockedBy": [322, 324, 327, 328, 329, 330]}
|
||||
],
|
||||
"lastUpdated": "2026-06-12"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-13-equipment-tag-live-values-plan.md",
|
||||
"tasks": [
|
||||
{"id": 332, "subject": "Task 0: Create feature branch", "status": "pending"},
|
||||
{"id": 333, "subject": "Task 1: EquipmentNodeIds shared helper", "status": "pending", "blockedBy": [332]},
|
||||
{"id": 334, "subject": "Task 2: Repoint Phase7Applier + VirtualTagHostActor to EquipmentNodeIds", "status": "pending", "blockedBy": [333]},
|
||||
{"id": 335, "subject": "Task 3: AttributeValuePublished gains DriverInstanceId", "status": "pending", "blockedBy": [332]},
|
||||
{"id": 336, "subject": "Task 4: DriverHostActor map + ForwardToMux resolution", "status": "pending", "blockedBy": [333, 335]},
|
||||
{"id": 337, "subject": "Task 5: Verify — build, test, live /run", "status": "pending", "blockedBy": [334, 336]}
|
||||
{"id": 332, "subject": "Task 0: Create feature branch", "status": "completed"},
|
||||
{"id": 333, "subject": "Task 1: EquipmentNodeIds shared helper", "status": "completed", "blockedBy": [332]},
|
||||
{"id": 334, "subject": "Task 2: Repoint Phase7Applier + VirtualTagHostActor to EquipmentNodeIds", "status": "completed", "blockedBy": [333]},
|
||||
{"id": 335, "subject": "Task 3: AttributeValuePublished gains DriverInstanceId", "status": "completed", "blockedBy": [332]},
|
||||
{"id": 336, "subject": "Task 4: DriverHostActor map + ForwardToMux resolution", "status": "completed", "blockedBy": [333, 335]},
|
||||
{"id": 337, "subject": "Task 5: Verify — build, test, live /run", "status": "completed", "blockedBy": [334, 336]}
|
||||
],
|
||||
"lastUpdated": "2026-06-13"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-14-galaxy-phase-b-native-alarms-plan.md",
|
||||
"tasks": [
|
||||
{"id": "367", "subject": "Task 0: Feature branch feat/galaxy-phase-b-native-alarms", "classification": "trivial", "status": "pending"},
|
||||
{"id": "368", "subject": "Task 1 (WS-1): AlarmEventArgs.Kind contract + Galaxy populates it", "classification": "standard", "status": "pending", "blockedBy": ["367"], "parallelizableWith": ["369"]},
|
||||
{"id": "369", "subject": "Task 2 (WS-2): EquipmentTagPlan.Alarm parsed byte-parity from TagConfig", "classification": "high-risk", "status": "pending", "blockedBy": ["367"], "parallelizableWith": ["368"]},
|
||||
{"id": "370", "subject": "Task 3 (WS-3): Materialise a Part 9 condition for an alarm tag", "classification": "standard", "status": "pending", "blockedBy": ["369"], "parallelizableWith": ["371", "372", "375"]},
|
||||
{"id": "371", "subject": "Task 4 (WS-4a): NativeAlarmProjector (transition -> snapshot)", "classification": "standard", "status": "pending", "blockedBy": ["368"], "parallelizableWith": ["370", "372", "375"]},
|
||||
{"id": "372", "subject": "Task 5 (WS-4b): DriverInstanceActor forwards native OnAlarmEvent", "classification": "high-risk", "status": "pending", "blockedBy": ["368"], "parallelizableWith": ["370", "371", "375"]},
|
||||
{"id": "373", "subject": "Task 6 (WS-4c): DriverHostActor routes native alarms to conditions", "classification": "high-risk", "status": "pending", "blockedBy": ["369", "371", "372"]},
|
||||
{"id": "374", "subject": "Task 7 (WS-5): Primary-gated AlarmTransitionEvent fan-out", "classification": "high-risk", "status": "pending", "blockedBy": ["373"]},
|
||||
{"id": "375", "subject": "Task 8 (Docs): Native driver-alarm TagConfig schema", "classification": "small", "status": "pending", "blockedBy": ["369"], "parallelizableWith": ["370", "371", "372"]},
|
||||
{"id": "376", "subject": "Task 9: Live docker-dev /run verification (user-driven)", "classification": "verification", "status": "pending", "blockedBy": ["374", "375"]}
|
||||
{"id": "367", "subject": "Task 0: Feature branch feat/galaxy-phase-b-native-alarms", "classification": "trivial", "status": "completed"},
|
||||
{"id": "368", "subject": "Task 1 (WS-1): AlarmEventArgs.Kind contract + Galaxy populates it", "classification": "standard", "status": "completed", "blockedBy": ["367"], "parallelizableWith": ["369"]},
|
||||
{"id": "369", "subject": "Task 2 (WS-2): EquipmentTagPlan.Alarm parsed byte-parity from TagConfig", "classification": "high-risk", "status": "completed", "blockedBy": ["367"], "parallelizableWith": ["368"]},
|
||||
{"id": "370", "subject": "Task 3 (WS-3): Materialise a Part 9 condition for an alarm tag", "classification": "standard", "status": "completed", "blockedBy": ["369"], "parallelizableWith": ["371", "372", "375"]},
|
||||
{"id": "371", "subject": "Task 4 (WS-4a): NativeAlarmProjector (transition -> snapshot)", "classification": "standard", "status": "completed", "blockedBy": ["368"], "parallelizableWith": ["370", "372", "375"]},
|
||||
{"id": "372", "subject": "Task 5 (WS-4b): DriverInstanceActor forwards native OnAlarmEvent", "classification": "high-risk", "status": "completed", "blockedBy": ["368"], "parallelizableWith": ["370", "371", "375"]},
|
||||
{"id": "373", "subject": "Task 6 (WS-4c): DriverHostActor routes native alarms to conditions", "classification": "high-risk", "status": "completed", "blockedBy": ["369", "371", "372"]},
|
||||
{"id": "374", "subject": "Task 7 (WS-5): Primary-gated AlarmTransitionEvent fan-out", "classification": "high-risk", "status": "completed", "blockedBy": ["373"]},
|
||||
{"id": "375", "subject": "Task 8 (Docs): Native driver-alarm TagConfig schema", "classification": "small", "status": "completed", "blockedBy": ["369"], "parallelizableWith": ["370", "371", "372"]},
|
||||
{"id": "376", "subject": "Task 9: Live docker-dev /run verification (user-driven)", "classification": "verification", "status": "completed", "blockedBy": ["374", "375"]}
|
||||
],
|
||||
"lastUpdated": "2026-06-14"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
{"id": 4, "subject": "Task 4: HistoryRead override — Events over equipment-folder notifiers", "status": "completed", "blockedBy": [3]},
|
||||
{"id": 5, "subject": "Task 5: DI + config + Host wiring (AddServerHistorian, SetHistorianDataSource)", "status": "completed", "blockedBy": [3]},
|
||||
{"id": 6, "subject": "Task 6: Docs + bookkeeping", "status": "completed", "blockedBy": [4, 5]},
|
||||
{"id": 7, "subject": "Task 7: Live docker-dev /run verification — DEFERRED (user-driven)", "status": "pending", "blockedBy": [5]}
|
||||
{"id": 7, "subject": "Task 7: Live docker-dev /run verification — DEFERRED (user-driven)", "status": "completed", "blockedBy": [5]}
|
||||
],
|
||||
"lastUpdated": "2026-06-14"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-14-residual-followups-cleanup-plan.md",
|
||||
"tasks": [
|
||||
{"id": 1, "subject": "Task 1: Phase B (a) regression test — native alarm during Reconnecting is dropped", "status": "pending"},
|
||||
{"id": 2, "subject": "Task 2: Phase B (b) test — OperatorComment flows through ForwardNativeAlarm", "status": "pending"},
|
||||
{"id": 3, "subject": "Task 3: Phase B (c) doc note — severity-bucket snapping (ScriptedAlarms.md)", "status": "pending"},
|
||||
{"id": 4, "subject": "Task 4: Galaxy (3) — extract shared stub-driver test harness (de-dup)", "status": "pending"},
|
||||
{"id": 5, "subject": "Task 5: Reconcile pending.md (disk-only, not committed)", "status": "pending"}
|
||||
{"id": 1, "subject": "Task 1: Phase B (a) regression test — native alarm during Reconnecting is dropped", "status": "completed"},
|
||||
{"id": 2, "subject": "Task 2: Phase B (b) test — OperatorComment flows through ForwardNativeAlarm", "status": "completed"},
|
||||
{"id": 3, "subject": "Task 3: Phase B (c) doc note — severity-bucket snapping (ScriptedAlarms.md)", "status": "completed"},
|
||||
{"id": 4, "subject": "Task 4: Galaxy (3) — extract shared stub-driver test harness (de-dup)", "status": "completed"},
|
||||
{"id": 5, "subject": "Task 5: Reconcile pending.md (disk-only, not committed)", "status": "completed"}
|
||||
],
|
||||
"lastUpdated": "2026-06-14"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"planPath": "docs/plans/2026-06-14-write-outcome-self-correction-plan.md",
|
||||
"tasks": [
|
||||
{"id": "361", "subject": "WT0: Create feature branch feat/write-outcome-self-correction", "classification": "trivial", "status": "pending"},
|
||||
{"id": "362", "subject": "WT1: Commons IOpcUaNodeWriteGateway + NodeWriteOutcome + Null default", "classification": "standard", "status": "pending", "blockedBy": ["361"]},
|
||||
{"id": "363", "subject": "WT2: Runtime ActorNodeWriteGateway (Asks RouteNodeWrite)", "classification": "standard", "status": "pending", "blockedBy": ["362"], "parallelizableWith": ["364"]},
|
||||
{"id": "364", "subject": "WT3: OpcUaServer node-manager seam swap + capture-prior + compare-and-revert", "classification": "high-risk", "status": "pending", "blockedBy": ["362"], "parallelizableWith": ["363"]},
|
||||
{"id": "365", "subject": "WT4: Host wire ActorNodeWriteGateway", "classification": "standard", "status": "pending", "blockedBy": ["363", "364"]},
|
||||
{"id": "366", "subject": "WT5: Live /run verification — failing write reverts, success stays", "classification": "verification", "status": "pending", "blockedBy": ["365"]}
|
||||
{"id": "361", "subject": "WT0: Create feature branch feat/write-outcome-self-correction", "classification": "trivial", "status": "completed"},
|
||||
{"id": "362", "subject": "WT1: Commons IOpcUaNodeWriteGateway + NodeWriteOutcome + Null default", "classification": "standard", "status": "completed", "blockedBy": ["361"]},
|
||||
{"id": "363", "subject": "WT2: Runtime ActorNodeWriteGateway (Asks RouteNodeWrite)", "classification": "standard", "status": "completed", "blockedBy": ["362"], "parallelizableWith": ["364"]},
|
||||
{"id": "364", "subject": "WT3: OpcUaServer node-manager seam swap + capture-prior + compare-and-revert", "classification": "high-risk", "status": "completed", "blockedBy": ["362"], "parallelizableWith": ["363"]},
|
||||
{"id": "365", "subject": "WT4: Host wire ActorNodeWriteGateway", "classification": "standard", "status": "completed", "blockedBy": ["363", "364"]},
|
||||
{"id": "366", "subject": "WT5: Live /run verification — failing write reverts, success stays", "classification": "verification", "status": "completed", "blockedBy": ["365"]}
|
||||
],
|
||||
"lastUpdated": "2026-06-14"
|
||||
"lastUpdated": "2026-06-15"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user