G2.6 P1: Q0 target-locked automatic command-bound A3 dchg proof - #231
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5fb20acedf
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Pre-merge hardening completed on current head Both P1 correctness blockers are now closed:
No second control implementation was added. Q0 remains one-shot OPEN only, no retry/CLOSE/toggle/restore, profile remains Current-head validation: Build ARSAS #1422 PASS, 583/583 tests; Windows installer #372 PASS; IO #365 PASS; SV #534 PASS. |
|
Resolved manually in PR #231 because the repository Codex environment was not configured for the bot. The two requested correctness fixes were implemented, regression-tested, and both inline review threads are now resolved. |
Goal
Close the physical G2.6-P1 A3 proof deterministically on the already-proven field control path:
AA1C1F08R4Q0/CSWI1.Pos one-shot OPEN -> qualified Q0 MMS status transition -> Dynamic URCB InformationReport(reason=data-change) on the same exact DataSet index -> cleanupThis PR remains a commissioning-only P1 step. It does not mark the IED
ProductionEligibleand does not enable production automatic dynamic reporting.Field finding that changed P1
The latest physical run proved the A3 dchg report path could arm and clean up correctly, but the generic command-focus recovery had selected the first eight alphabetically ordered command-status members (DSQZ/ESQZ) and therefore excluded the intended Q0 status. The manual READY -> operator click flow also timed out without a command being captured.
P1 now removes both ambiguities instead of widening the safety boundary.
Exact Q0 field lock
The automatic A3 coordinator is deliberately hard-bound to:
ied:AA1C1F08R4sha256:50c691318c6d6a16b68b121ac48627c26e6e32b937836d559dca1b9eb559f0d9AA1C1F08R4Q0/CSWI1.PosAA1C1F08R4Q0/CSWI1.Pos.stValOpenonlyThe target must resolve through the existing ARSAS control inspector, be operationally ready, and read exactly
Closed. Open/intermediate/unknown state blocks dispatch. There is no automatic CLOSE, toggle, opposite command, restore command, or retry.Target-scoped transactional recovery
If the current
InformationReportProvenprofile does not contain the exact Q0 command-focus status chain, P1 automatically runs the existing transactional recovery, but on a private target-scoped clone of the discovered signal model:SignalDefinitionobjects are never modifiedControlStatusReferencevalues are suppressed only on private clonesInformationReportProven -> InformationReportProvenProductionEligibleOne-shot automatic stimulus
Ctrl+Shift+Ais now the explicit commissioning action for this field-bounded P1 flow. The successful path has no arm/recovery/manual-command dialog.The existing
DynamicReportCommandBoundDataChangeCommissioningServiceremains authoritative for the dchg-only report/witness transaction. It still does not execute control. After the exact URCB is armed and the final read-only qualified-member baseline is captured, its READY marker is intercepted synchronously by the new Q0 coordinator.At that exact handoff the coordinator performs a final control inspection. Only if Q0 is still exactly operationally ready and
Closeddoes it construct one normalIec61850ControlCommandRequestand call the already-existing:Iec61850MonitorRuntime.ExecuteControlAsync(...)No separate SBO/SBOw/Operate implementation is introduced. The runtime's existing
Control execution requested:diagnostic is emitted before native ARIEC control execution and is consumed by the already-armed A3 witness exactly as before.Automatic dispatch is one-shot:
OpenIf the final READY-time gate fails before dispatch, A3 is cancelled fail-closed and zero commands are sent. If a physical command was already dispatched but later returns ambiguous/error evidence, P1 never retries it; native wire evidence plus physical transition/report evidence remain authoritative.
Deterministic A3 PASS contract
PASS still requires all of the following in the same bounded armed window:
AA1C1F08R4Q0/CSWI1.Pos -> Opencaptured after the final read-only baselinedata-changeThe core remains strict dchg-only: GI=false, integrity=false, qchg=false, dupd=false, with reason-for-inclusion + DataSet-name evidence.
Safety boundaries
ClosedExecuteControlAsyncMarkProductionEligiblein recovery, auto coordinator, or core A3InformationReportProvenValidation — current head
4eedc1449b15ddc24f048040805cef4e508a6dd9main@aa2ddfb47af5f3b806858553568792fbc21a64f19B72E0FDB99F0FC3480F3666A9204363BBB7E7D3BBEC957A6BFE564D6FBB110AA physical Q0 automatic A3 PASS is intentionally not claimed by CI. This PR remains unmerged until the field run proves the exact Q0 one-shot command, qualified transition, spontaneous dchg InformationReport on the same DataSet index, and complete cleanup. Shadow verification and the remaining G2.6 acceptance gates are still required before any later
ProductionEligibletransition.