Files
lmxopcua/docs/plans/2026-07-23-mesh-phase4-cut-driver-configdb.md.tasks.json
T

128 lines
4.0 KiB
JSON

{
"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": "pending",
"blockedBy": [
7
]
},
{
"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": "pending",
"blockedBy": [
7
]
},
{
"id": 11,
"subject": "Task 11: Live gate",
"status": "pending",
"blockedBy": [
8,
9,
10
]
}
],
"lastUpdated": "2026-07-23"
}