G2.6: allow guarded dynamic runtime from InformationReportProven evidence - #100
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 29a14645f8
ℹ️ 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".
| if (!capability.MayAttemptDynamicReports) | ||
| { | ||
| return GuardedDynamicAuthorization.Denied( | ||
| "The current MMS association does not satisfy the dynamic-report capability gate."); |
There was a problem hiding this comment.
Recheck request size against the current association
When the current association negotiates a smaller MaxMmsPduSize than the profile's AcceptedEnvelope.ProvenDefineRequestByteCount, MayAttemptDynamicReports can still be true because the capability evaluator gates only on service availability and free RCB evidence. This therefore authorizes a full-envelope plan that RunGuardedDynamicReportSessionAsync sends without any size preflight, so a previously proven profile can now emit a known-oversized DefineNamedVariableList request and potentially fault the association; compare the planned encoded request size with the current negotiated maximum and withhold or reduce the segment when it does not fit.
AGENTS.md reference: AGENTS.md:L15-L16
Useful? React with 👍 / 👎.
| if (!IsOrderedMemberSubset(plannedMembers, authorization.MemberReferences)) | ||
| { | ||
| reason = "Dynamic segment member order/content is not an ordered subset of the proven InformationReport member set."; | ||
| return false; |
There was a problem hiding this comment.
Build dynamic points in the proven member order
When a valid profile's proven DataSet order differs from lexical signal-key order, the generic hybrid planner sorts resolved points by SignalKey before building the dynamic plan. This check then rejects that permutation as not being an ordered subset and silently rebuilds the entire request as static/polling, so guarded runtime works only for profiles whose device-defined member order happens to match the catalog sort order; order qualified dynamic points by their index in authorization.MemberReferences before planning.
AGENTS.md reference: AGENTS.md:L144-L144
Useful? React with 👍 / 👎.
Goal
Restore Smart Dynamic RCB runtime without conflating runtime authorization with
ProductionEligiblecertification.Design
Adds
MmsGuardedDynamicReportRuntimePlannerandMmsDynamicReportGuardedRuntimePlanningContext.A guarded dynamic segment is allowed only when:
InformationReportProvenor stronger;DataChange;Static reporting remains eligible and polling remains the fallback for anything outside the exact proven envelope or whenever a guarded gate fails.
Important boundary
This does not call
MarkProductionEligible, does not synthesize production acceptance, and leaves the existingMmsCapabilityAwareHybridReportAcquisitionPlannerProductionEligible policy unchanged. Guarded runtime and ProductionEligible certification are separate concepts.Regression coverage
Adds tests for: