G2.6 P1.5: legacy InformationReportProven compatibility adapter - #101
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 66ab426b0a
ℹ️ 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".
| public string StableIdentityKey { get; init; } = string.Empty; | ||
| public string ModelFingerprint { get; init; } = string.Empty; | ||
| public string ProfileRevision { get; init; } = string.Empty; |
There was a problem hiding this comment.
Bind compatibility evidence to the firmware revision
When archived compatibility evidence comes from firmware A but the persisted GI profile and current device are on firmware B, this adapter still accepts it as long as the stable key, model fingerprint, and profile revision stayed unchanged. The existing identity policy explicitly treats firmware changes as requiring requalification, but this evidence contract has no firmware field to compare, so a stale physical proof can unlock dynamic RCB/DataSet writes on an untested firmware version. Add the firmware revision to the evidence identity and require an exact match before adapting the profile.
AGENTS.md reference: AGENTS.md:L88-L90
Useful? React with 👍 / 👎.
| !string.IsNullOrWhiteSpace(StableIdentityKey) && | ||
| !string.IsNullOrWhiteSpace(ModelFingerprint) && | ||
| !string.IsNullOrWhiteSpace(RcbReference) && | ||
| MemberReferences.Count > 0 && |
There was a problem hiding this comment.
Reject null member lists instead of throwing
When application-supplied evidence is deserialized with "memberReferences": null, the non-nullable initializer does not prevent the property from becoming null, and evaluating evidence.IsSuccess throws here instead of returning false. This defeats the stated fail-closed behavior for incomplete evidence and can abort monitoring-plan construction rather than leaving the legacy profile quarantined; test for null before accessing Count and report the evidence as incomplete.
AGENTS.md reference: AGENTS.md:L90-L94
Useful? React with 👍 / 👎.
Goal
Close the P1.5 compatibility gap without weakening the existing guarded runtime planner or
ProductionEligibleboundary.Some field-qualified profiles were persisted as
InformationReportProvenfrom the earlier G2.4 GI proof, while a later G2.5/A3 physical run independently proved a real NO-GI spontaneous data-change InformationReport on the same exact identity / RCB / ordered member envelope. The old profile was intentionally read-only, so the storedInformationReportProof.KindremainedGeneralInterrogation.Change
Adds a separate
MmsGuardedDynamicReportLegacyCompatibilityPolicyand typedMmsDynamicReportLegacyDataChangeCompatibilityEvidence.The adapter is fail-closed. It accepts a legacy profile only when:
InformationReportProvenor stronger;data-changereason verified, GI disabled, exact member mapping verified, association healthy, and cleanup succeeded.If accepted, ARIEC builds an in-memory compatibility view only whose report kind is DataChange, then the existing guarded planner still performs its normal fresh capability / availability / exact-envelope / at-most-one-dynamic-group checks. The original persisted profile object is not mutated or saved.
Safety boundary
MarkProductionEligible.Tests
Adds dedicated P1.5 regression coverage for exact legacy acceptance plus missing evidence, fingerprint mismatch, member-order mismatch, incomplete cleanup, and the native stored-DataChange path.