Skip to content

Add hybrid report acquisition planner - #66

Closed
masarray wants to merge 6 commits into
mainfrom
feat/hybrid-report-acquisition-p22
Closed

Add hybrid report acquisition planner#66
masarray wants to merge 6 commits into
mainfrom
feat/hybrid-report-acquisition-p22

Conversation

@masarray

@masarray masarray commented Aug 14, 2026

Copy link
Copy Markdown
Owner

P2.2 adds an engine-owned RCB capability, partial-coverage, and hybrid report acquisition planner on top of P2.1 main 5b2adcf21a5c82fd45e23672e14ef4edddbd5de2.

Scope

  • compose the typed signal catalog with fresh MmsRcbAvailabilityResult evidence;
  • calculate static Report Control Block coverage per requested signal rather than treating reporting as an all-or-nothing session decision;
  • reuse caller-owned static reports read-only without rewriting DatSet, reservation, or RptEna;
  • enable safe configured static BRCB/URCB plans only when the live DataSet binding/directory and explicit free runtime state are proven;
  • use verified-empty dynamic BRCB/URCB slots only for still-uncovered signals that resolve exactly in the live MMS directory;
  • keep bounded MMS polling as residual fallback only;
  • expose typed capability counts, acquisition segments, per-signal assignments, write requirements, warnings, and blockers;
  • keep initial fast MMS snapshot acquisition outside the steady-state planner contract.

Safety boundary

  • this PR performs no RCB/DataSet writes;
  • discovered RCB existence alone never means usable;
  • busy, unknown, unreadable, reservation-unknown, and unchecked RCBs are never promoted to automatic write plans;
  • dynamic DataSet planning requires a live-verified empty DatSet, RptEna=false, exact availability evidence, and explicit free reservation state (Resv=false for URCB or ResvTms=0 for BRCB);
  • static coverage is proven against fresh DataSet member evidence and existing typed catalog membership/reference evidence;
  • dynamic member resolution is exact-only (exact MMS reference or one literal live user-reference match); no fuzzy/vendor alias heuristic is used;
  • polling fallback and uncovered states never imply signal absence;
  • the planner emits typed write intent only; an execution layer must revalidate write-sensitive state before mutation;
  • no ARSAS code is changed.

Regression coverage

  • mixed static BRCB + static URCB + polling residual;
  • caller-owned report reuse without writes;
  • static then dynamic URCB coverage with unresolved residual polling;
  • dynamic BRCB requiring verified-empty DatSet plus explicit ResvTms=0;
  • busy/reservation-unknown RCB rejection;
  • effective alternate MMS reference static coverage without changing canonical identity;
  • polling-disabled residual remaining Uncovered, never missing;
  • capability counts separating discovered, checked, usable, busy, and unknown RCBs;
  • public default guardrails and empty-request contract.

Documentation

docs/HYBRID_REPORT_ACQUISITION.md documents the steady-state acquisition sequence, ARIEC/consumer ownership boundary, fresh-availability rules, partial static coverage, dynamic residual planning, polling semantics, write boundary, and physical-validation boundary. CHANGELOG.md records the P2.2 API.

Exact-head validation

Authoritative head: 3407919d80e44b66288fb3c06ee0b6609d3c3499.

.NET CI #301, run 31767731605, passed on this exact head:

  • checkout/source provenance, wording and license verification: SUCCESS;
  • .NET setup and restore: SUCCESS;
  • full Release build: SUCCESS;
  • complete automated test step: SUCCESS;
  • test diagnostics upload: SUCCESS.

The branch remains exactly based on P2.1 main 5b2adcf21a5c82fd45e23672e14ef4edddbd5de2; main did not advance during this implementation.

Merge / physical validation gate

Keep this PR draft for now. CI proves the deterministic planner and fail-closed software contract; it does not prove that the physical IED accepts the resulting RCB/DataSet operations or actually delivers report traffic. The next integration step is for ARSAS to consume the typed plan without adding app-side report heuristics, then validate on the physical IED that report-covered points transition away from continuous polling while only true residual points remain on MMS polling.

Copy link
Copy Markdown
Owner Author

Superseded by current-main consolidation PR #74, merged as 2af88f51df759c7a7083795b3804ab8dc41e8922. The planner, P2.2 tests, and documentation were ported byte-for-byte from this previously CI-green branch onto current main; only CHANGELOG was updated against the current baseline. Fresh PR CI #319 passed, and post-merge main CI #320 passed. Closing this stale draft rather than merging its old-base ancestry. Historical branch/commits remain preserved.

@masarray masarray closed this Aug 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant