Implemented the first version of the operator resolution guidance framework. Added new foundation classes (ResolutionCase, ResolutionAction) and a ReviewPackOutputResolutionAdapter. Updated the Customer Review Workspace and Environment Review Resource to use the new adapter. Added extensive test coverage for the framework and UI integrations. Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #421
2.9 KiB
Resolution Action Contract
Status: Draft for Spec 350
Scope: Dominant next-step contract only
Purpose
ResolutionAction is the action envelope inside a ResolutionCase.
It standardizes what the operator should do next and whether that next step remains navigation/disclosure only or can safely reuse an existing source-owned executable path.
Repo note: this contract is intentionally named ResolutionAction to avoid colliding with the existing dashboard-local RecommendedAction schema in specs/266-tenant-dashboard-productization-v1/contracts/tenant-dashboard-productization.openapi.yaml.
Hard Rules
- Each
ResolutionCasehas exactly oneprimary_action. - The default v1 bias is
navigation,download,disclosure, ornone. - Unsupported or unsafe executable actions must degrade to a non-executable action type.
- No fake fix buttons.
Required Shape
[
'key' => 'provider_readiness.open_required_permissions',
'label' => 'Open required permissions',
'type' => 'navigation',
'url' => '...',
'capability' => null,
'requires_confirmation' => false,
'audit_event' => null,
'operation_run_type' => null,
'disabled_reason' => null,
]
Allowed Action Types
navigationworkspace_filtered_linkenvironment_linkdownloaddisclosurenonedomain_actiononly when the source surface already owns the full safety envelopeoperation_actiononly when the source surface already owns the full safety envelope
Required Safety Fields For Executable Actions
If type is domain_action or operation_action, the action must include:
capabilityrequires_confirmationaudit_eventor equivalent audit reasonoperation_run_typewhen the action is execution-backed
If any of those are unavailable, the action must become navigation, download, disclosure, or none.
Existing Runtime Inputs To Reuse
| Existing producer | Contract expectation |
|---|---|
| scoped URL helpers | populate url for navigation/disclosure actions |
| current policy/capability checks | populate capability and disabled_reason where applicable |
| existing Filament action semantics | preserve confirmation and audit behavior only when the action is already source-owned and executable |
OperationRunLinks |
provide proof/detail destinations for operation follow-up |
| current qualified download labels | remain downloads, not disguised execution actions |
Secondary Actions
Secondary actions are optional supporting actions. They must never compete visually or semantically with the primary action.
Allowed secondary examples:
Open evidence basisOpen operation proofReview limitationsOpen provider readiness
Forbidden secondary examples:
- duplicate copies of the primary action
- fake auto-remediation
- destructive actions without the same safety metadata requirements