TenantAtlas/specs/156-operator-outcome-taxonomy/contracts/operator-state-presentation.logical.openapi.yaml
2026-03-22 11:24:10 +01:00

187 lines
5.4 KiB
YAML

openapi: 3.1.0
info:
title: Operator State Presentation Logical Contract
version: 0.1.0
summary: Logical contract for resolving raw domain state into operator-facing state under the shared taxonomy.
description: |
This contract is logical rather than transport-prescriptive. It describes the
expected behavior of existing badge mappers, presenters, notifications, and
Filament surfaces that consume the shared operator outcome taxonomy.
Runtime badge implementations currently expose the resolved severity band
through Filament badge colors with the same enum values.
servers:
- url: https://tenantpilot.local
paths:
/contracts/operator-state/resolve:
post:
summary: Resolve one raw domain state into operator-facing presentation
operationId: resolveOperatorState
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StateResolutionRequest'
responses:
'200':
description: Taxonomy-backed state presentation resolved
content:
application/json:
schema:
$ref: '#/components/schemas/StateResolutionResponse'
examples:
blockedOperation:
value:
axis: execution_outcome
primaryLabel: Blocked by prerequisite
severity: warning
classificationLevel: primary
nextActionPolicy: required
explanationRequired: true
diagnosticLabel: null
legacyAliases:
- Blocked
notes: Execution could not start or continue until a prerequisite is fixed.
/contracts/operator-state/validate-adoption:
post:
summary: Validate that an adopted surface only uses allowed taxonomy mappings
operationId: validateAdoptionTarget
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AdoptionValidationRequest'
responses:
'200':
description: Adoption validation result
content:
application/json:
schema:
$ref: '#/components/schemas/AdoptionValidationResponse'
components:
schemas:
StateResolutionRequest:
type: object
additionalProperties: false
required:
- domain
- rawValue
- surfaceType
properties:
domain:
type: string
example: operation_run_outcome
rawValue:
type: string
example: blocked
surfaceType:
type: string
enum:
- badge
- summary_line
- notification
- infolist
- widget
tenantScoped:
type: boolean
default: true
includeDiagnostics:
type: boolean
default: false
StateResolutionResponse:
type: object
additionalProperties: false
required:
- axis
- primaryLabel
- severity
- classificationLevel
- nextActionPolicy
- explanationRequired
- notes
properties:
axis:
type: string
example: execution_outcome
primaryLabel:
type: string
example: Blocked by prerequisite
severity:
type: string
description: Operator-facing severity band. In runtime badge mappings this is the Filament badge color.
enum:
- gray
- info
- success
- warning
- danger
- primary
classificationLevel:
type: string
enum:
- primary
- diagnostic
nextActionPolicy:
type: string
enum:
- required
- optional
- none
explanationRequired:
type: boolean
diagnosticLabel:
type:
- string
- 'null'
example: Fallback renderer
legacyAliases:
type: array
items:
type: string
notes:
type: string
example: Execution could not start or continue until a prerequisite is fixed.
AdoptionValidationRequest:
type: object
additionalProperties: false
required:
- target
- entries
properties:
target:
type: string
example: operations
entries:
type: array
items:
$ref: '#/components/schemas/StateResolutionResponse'
AdoptionValidationResponse:
type: object
additionalProperties: false
required:
- valid
- violations
properties:
valid:
type: boolean
violations:
type: array
items:
type: object
additionalProperties: false
required:
- code
- message
properties:
code:
type: string
enum:
- diagnostic_severity_violation
- missing_next_action_policy
- unqualified_overloaded_term
- unauthorized_scope_leak_risk
message:
type: string
example: Diagnostic taxonomy entries cannot use warning or danger severity.