{ "planPath": "docs/plans/2026-07-23-mesh-phase4-cut-driver-configdb.md", "tasks": [ { "id": 0, "subject": "Task 0: ConfigSourceOptionsValidator \u2014 driver-only \u21d2 FetchAndCache", "status": "completed", "commit": "d630a7e", "result": "13/13 tests; APPROVED by code review" }, { "id": 1, "subject": "Task 1: Program.cs \u2014 gate ConfigDb registration + health check on hasAdmin", "status": "completed", "commit": "a41582ea", "result": "8/8 tests; surfaced Task 1b (IGroupRoleMapper ConfigDb dep)" }, { "id": "1b", "subject": "Task 1b: driver-only ILdapGroupRoleMappingService \u2014 empty (appsettings-only)", "status": "completed", "blockedBy": [ 1 ], "commit": "833e45db", "result": "9/9 tests; APPROVED (Task 7 to pin fused-node ordering)" }, { "id": 2, "subject": "Task 2: DbHealthProbeActor \u2014 no spawn on driver-only; DbReachable=true constant", "status": "completed", "blockedBy": [ 1 ], "commit": "9565827", "result": "43 tests; spec-compliant + code-review (comment fixed to honest interim; functional fix = Task 4/6)" }, { "id": 3, "subject": "Task 3: OpcUaPublishActor \u2014 nullable factory; rebuild always carries bytes", "status": "completed", "blockedBy": [ 2 ], "commit": "73ae8ec5", "result": "44 tests (1+2 RED pre-fix); SPEC-COMPLIANT + APPROVED. Wipe prevented at every entry point; validator is belt-and-suspenders" }, { "id": 4, "subject": "Task 4: DriverHostActor \u2014 nullable factory; drop redundant SQL ack-writes", "status": "completed", "blockedBy": [ 1 ], "commit": "d9071607", "result": "Tasks 4+6 combined (avoid churn). 32+162+6 tests; SPEC-COMPLIANT + APPROVED. Review re-confirmed Task 3 is a HARD PREREQ before any FetchAndCache flip (address-space wipe)" }, { "id": 5, "subject": "Task 5: alarm_condition_state LocalDb table + LocalDbAlarmConditionStateStore", "status": "completed", "commit": "4f4cdd05", "result": "16 new tests; SPEC-COMPLIANT + APPROVED (ON CONFLICT DO UPDATE replication-safe). Fold Kind+null-audit test polish into Task 4/6" }, { "id": 6, "subject": "Task 6: Wire LocalDb condition store into DriverHostActor for driver-role", "status": "completed", "blockedBy": [ 4, 5 ], "commit": "d9071607", "result": "Tasks 4+6 combined (avoid churn). 32+162+6 tests; SPEC-COMPLIANT + APPROVED. Review re-confirmed Task 3 is a HARD PREREQ before any FetchAndCache flip (address-space wipe)" }, { "id": 7, "subject": "Task 7: Registration cleanup + full-graph driver-only DI sweep", "status": "completed", "blockedBy": [ "1b", 2, 3, 4, 6 ], "commit": "6f21213f", "result": "12/12; sweep verified clean; ordering+lazy-resolve pins APPROVED (red-check confirmed load-bearing)" }, { "id": 8, "subject": "Task 8: Docs \u2014 Redundancy.md ServiceLevel + interop + Configuration.md + CLAUDE.md", "status": "completed", "blockedBy": [ 7 ], "commit": "55a6e1f2", "result": "Redundancy.md (DB-less ServiceLevel) + Configuration.md + CLAUDE.md + program doc (Phase 4 status + stale Phase 3 fix); all claims code-verified" }, { "id": 9, "subject": "Task 9: Drop dead ConfigDb ScriptedAlarmState table + retire EfAlarmConditionStateStore", "status": "deferred", "blockedBy": [ 6 ], "result": "DEFERRED to follow-up (plan-sanctioned): EF store is inert on all real nodes (test-harness fallback only); table-drop migration is irreversible. Not needed for the ConfigDb-cut goal. Tracked in program doc." }, { "id": 10, "subject": "Task 10: Rig \u2014 driver-only site nodes lose ConfigDb string", "status": "completed", "blockedBy": [ 7 ], "commit": "HEAD", "result": "4 site nodes: no ConfigDb string + FetchAndCache hardcoded (Direct now validator-rejected); central keeps ConfigDb+Direct+ConfigServe; YAML validated" }, { "id": 11, "subject": "Task 11: Live gate", "status": "completed", "blockedBy": [ 8, 9, 10 ], "result": "LIVE GATE PASSED \u2014 deploy sealed green w/ 4 DB-less site nodes acking; ServiceLevel 240 w/ central SQL down; restart booted last-known-good from LocalDb pointer; grep proof; alarm_condition_state table live+replicated. Doc: 2026-07-23-mesh-phase4-live-gate.md" } ], "lastUpdated": "2026-07-23" }