diff --git a/archreview/plans/00-INDEX.md b/archreview/plans/00-INDEX.md index 360b9532..071b6148 100644 --- a/archreview/plans/00-INDEX.md +++ b/archreview/plans/00-INDEX.md @@ -1,5 +1,9 @@ # Arch-Review Remediation Plans โ€” Index +> **๐Ÿ“Š Remediation status โ†’ [`STATUS.md`](STATUS.md).** As of 2026-07-08: **2 of 4 Criticals done** +> (03/S1 split-brain resolver; 02/U2+U3 VT timeout+ALC) + both CLAUDE.md doc-drifts fixed. Each Critical +> is on its own `fix/archreview-crit*` branch off master; plans live only on `docs/archreview-plans-and-drift-fixes`. + Design + implementation plans for every finding in the 2026-07-08 architecture review (`archreview/*.md`, review commit `9cad9ed0`). Each plan verifies every finding against the current tree, then gives root cause โ†’ design (with alternatives) โ†’ concrete file-level diff --git a/archreview/plans/01-core-composition-plan.md b/archreview/plans/01-core-composition-plan.md index bdab392d..c928a885 100644 --- a/archreview/plans/01-core-composition-plan.md +++ b/archreview/plans/01-core-composition-plan.md @@ -1,5 +1,8 @@ # Design + Implementation Plan โ€” Core & Composition Pipeline +> **Status (2026-07-08):** not started. Next highest-leverage here: S-1 (AddressSpaceApplyOutcome failure +> field โ€” failure-visibility) and C-1 (`TagConfigIntent.Parse` in Commons). See [`STATUS.md`](STATUS.md). + **Domain report:** `archreview/01-core-composition.md` **Baseline commit reviewed:** `9cad9ed0` (master) **Plan author verification date:** 2026-07-08 diff --git a/archreview/plans/02-scripting-alarms-plan.md b/archreview/plans/02-scripting-alarms-plan.md index b5a5ba2b..5e19ccd1 100644 --- a/archreview/plans/02-scripting-alarms-plan.md +++ b/archreview/plans/02-scripting-alarms-plan.md @@ -1,5 +1,10 @@ # Design + Implementation Plan โ€” 02 Scripting, Virtual Tags, Scripted Alarms, Alarm Historian +> **Status (2026-07-08):** โœ… **U2 (Critical) + U3 (High) DONE** โ€” branch `fix/archreview-crit2-vt-timeout` +> @ `7fd44f0f` (real `TimedScriptEvaluator` timeout + `CompiledScriptCache` + `IScriptCacheOwner` apply-boundary +> clear; VT tests 18/18 + 12/12). Remaining: P1 (memoize `ScriptSandbox.Build`), U1 (retire dormant +> `Core.VirtualTags` engine โ€” after U2/U3 hardened the live path), and the S/C/P batches. See [`STATUS.md`](STATUS.md). + - **Source report:** `archreview/02-scripting-alarms.md` - **Review commit:** `9cad9ed0` ยท **Plan verified against tree at:** `9cad9ed0` (master) - **Scope:** `Core.Scripting`(+`Abstractions`), `Core.VirtualTags`, `Core.ScriptedAlarms`, `Core.AlarmHistorian`, plus the live consumers in `Host`/`Runtime`. diff --git a/archreview/plans/03-server-runtime-plan.md b/archreview/plans/03-server-runtime-plan.md index d905084b..2d740cbb 100644 --- a/archreview/plans/03-server-runtime-plan.md +++ b/archreview/plans/03-server-runtime-plan.md @@ -1,5 +1,11 @@ # Design & Implementation Plan โ€” Server & Runtime Subsystem (Report 03) +> **Status (2026-07-08):** โœ… **S1 (Critical) activation DONE** โ€” branch `fix/archreview-crit1-split-brain-resolver` +> @ `a81dea10` (typed `KeepOldestOption`, unit guards + e2e config-resolution verified). โœ… **U1 doc DONE** +> (CLAUDE.md KNOWN LIMITATION 2 corrected). โฌœ S1's hard-kill failover **integration test** still pending (task 9, +> effort-M). โฌœ **U2 (reflection forwarding test) pending โ€” MUST land before P1 surgical-adds** / any new sink +> capability. Remaining: P1, S2/S3/S4. See [`STATUS.md`](STATUS.md). + - **Source report:** `archreview/03-server-runtime.md` - **Review commit:** `9cad9ed0` - **Verification pass performed against tree at:** current `master` (same tree; all cited files present) diff --git a/archreview/plans/04-adminui-plan.md b/archreview/plans/04-adminui-plan.md index 5a7d3a0b..a4dd65ae 100644 --- a/archreview/plans/04-adminui-plan.md +++ b/archreview/plans/04-adminui-plan.md @@ -1,5 +1,8 @@ # Architecture Review 04 โ€” AdminUI: Design + Implementation Plan +> **Status (2026-07-08):** not started. Top item: C-1 (ungated mutating pages โ†’ `ConfigEditor` policy + +> reflection guard). No bUnit โ†’ live-verify on docker-dev. See [`STATUS.md`](STATUS.md). + - **Source report:** `archreview/04-adminui.md` (commit `9cad9ed0`) - **Plan author date:** 2026-07-08 ยท verified against current tree at `9cad9ed0` - **Scope:** AdminUI pages, ScriptAnalysis backend, tag editors, authorization diff --git a/archreview/plans/05-protocol-drivers-plan.md b/archreview/plans/05-protocol-drivers-plan.md index 63649abb..29df096b 100644 --- a/archreview/plans/05-protocol-drivers-plan.md +++ b/archreview/plans/05-protocol-drivers-plan.md @@ -1,5 +1,9 @@ # Design + Implementation Plan โ€” 05 Protocol Drivers +> **Status (2026-07-08):** not started. Holds **2 Criticals** โ€” STAB-1 (S7 no-reconnect, task 4) + STAB-2 +> (TwinCAT orphaned ADS subs, task 5); template both off OpcUaClient's reconnect machine; need docker-rig +> fixtures. Then STAB-4/5 (AbCip lock, FOCAS caches) + Part B shared-template consolidation. See [`STATUS.md`](STATUS.md). + **Source report:** `archreview/05-protocol-drivers.md` **Review commit:** `9cad9ed0` (== current HEAD, so no drift) **Verification date:** 2026-07-08 diff --git a/archreview/plans/06-gateway-integrations-plan.md b/archreview/plans/06-gateway-integrations-plan.md index 9e2e1ffe..6e301ede 100644 --- a/archreview/plans/06-gateway-integrations-plan.md +++ b/archreview/plans/06-gateway-integrations-plan.md @@ -1,5 +1,9 @@ # Plan 06 โ€” Gateway Integrations (Galaxy Driver + Historian Gateway Driver) +> **Status (2026-07-08):** โœ… **U-1 doc DONE** (CLAUDE.md KNOWN LIMITATION 2 corrected โ€” historized-ref feed +> is wired). Remaining: S-1 (Galaxy write fail-closed โ€” failure-visibility), S-6 (dormant historian health +> surface โ€” built-but-never-wired). See [`STATUS.md`](STATUS.md). + - **Source report:** `archreview/06-gateway-integrations.md` - **Scope:** `src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Galaxy` (+ `.Contracts`, `.Browser`), `src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Historian.Gateway` - **Commit reviewed against:** current tree (report cut at `9cad9ed0`) diff --git a/archreview/plans/07-client-tooling-engineering-plan.md b/archreview/plans/07-client-tooling-engineering-plan.md index c07a81c4..666510ae 100644 --- a/archreview/plans/07-client-tooling-engineering-plan.md +++ b/archreview/plans/07-client-tooling-engineering-plan.md @@ -1,5 +1,9 @@ # Plan 07 โ€” Client Tooling, Analyzers & Cross-Cutting Engineering System +> **Status (2026-07-08):** not started (the ScriptAnalysis-policy doc drift it references was fixed in +> CLAUDE.md). Systemic guards: C-1 (wire OTOPCUA0001 analyzer, task 7 โ€” triage before Warning) + S-1/S-2 +> (CI to all suites + fail-on-skip, task 8 โ€” pair S-4 flakes). See [`STATUS.md`](STATUS.md). + | | | |---|---| | **Source report** | `archreview/07-client-tooling-engineering.md` | diff --git a/archreview/plans/STATUS.md b/archreview/plans/STATUS.md new file mode 100644 index 00000000..716da3cb --- /dev/null +++ b/archreview/plans/STATUS.md @@ -0,0 +1,59 @@ +# Arch-Review Remediation โ€” Status & Handoff + +**Snapshot:** 2026-07-08 ยท **Review baseline:** master `9cad9ed0` ยท this file is the single source of +truth for remediation progress. Update it as work lands. + +## Branch topology (all LOCAL โ€” nothing pushed, nothing on master) + +| Branch | Head | Contains | +|---|---|---| +| `master` | `9cad9ed0` | untouched baseline | +| `docs/archreview-plans-and-drift-fixes` | `9fadead6` | the 7 domain plans + `00-INDEX.md` + this `STATUS.md` + the two CLAUDE.md doc-drift fixes. **(the plans live ONLY here)** | +| `fix/archreview-crit1-split-brain-resolver` | `a81dea10` | Critical 1 (03/S1) activation + guard test + Redundancy.md | +| `fix/archreview-crit2-vt-timeout` | `7fd44f0f` | Critical 2 (02/U2 + 02/U3) + tests | + +**Decision (user):** one branch per Critical, each off `master`. The plans are only on the docs branch, +so from a critical branch read them via `git show docs/archreview-plans-and-drift-fixes:archreview/plans/0X-.md`. + +## Completed + +| Item | Finding | Branch @ commit | Verification | +|---|---|---|---| +| **Critical 1 โ€” split-brain resolver activated** | 03/S1 | `fix/archreview-crit1-split-brain-resolver` `a81dea10` | `BuildClusterOptions` sets `KeepOldestOption{DownIfAlone=true}`; 3 unit guards (Cluster.Tests 29/29); **e2e-verified** the resolved ActorSystem config carries `SplitBrainResolverProvider` + `stable-after=15s` survives the HOCON/Hosting merge (throwaway spike, removed). HOCON cross-ref comment + Redundancy.md corrected. | +| **Critical 2a โ€” real VT script timeout** | 02/U2 | `fix/archreview-crit2-vt-timeout` `7fd44f0f` | Routes through `TimedScriptEvaluator`; infinite-loop test (bounded by WaitAsync) proves no hang. Host.Integration VT 18/18. | +| **Critical 2b โ€” ALC-safe compile cache** | 02/U3 | same `7fd44f0f` | Swapped raw dict โ†’ `CompiledScriptCache`; new `IScriptCacheOwner` seam; apply-boundary clear in `VirtualTagHostActor`; wiring guard test. Runtime VT 12/12. | +| **Doc drift โ€” KNOWN LIMITATION 2 stale** | 03/U1 = 06/U-1 | `docs/โ€ฆ` `9fadead6` (CLAUDE.md) | historized-ref feed IS wired; rewrote to "value-capture code-complete, live-verify pending". | +| **Doc drift โ€” ScriptAnalysis policy** | theme #5 | same `9fadead6` (CLAUDE.md) | corrected `FleetAdmin` โ†’ `Administrator,Designer` roles. | + +## Task list (TaskCreate IDs) + +| # | Task | Status | +|---|---|---| +| 1 | Critical 1 โ€” split-brain resolver | โœ… completed | +| 2 | Critical 2a โ€” VT timeout | โœ… completed | +| 3 | Critical 2b โ€” CompiledScriptCache | โœ… completed | +| 4 | Critical 3 โ€” S7 reconnect (05/STAB-1) | โฌœ pending | +| 5 | Critical 4 โ€” TwinCAT ADS re-registration (05/STAB-2) | โฌœ pending | +| 6 | Guard โ€” DeferredAddressSpaceSink reflection forwarding test (03/U2) | โฌœ pending โ€” **must precede** 03/P1 surgical-adds + any new sink capability | +| 7 | Guard โ€” wire OTOPCUA0001 analyzer + triage (07/C-1) | โฌœ pending โ€” triage before Warning severity; C-1 triage โ†’ C-2 | +| 8 | Guard โ€” CI to all unit suites + fail-on-skip (07/S-1,S-2, pair S-4) | โฌœ pending | +| 9 | Critical 1 follow-up โ€” hard-kill failover integration test (03/S1) | โฌœ pending โ€” the effort-M harness half; activation itself is done+verified | + +## Suggested next (from 00-INDEX execution order) + +1. **Critical 3 (05/STAB-1)** + **Critical 4 (05/STAB-2)** โ€” template both off OpcUaClient's reconnect + machine; effort-M, need docker-rig fixtures (`lmxopcua-fix up s7 s7_1500`, TwinCAT sim). New branches each. +2. **Systemic guards** โ€” task 7 (analyzer) then task 8 (CI); task 6 (forwarding test) before any P1/P2 work. +3. **Failure-visibility Highs** โ€” 01/S-1 (AddressSpaceApplyOutcome failure field), 06/S-1 (Galaxy fail-closed), + 03/S4 (primary-gate default-deny). + +## Key resume facts + +- **Verification bar met so far:** each fix has a deterministic unit guard AND (for SBR) an end-to-end + config-resolution check. Follow the same pattern โ€” the review's whole thesis is "unit-green โ‰  wired". +- **The forwarding-test guard (task 6) is load-bearing:** 03/P1 (surgical pure-adds) and 02/P-โ€ฆ batch-write + each add new sink capability methods that ship inert unless forwarded through `DeferredAddressSpaceSink` + (F10b/PR#423 precedent). Land task 6 first. +- **Nothing is pushed.** When the user asks to integrate: PR each `fix/archreview-crit*` branch; the docs + branch can merge first (plans + doc fixes are low-risk). +- **Plans are on the docs branch only** โ€” see topology note above for cross-branch reads.