Surface deleted MVO details and sync rule attribution in outcomes#1098
Merged
Conversation
…o 10.0.10 Data Protection 10.0.10 pulls in System.Security.Cryptography.Xml 10.0.9, which now carries four high-severity advisories (GHSA-23rf-6693-g89p, GHSA-8q5v-6pqq-x66h, GHSA-cvvh-rhrc-wg4q, GHSA-g8r8-53c2-pm3f). NuGet audit treats these as errors, so restore fails repo-wide. Re-apply the previously used direct transitive override at the patched 10.0.10 and refresh lock files. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mio4FzDypheXHLL7Vgg9US
…#1085) Adds nullable SyncRuleId + SyncRuleName snapshot columns to ActivityRunProfileExecutionItemSyncOutcome so causality data records which Synchronisation Rule caused an outcome. Populated for DisconnectedOutOfScope (the scoping rule), and opportunistically for Projected and Provisioned where the rule is already in hand. Stored as plain scalars with a name snapshot, matching the TargetEntityId pattern, so attribution survives rule rename/deletion. Raw-SQL bulk insert, COPY, and cross-page merge paths updated; new migration AddSyncRuleAttributionToSyncOutcomes; plan doc updated to keep #399 in step. Attribute-level attribution remains with #399. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mio4FzDypheXHLL7Vgg9US
…mes (#1086) The out-of-scope path broke the CSO-MVO join before outcome nodes were built from that navigation, so MVO Deleted / MVO Deletion Scheduled nodes rendered as bare labels. The display name is now snapshotted before recall/deletion and threaded through the change result, all build paths populate TargetEntityId/TargetEntityDescription, and DetailMessage carries why the Metaverse Object Deletion Rule fired plus the grace period for scheduled deletions. The Causality Tree links MVO Deleted nodes to the deletion record browser. Historic rows without a snapshot degrade to the previous label. Changelog and activities doc updated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mio4FzDypheXHLL7Vgg9US
Fifth member of the July 2026 .NET servicing wave already suppressed in .trivyignore; added to Trivy's database after that entry was written. Flagged against System.Security.Cryptography.Xml 10.0.6 bundled inside the SDK image's PowerShell 7.6.2 install, which exists only in the build stage; the runtime images scan clean and JIM's own reference is overridden to 10.0.10. No newer sdk:10.0-noble digest exists to pull. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mio4FzDypheXHLL7Vgg9US
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Mio4FzDypheXHLL7Vgg9US
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Closes #1085 and #1086
This PR implements two related improvements to sync outcome tracking in the causality tree:
Sync Rule Attribution (Persist the scoping Synchronisation Rule on Out of Scope sync outcomes #1085): When a CSO falls out of scope or is projected, the resulting sync outcomes now record which Synchronisation Rule caused the change (rule id + name snapshot). This ensures the attribution survives later rule renames or deletions, providing administrators with clear context in the causality tree.
Deleted MVO Details (Causality Tree: surface deleted Identity details on MVO Deleted outcomes #1086): When a Metaverse Object is deleted as a result of an out-of-scope disconnect, the
MvoDeletedandMvoDeletionScheduledoutcomes now carry:Previously, the out-of-scope disconnection path left these fields null because the CSO→MVO join was broken before outcome nodes were built, producing bare "MVO Deleted" labels in the causality tree with no context.
Changes
SyncRuleIdandSyncRuleNamecolumns toActivityRunProfileExecutionItemSyncOutcome(migration20260721215606)MetaverseObjectChangeResultto capture deleted MVO id/name and deletion rule reason before the join is broken; updatedProjectionDecisionandExportEvaluationResultto carry sync rule attributionSyncTaskProcessorBaseto record MVO deletion outcomes for out-of-scope disconnects with existing RPEIs; updatedSyncOutcomeBuilderto populate sync rule and deletion details on outcomesOutcomeTreeNode.razorto link to the durable deletion record browser for MVO Deleted outcomes (since the MVO no longer exists)MvoDeletionOutcomeDetailTests,SyncRuleOutcomeAttributionTests) and database-level tests (SyncOutcomeSyncRuleAttributionDatabaseTests) to verify both features; added export evaluation test for opportunistic provisioning attributionType of change
Testing
dotnet build JIM.slnsucceeds with zero errorsdotnet test JIM.slnpassesTest coverage:
MvoDeletionOutcomeDetailTests(410 lines): Verifies deleted MVO details appear in outcomes for both immediate and scheduled deletions via out-of-scope pathSyncRuleOutcomeAttributionTests(266 lines): Verifies sync rule attribution on DisconnectedOutOfScope and Projected outcomesSyncOutcomeSyncRuleAttributionDatabaseTests(135 lines): Real PostgreSQL verification that bulk insert paths persist sync rule columnsExportEvaluationTests: Added test for opportunistic provisioning rule attributionSyncOutcomeBuilderTests: Added tests for sync rule field populationOutOfScopeChangeTypeTests: Extended to verify MVO deletion fate captureDocumentation
engineering/SYNC_RULE_CAUSALITY_TRACKING.md)docs/configuration/activities.md) - clarified sync outcome field set and MVO deletion outcome detailsChecklist
docs/DEVELOPER_GUIDE.mdAdditional context
The fix addresses a long-standing gap in causality tree visibility: administrators could not see why a
https://claude.ai/code/session_01Mio4FzDypheXHLL7Vgg9US