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.
214 lines
6.2 KiB
JSON
214 lines
6.2 KiB
JSON
{
|
|
"planPath": "archreview/plans/R2-11-tagconfig-consolidation-plan.md",
|
|
"lastUpdated": "2026-07-27",
|
|
"tasks": [
|
|
{
|
|
"id": "T1",
|
|
"subject": "Golden TagConfig corpus + compose\u2192encode\u2192decode parity characterization test (Runtime.Tests, green on unmodified tree)",
|
|
"status": "completed",
|
|
"blockedBy": []
|
|
},
|
|
{
|
|
"id": "T2",
|
|
"subject": "FullName-semantics characterization for EquipmentNodeWalker (Core.Tests) + DraftValidator Galaxy rule (Configuration.Tests)",
|
|
"status": "completed",
|
|
"blockedBy": []
|
|
},
|
|
{
|
|
"id": "T3",
|
|
"subject": "TagConfigIntent + TagAlarmIntent in Commons/Types (TDD; port composer semantics verbatim + OpcUaServer ExtractTag* test tables)",
|
|
"status": "completed",
|
|
"blockedBy": []
|
|
},
|
|
{
|
|
"id": "T4",
|
|
"subject": "DeviceConfigIntent (TryExtractHost/NormalizeHost) in Commons/Types (TDD)",
|
|
"status": "completed",
|
|
"blockedBy": []
|
|
},
|
|
{
|
|
"id": "T5",
|
|
"subject": "AddressSpaceComposer swap: single TagConfigIntent.Parse per tag, delete 4 Extract* statics (P-1 parse-once)",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T1",
|
|
"T3"
|
|
]
|
|
},
|
|
{
|
|
"id": "T6",
|
|
"subject": "Device-host re-home: composer TryExtractDeviceHost/NormalizeDeviceHost \u2192 DeviceConfigIntent; update DriverHostActor + DeploymentArtifact callers",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T4",
|
|
"T5"
|
|
]
|
|
},
|
|
{
|
|
"id": "T7",
|
|
"subject": "DeploymentArtifact swap: delete 4 private mirrors, parse once per tag element via TagConfigIntent",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T5"
|
|
]
|
|
},
|
|
{
|
|
"id": "T8",
|
|
"subject": "DraftValidator swap: Configuration\u2192Commons ProjectReference; ExtractTagConfigFullName \u2192 TagConfigIntent.ExplicitFullName (null-on-absent preserved)",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T2",
|
|
"T3"
|
|
]
|
|
},
|
|
{
|
|
"id": "T9",
|
|
"subject": "EquipmentNodeWalker.ExtractFullName delegates to TagConfigIntent; repoint tree-wide canonical-parser doc cites",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T2",
|
|
"T3"
|
|
]
|
|
},
|
|
{
|
|
"id": "T10",
|
|
"subject": "Retire OpcUaServer.Tests ExtractTag*Tests (authority moved to Commons.Tests); verify zero 'MUST parse identically' hits",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T3",
|
|
"T5"
|
|
]
|
|
},
|
|
{
|
|
"id": "T11",
|
|
"subject": "TagConfigJson strict-capable readers in Core.Abstractions (TryReadEnum Absent/Valid/Invalid, ReadEnumOrDefault, ReadWritable, DescribeInvalidEnum) (TDD)",
|
|
"status": "completed",
|
|
"blockedBy": []
|
|
},
|
|
{
|
|
"id": "T12",
|
|
"subject": "Modbus equipment-tag parser: freeze test, shared readers, honour writable key, Inspect warnings",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T11"
|
|
]
|
|
},
|
|
{
|
|
"id": "T13",
|
|
"subject": "S7 equipment-tag parser: freeze test, shared readers, honour writable key, Inspect warnings (+ amend Contracts banner)",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T11"
|
|
]
|
|
},
|
|
{
|
|
"id": "T14",
|
|
"subject": "AbCip equipment-tag parser: freeze test, shared readers (writable already honoured), Inspect warnings",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T11"
|
|
]
|
|
},
|
|
{
|
|
"id": "T15",
|
|
"subject": "AbLegacy equipment-tag parser: freeze test, shared readers, honour writable key, Inspect warnings",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T11"
|
|
]
|
|
},
|
|
{
|
|
"id": "T16",
|
|
"subject": "TwinCAT equipment-tag parser: freeze test, shared readers, honour writable key, Inspect warnings",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T11"
|
|
]
|
|
},
|
|
{
|
|
"id": "T17",
|
|
"subject": "FOCAS equipment-tag parser: force Writable:false (05/UNDER-1 correction), shared readers, Inspect warnings (+ amend Contracts banner)",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T11"
|
|
]
|
|
},
|
|
{
|
|
"id": "T18",
|
|
"subject": "FOCAS capability-matrix pre-flight on the equipment-tag _parseRef resolve path (BadNodeIdUnknown on rejection)",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T17"
|
|
]
|
|
},
|
|
{
|
|
"id": "T19",
|
|
"subject": "Modbus probe parses the factory DTO shape (timeoutMs round-trip; OpcUaClient parity rule)",
|
|
"status": "completed",
|
|
"blockedBy": []
|
|
},
|
|
{
|
|
"id": "T20",
|
|
"subject": "EquipmentTagConfigInspector DriverType-dispatch map in ControlPlane (+6 Contracts references)",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T12",
|
|
"T13",
|
|
"T14",
|
|
"T15",
|
|
"T16",
|
|
"T17"
|
|
]
|
|
},
|
|
{
|
|
"id": "T21",
|
|
"subject": "AdminOperationsActor deploy-gate wiring + Deployment:TagConfigValidationMode (Warn default | Error opt-in); actor-level consuming test",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T20"
|
|
]
|
|
},
|
|
{
|
|
"id": "T22",
|
|
"subject": "AdminUI writable checkbox in the six driver-typed tag editors (models + razor; live /run verify at execution)",
|
|
"status": "completed",
|
|
"blockedBy": [],
|
|
"closureNote": "LIVE GATE CLOSED 2026-07-13 \u2014 the typed Modbus tag editor shows the Writable toggle and saving persists `writable: yes`."
|
|
},
|
|
{
|
|
"id": "T23",
|
|
"subject": "Docs + decision record: two-mode rollout, unknown-keys non-goal, FOCAS writable migration note, STATUS.md/00-INDEX.md entries + Phase-C follow-up",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T17",
|
|
"T21"
|
|
]
|
|
},
|
|
{
|
|
"id": "T24",
|
|
"subject": "Final sweep: zero parity-comment/ReadEnum-copy grep hits; whole-solution build + test gate",
|
|
"status": "completed",
|
|
"blockedBy": [
|
|
"T5",
|
|
"T6",
|
|
"T7",
|
|
"T8",
|
|
"T9",
|
|
"T10",
|
|
"T12",
|
|
"T13",
|
|
"T14",
|
|
"T15",
|
|
"T16",
|
|
"T17",
|
|
"T18",
|
|
"T19",
|
|
"T21",
|
|
"T22",
|
|
"T23"
|
|
],
|
|
"closureNote": "LIVE GATE CLOSED 2026-07-13 \u2014 see T22. STATUS.md 'docker-dev live-/run pass'."
|
|
}
|
|
]
|
|
}
|