Files
lmxopcua/docs/v2/implementation/overview.md
Joseph Doherty 592fa79e3c Add Phase 0 + Phase 1 detailed implementation plans under docs/v2/implementation/ with a phase-gate model so the work can be verified for compliance to the v2 design as it lands. Three-gate structure per phase (entry / mid / exit) with explicit compliance-check categories: schema compliance (live DB introspected against config-db-schema.md DDL via xUnit), decision compliance (every decision number cited in the phase doc must have at least one code/test citation in the codebase, verified via git grep), visual compliance (Admin UI screenshots reviewed side-by-side against ScadaLink CentralUI's equivalent screens), behavioral compliance (per-phase end-to-end smoke test that always passes at exit, never "known broken fix later"), stability compliance (cross-cutting protections from driver-stability.md wired up and regression-tested for Tier C drivers), and documentation compliance (any deviation from v2 design docs reflected back as decision-log updates with explicit "supersedes" notes). Exit gate requires two-reviewer signoff and an exit-gate-{phase}.md record; silent deviation is the failure mode the gates exist to make impossible to ship. Phase 0 doc covers the mechanical LmxOpcUa → OtOpcUa rename with 9 tasks, 7 compliance checks, and a completion checklist that gates on baseline test count parity. Phase 1 doc covers the largest greenfield phase — 5 work streams (Core.Abstractions, Configuration project with EF Core schema + stored procs + LiteDB cache + generation-diff applier, Core with GenericDriverNodeManager rename + IAddressSpaceBuilder + driver isolation, Server with Microsoft.Extensions.Hosting replacing TopShelf + credential-bound bootstrap, Admin Blazor Server app mirroring ScadaLink CentralUI verbatim with LDAP cookie auth + draft/diff/publish workflow + UNS structure management + equipment CRUD + release-reservation and merge-equipment operator flows) — with task-level acceptance criteria, a 14-step end-to-end smoke test, and decision citation requirements for #1-125. New decisions #126-127 capture the gate model and per-phase doc structure. Cross-references added to plan.md Reference Documents section.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 11:25:09 -04:00

10 KiB
Raw Blame History

Implementation Plan Overview — OtOpcUa v2

Status: DRAFT — defines the gate structure, compliance check approach, and deliverable conventions used across all phase implementation plans (phase-0-*.md, phase-1-*.md, etc.).

Branch: v2 Created: 2026-04-17

Purpose

Each phase of the v2 build (plan.md §6 Migration Strategy) gets a dedicated detailed implementation doc in this folder. This overview defines the structure those docs follow so reviewers can verify compliance with the v2 design without re-reading every artifact.

Phase Gate Structure

Every phase has three gates the work must pass through:

        ┌──────────┐       ┌──────────┐       ┌──────────┐
START ──┤ ENTRY    │── do ──┤ MID      │── verify ──┤ EXIT     │── PHASE COMPLETE
        │ GATE     │  work  │ GATE     │  artifacts │ GATE     │
        └──────────┘        └──────────┘            └──────────┘

Entry gate

Purpose: ensures the phase starts with a known-good state and all prerequisites met. Prevents starting work on top of broken foundations.

Checked before any phase work begins:

  • Prior phase has cleared its exit gate (or this is Phase 0)
  • Working tree is clean on the appropriate branch
  • All baseline tests for the prior phase still pass
  • Any external dependencies the phase needs are confirmed available
  • Implementation lead has read the phase doc and the relevant sections of plan.md, config-db-schema.md, driver-specs.md, driver-stability.md, admin-ui.md

Evidence captured: a short markdown file entry-gate-{phase}.md recording the date, signoff, baseline test pass, and any deviations noted.

Mid gate

Purpose: course-correct partway through the phase. Catches drift before it compounds. Optional for phases ≤ 2 weeks; required for longer phases.

Checked at the midpoint:

  • Are the highest-risk deliverables landing on schedule?
  • Have any new design questions surfaced that the v2 docs don't answer? If so, escalate to plan revision before continuing.
  • Are tests being written alongside code, or accumulating as a backlog?
  • Has any decision (plan.md decision log) been silently violated by the implementation? If so, either revise the implementation or revise the decision (with explicit "supersedes" entry).

Evidence captured: short status update appended to the phase doc.

Exit gate

Purpose: ensures the phase actually achieved what the v2 design specified, not just "the code compiles". This is where compliance verification happens.

Checked before the phase is declared complete:

  • All acceptance criteria for every task in the phase doc are met (each criterion has explicit evidence)
  • All compliance checks (see below) pass
  • All completion checklist items are ticked, with links to the verifying artifact (test, screenshot, log line, etc.)
  • Phase commit history is clean (no half-merged WIP, no skipped hooks)
  • Documentation updates merged: any change in approach during the phase is reflected back in the v2 design docs (plan.md decision log gets new entries; config-db-schema.md updated if schema differed from spec; etc.)
  • Adversarial review run on the phase output (/codex:adversarial-review or equivalent) — findings closed or explicitly deferred with rationale
  • Implementation lead and one other reviewer sign off

Evidence captured: exit-gate-{phase}.md recording all of the above with links and signatures.

Compliance Check Categories

Phase exit gates run compliance checks across these axes. Each phase doc enumerates the specific checks for that phase under "Compliance Checks".

1. Schema compliance (Phase 1+)

For phases that touch the central config DB:

  • Run EF Core migrations against a clean SQL Server instance
  • Diff the resulting schema against the DDL in config-db-schema.md:
    • Table list matches
    • Column types and nullability match
    • Indexes (regular + unique + filtered) match
    • CHECK constraints match
    • Foreign keys match
    • Stored procedures present and signatures match
  • Any drift = blocking. Either fix the migration or update the schema doc with explicit reasoning, then re-run.

2. Decision compliance

For each decision number cited in the phase doc (#XX references to plan.md decision log):

  • Locate the artifact (code module, test, configuration file) that demonstrates the decision is honored
  • Add a code comment or test name that cites the decision number
  • Phase exit gate uses a script (or grep) to verify every cited decision has at least one citation in the codebase

This makes the decision log a load-bearing reference, not a historical record.

3. Visual compliance (Admin UI phases)

For phases that touch the Admin UI:

  • Side-by-side screenshots of equivalent ScadaLink CentralUI screens vs the new OtOpcUa Admin screens
  • Login page, sidebar, dashboard, generic forms — must visually match per admin-ui.md §"Visual Design — Direct Parity with ScadaLink"
  • Reviewer signoff: "could the same operator move between apps without noticing?"

4. Behavioral compliance (end-to-end smoke tests)

For each phase, an integration test exercises the new capability end-to-end:

  • Phase 0: existing v1 IntegrationTests pass under the renamed projects
  • Phase 1: create a cluster → publish a generation → node fetches the generation → roll back → fetch again
  • Phase 2: v1 IntegrationTests parity suite passes against the v2 Galaxy.Host (per decision #56)
  • Phase 3+: per-driver smoke test against the simulator

Smoke tests are always green at exit, never "known broken, fix later".

5. Stability compliance (Phase 2+ for Tier C drivers)

For phases that introduce Tier C drivers (Galaxy in Phase 2, FOCAS in Phase 5):

  • All Driver Stability & Isolation cross-cutting protections from driver-stability.md §"Cross-Cutting Protections" are wired up:
    • SafeHandle wrappers exist for every native handle
    • Memory watchdog runs and triggers recycle on threshold breach (testable via FaultShim)
    • Crash-loop circuit breaker fires after 3 crashes / 5 min (testable via stub-injected crash)
    • Heartbeat between proxy and host functions; missed heartbeats trigger respawn
    • Post-mortem MMF survives a hard process kill and the supervisor reads it on respawn
  • Each protection has a regression test in the driver's test suite

6. Documentation compliance

For every phase:

  • Any deviation from the v2 design docs (plan.md, config-db-schema.md, admin-ui.md, driver-specs.md, driver-stability.md, test-data-sources.md) is reflected back in the docs
  • New decisions added to the decision log with rationale
  • Old decisions superseded explicitly (not silently)
  • Cross-references between docs stay current

Deliverable Types

Each phase produces a defined set of deliverables. The phase doc enumerates which deliverables apply.

Type Format Purpose
Code Source files committed to a feature branch, merged to v2 after exit gate The implementation itself
Tests xUnit unit + integration tests; per-phase smoke tests Behavioral evidence
Migrations EF Core migrations under Configuration/Migrations/ Schema delta
Decision-log entries New rows appended to plan.md decision table Architectural choices made during the phase
Doc updates Edits to existing v2 docs Keep design and implementation aligned
Gate records entry-gate-{phase}.md, exit-gate-{phase}.md in this folder Audit trail of gate clearance
Compliance script Per-phase shell or PowerShell script that runs the compliance checks Repeatable verification
Adversarial review /codex:adversarial-review output on the phase diff Independent challenge

Branch and PR Conventions

Branch Purpose
v2 Long-running design + implementation branch. All phase work merges here.
v2/phase-{N}-{slug} Per-phase feature branch (e.g. v2/phase-0-rename)
v2/phase-{N}-{slug}-{subtask} Per-subtask branches when the phase is large enough to warrant them

Each phase merges to v2 via PR after the exit gate clears. PRs include:

  • Link to the phase implementation doc
  • Link to the exit-gate record
  • Compliance-script output
  • Adversarial-review output
  • Reviewer signoffs

The master branch stays at v1 production state until all phases are complete and a separate v2 release decision is made.

What Counts as "Following the Plan"

The implementation follows the plan when, at every phase exit gate:

  1. Every task listed in the phase doc has been done OR explicitly deferred with rationale
  2. Every compliance check has a passing artifact OR an explicit deviation note signed off by the reviewer
  3. The codebase contains traceable references to every decision number the phase implements
  4. The v2 design docs are updated to reflect any approach changes
  5. The smoke test for the phase passes
  6. Two people have signed off — implementation lead + one other reviewer

The implementation deviates from the plan when any of those conditions fails. Deviations are not failures; they are signals to update the plan or revise the implementation. The unrecoverable failure mode is silent deviation — code that doesn't match the plan, with no decision-log update explaining why. The exit gate's compliance checks exist specifically to make silent deviation impossible to ship.

Phase Implementation Docs

Phase Doc Status
0 phase-0-rename-and-net10.md DRAFT
1 phase-1-configuration-and-admin-scaffold.md DRAFT
2 (Phase 2: Galaxy parity refactor — TBD) NOT STARTED
3 (Phase 3: Modbus TCP driver — TBD) NOT STARTED
4 (Phase 4: PLC drivers AB CIP / AB Legacy / S7 / TwinCAT — TBD) NOT STARTED
5 (Phase 5: Specialty drivers FOCAS / OPC UA Client — TBD) NOT STARTED
6+ (Phases 68: tier 1/2/3 consumer cutover — separate planning track per corrections doc C5) NOT SCOPED