88ce8df099
Bookkeeping: 13 .tasks.json files closed — the 8 the audit named, plus
mesh-phase4 (Task 9 landed 3a590a0c), the 4th stillpending phase file, and
historian-tcp-transport closed as OBSOLETE (it targets the retired Wonderware
sidecar; there is no Wonderware backend in the tree). Each carries a
closureNote naming the evidence rather than just a status flip.
11 archreview live gates written back from STATUS.md, which had recorded them
passed since 2026-07-13/15 without ever updating the task files: R2-01 #11,
R2-02 #15/#18, R2-05 T15, R2-06 T12, R2-07 T5/T6/T12/T14, R2-11 T22/T24.
R2-03 and R2-10 were deliberately NOT closed. STATUS.md's headline says "every
Round-2 live gate is now GREEN", but its own per-item detail says R2-03 is
"live-blocked on this data-less rig" and R2-10 verified the pipeline with
"breaker-OPEN state not forced". Both now carry an openNote recording the
actual blocker.
The point of the sweep: ~140 phantom pending tasks are gone, so the genuinely
unexecuted 19-task AdminUI follow-ups plan is now the largest open item in
docs/plans/ instead of being buried under work that shipped months ago.
Tier truth: docs/v2/driver-stability.md now states that its tier table is
aspirational — every driver runs Tier A because no factory passes a tier, so
MemoryRecycle and ScheduledRecycleScheduler have never engaged, and the config
parser validates a RecycleIntervalSeconds that does nothing. It also corrects a
staleness the audit missed: the separate-Windows-service hosting it describes
for Tier C no longer exists (Galaxy moved to the mxaccessgw sidecar in PR 7.2,
FOCAS went in-process with its managed wire client). docs/drivers/README.md
already said Tier A for both, so the two no longer contradict.
No runtime change — enabling recycle on two live drivers wants its own live
gate, not a docs-pass side effect. Keep-or-delete tracked as Gitea #522.
134 lines
4.8 KiB
JSON
134 lines
4.8 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": "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": "completed",
|
|
"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-27",
|
|
"closureNote": "Task 9 landed 3a590a0c; live gate PASSED 1281aebf. Marked complete 2026-07-27 (deferment.md \u00a78.5)."
|
|
}
|