This PR introduces the Operation Run Actionability System. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #439
4.7 KiB
OperationRun Actionability Repo Truth Map
Date: 2026-06-08
Branch: 367-operationrun-actionability-system
Scope
Spec 367 adds read-time OperationRun actionability. It does not add persistence, migrations, Graph calls, queues, scheduler work, storage changes, Filament assets, panel providers, global search, or destructive actions.
Operation Policy Inventory
The actionability registry covers all known canonical types from OperationCatalog::canonicalInventory(). Aliases resolve through OperationCatalog::canonicalCode() and OperationCatalog::rawValuesForCanonical().
Provider connection current-state policy:
provider.connection.check
Repeatable later-success policy:
inventory.syncpolicy.syncpolicy.snapshotpolicy.exportdirectory.groups.syncdirectory.role_definitions.synccompliance.snapshotpermission.posture.checkentra.admin_roles.scanrbac.health_checktenant.syncassignments.fetchalerts.evaluatealerts.deliverops.reconcile_adapter_runs
Artifact-or-later-success policy:
baseline.capturebaseline.comparetenant.evidence.snapshot.generateenvironment.review.composeenvironment.review_pack.generatebackup_set.updatebackup.schedule.executebackup.schedule.retention
Manual-review policy:
policy.deletepolicy.restorebackup_set.archivebackup_set.restorebackup_set.deletebackup.schedule.purgerestore.executepromotion.executeassignments.restorerestore_run.deleterestore_run.restorerestore_run.force_deletepolicy_version.prunepolicy_version.restorepolicy_version.force_delete
Unknown operation types fail closed as requires_manual_review.
Current-State Proof
Terminal problem gate:
- Only completed runs with
blocked,partially_succeeded, orfailedoutcomes, or lifecycle-reconciled terminal rows, are eligible for current follow-up. - Completed
succeededrows are not terminal problems, even when they carry reconciliation metadata.
Later success proof:
- Must be a later completed successful OperationRun.
- Must match workspace and managed environment.
- Must match the policy family's context keys where either side has a value, such as
provider_connection_id,provider,selection_hash,baseline_profile_id,backup_set_id, orbackup_schedule_id.
Provider connection proof:
- Uses the same
provider_connection_idfrom OperationRun context. - Requires the ProviderConnection to match workspace and managed environment.
- Requires
is_enabled = true,consent_status = granted, andverification_status = healthy.
Artifact proof:
baseline.capturecan resolve through a same-workspace complete BaselineSnapshot.tenant.evidence.snapshot.generatecan resolve through a same-scope active and complete EvidenceSnapshot.environment.review.composecan resolve through a same-scope EnvironmentReview.environment.review_pack.generatecan resolve through a same-scope ready ReviewPack.backup_set.update,backup.schedule.execute, andbackup.schedule.retentioncan resolve through a same-scope completed BackupSet.
All evaluation is read-only and database-backed.
Consumer Map
Actionability-backed current follow-up:
OperationRun::currentTerminalFollowUp()OperationRun::dashboardNeedsFollowUp()OperationRun::requiresOperatorReview()for terminal follow-up rowsNeedsAttentionOperationscurrent terminal follow-up tab and blocked statsGovernanceInboxSectionBuilderoperation follow-up sectionWorkspaceOverviewBuilderoperation follow-up countsOperationUxPresenterdecision truth, labels, notes, and actionability payloadOperationRunActionEligibility
Active-run only behavior:
ActiveRuns::shellVisibleQueryForTenantId()no longer treats terminal follow-up as active progress.
Remaining historical or compatibility usages:
terminalFollowUp()remains the historical terminal-candidate scope used internally byOperationRunActionabilityResolver.dashboardNeedsFollowUp()remains as the compatibility entry point, now backed by current actionability.problemClass()remains for tab routing, historical labeling, detail display, and active stale classification.requiresDashboardFollowUp()remains a compatibility wrapper aroundrequiresOperatorReview().OperationRunResource, tenantless run detail, dashboard summary labels, and governance inbox entry presentation may still display historical problem class alongside the derived actionability result.
No Graph Boundary
Changed actionability and UI paths do not reference GraphClientInterface or call graph(). Current-state checks rely on local ProviderConnection, OperationRun, and artifact records.