docs(plans): closeout as-built record; prior plan's out-of-scope table closed

This commit is contained in:
Joseph Doherty
2026-08-17 05:03:02 -04:00
parent d05f38b661
commit f5a58d884b
2 changed files with 52 additions and 0 deletions
@@ -309,6 +309,15 @@ Push the branch to origin, then on windev (`ssh windev`, clone `C:\build\mxacces
| SEC-25 per-session dashboard event ACL | Security roadmap item; Task 6 deliberately preserves the current posture. | | SEC-25 per-session dashboard event ACL | Security roadmap item; Task 6 deliberately preserves the current posture. |
| `MxAccessWriteCompletionCache` clone | Different lifecycle than the value cache; consciously kept (Task 12.5). | | `MxAccessWriteCompletionCache` clone | Different lifecycle than the value cache; consciously kept (Task 12.5). |
Closure (2026-08-17, [`docs/plans/2026-08-17-deferred-closeout.md`](2026-08-17-deferred-closeout.md),
branch `feat/deferred-closeout`): the probes were **attempted** — the rig's alarm-condition
writes are refused (`SecurityError` from the responding object), so GUID identity is confirmed
for the active→returned leg only and `@COUNT` stays unverified; evidence and unblock paths in
`docs/AlarmProbeFindings.md`. The truncation degraded-status signal **shipped** (additive proto
fields, worker→gateway→dashboard, all five clients regenerated). SEC-25 **shipped** (per-session
event ACL on both dashboard subscribe seams; design doc marked Implemented). The
`MxAccessWriteCompletionCache` clone row remains consciously kept.
--- ---
## As-built notes (execution record) ## As-built notes (execution record)
@@ -386,6 +386,49 @@ skipped.
--- ---
## As-built notes (execution record, 2026-08-17)
All 12 tasks completed on `feat/deferred-closeout`; every implement went through its
classification's review chain to Approved. Verification: macOS build 0W/0E + gateway
1123/1123; windev full slnx 0W/0E, worker x86 523/523 (11 standing opt-in skips),
gateway 1123/1123, live MXAccess smoke 8/8 — green first try, no stale-obj quirk.
- **Task 3 ended blocked, with evidence.** The rig refuses the alarm-condition writes
(`SecurityError` from the responding automation object — the test UDAs need
`AuthenticateUser`+`WriteSecured` or the in-engine flip script that drove the
2026-05-01 capture). `docs/AlarmProbeFindings.md` records what was tried, the
partial GUID answer (active→returned leg confirmed), and the unblock paths.
- **Commit `693a78d` contains two tasks' work.** A concurrent implementer's `git commit`
without pathspecs swept Task 6's staged ACL files into Task 8's alarm commit. Nothing
was lost; both halves were reviewed separately and their fix rounds (`7ec0b35`,
`b9fb0dd`) are clean single-task commits. Process rule tightened mid-run: pathspecs
on the commit itself, not just the add.
- **Task 8's atomicity fix went structural.** Review found the flag/snapshot pairing
relied on STA serialization while claiming a read-order guarantee; the fix made
`SnapshotActiveAlarms(out bool truncated)` the *only* accessor, so the unpaired read
is unexpressible.
- **Task 6 review caught a real regression** (async attach re-entrancy under rapid
navigation) — closed with a generation guard and a mutation-verified interleaving test.
- **Live-LDAP ACL tests ran green against the shared GLAuth** (7/7, plus 7/7 clean-skip
without the env gate). `multi-role` sits in both GLAuth groups, so the Admin-bypass
test asserts the sessions a dropped bypass would actually lose (team-b + untagged).
- **Task 9 found and fixed pre-existing drift**: `clients/rust/protos/mxaccess_gateway.proto`
had diverged from Contracts (masked by the in-repo build path); refreshed byte-identical,
and the client protoset descriptors were regenerated.
Follow-ups recorded, not started:
- `IGatewayAlarmService.StreamAsync` / `AlarmFeedMessage` does not carry the truncation
signal — live central-feed consumers (lmxopcua, ScadaBridge) cannot see snapshot
degradation; add if those consumers need completeness reasoning.
- No guard keeps `clients/rust/protos/` in sync with Contracts (a `diff` check in
`scripts/check-codegen.ps1` would close it).
- `EffectiveDashboardConfiguration` (dashboard settings page) doesn't display
`GroupToTag` / `UntaggedSessionVisibility`, though it shows `GroupToRole`.
- The alarm probes' remaining questions (ack-leg GUID stability, `@COUNT` semantics)
unblock via the paths in `docs/AlarmProbeFindings.md`.
---
## Execution notes for the orchestrator ## Execution notes for the orchestrator
- Branch `feat/deferred-closeout` off `main` before Task 1. - Branch `feat/deferred-closeout` off `main` before Task 1.