diff --git a/docs/superpowers/plans/2026-07-13-opc-gateway.md b/docs/superpowers/plans/2026-07-13-opc-gateway.md index 812e52a..5b63898 100644 --- a/docs/superpowers/plans/2026-07-13-opc-gateway.md +++ b/docs/superpowers/plans/2026-07-13-opc-gateway.md @@ -99,7 +99,14 @@ At the end of each phase Fx, before starting the next: - Wire the gRPC `slot_lookup` seam (address→names from the current slot) so on-demand reads persist; if the lookup becomes I/O-bound, move it inside the servicer's try/except. - gRPC server is internal-only, no auth (no consumer yet — likely frontend later, per feature owner). - Edge case (minor): `read_now` with `SourceTimestamp=None` persists `timestamp=None`; add a guard if it matters in practice. -**F4 — Wiring, health, deploy, hardening:** _(fill at F4 close-out)_ +**F4 — Wiring, health, deploy, hardening** — base `e9ce9e5`. Status: ✅ complete, 222 unit tests green, ruff clean, `grep -i kafka` = 0. +- `ff605ee` feat(gateway): GatewayConfig env (NATS/gRPC/certs/write flags) (Task 17) +- `3912687` feat(gateway): wire engines+adapters via GatewayRuntime (write/gRPC live; subscription v2 gated on 1974) (Task 18) +- `3f413f8` fix(gateway): app survives runtime init failure; dedupe NATS-down notifications; fix stale slot_lookup note (Task 18) +- `21d0b37` docs(gateway): deploy notes for helm/images/platform repos (Task 19+20) +- `cebb521` chore(gateway): final sweep - README/functional Kafka cleanup, asyncua pin, 1879 checklist verification (Task 21) +- Deferred by design (verified in Task 21): NTP sync + `Good_Local_Override` quality downgrade (no flag exists; ties to a real clock-drift case), write-via-OPC-method (card marks it flag/future). Pre-existing legacy files >500 lines (`ingestor_manager.py` 578, `opc_manager.py` 507) flagged, untouched (predate the gateway). +- Integration gates (cross-repo): subscription v2 swap + gRPC persist → SIENTIAPDE-1974; write_status column (Flyway) + Laborious NATS publish → SIENTIAPDE-1975; NATS broker in cluster → SIENTIAPDE-1985. End-to-end validation (real NATS + OPC server machine) agreed with the feature owner for deployment time. ### Final: open per-phase PRs (only after F4 is complete, tested, working) Since all phases live on one feature branch, split them at the end using the recorded SHA ranges: for each phase in order F0→F4, create a phase branch off `main` (or stacked on the previous phase branch) containing only that phase's code commits (cherry-pick the ledger's SHA range), then open one PR per phase targeting `main`, in phase order. This keeps each PR small and reviewable instead of one giant diff. @@ -913,9 +920,9 @@ async def test_readtag_maps_response(): --- ### Task 21.end: F4 close-out + open per-phase PRs (see [Phase Delivery](#phase-delivery--commit-ledger)) -- [ ] Full `pytest tests` green + `ruff` clean; all F0–F4 phases complete, tested, working. -- [ ] Record F4 commit SHAs (base + range) in the [Commit Ledger](#commit-ledger). -- [ ] **Now** open one PR per phase (F0→F4) from the recorded SHA ranges, in order — this is the only point where PRs are opened. +- [x] Full `pytest tests` green (222) + `ruff` clean; all F0–F4 phases complete and unit-tested. +- [x] F4 commit SHAs recorded in the [Commit Ledger](#commit-ledger) (base `e9ce9e5`). +- [ ] **Now** open one PR per phase (F0→F4) from the recorded SHA ranges, in order — this is the only point where PRs are opened. *(Pending: user go-ahead — requires push; also note the epic's end-to-end validation with a real NATS broker + OPC server machine is agreed for deployment time, per the feature owner.)* ---