TenantAtlas/specs/164-run-detail-hardening/contracts/operation-run-detail-page.openapi.yaml
2026-03-26 14:07:10 +01:00

304 lines
7.1 KiB
YAML

openapi: 3.1.0
info:
title: Operation Run Detail Page Contract
version: 1.0.0
description: >-
Internal reference contract for the canonical operation-run detail page. The route
still returns rendered HTML; the structured schema below documents the decision-first
page payload that must be derivable before rendering. This is not a public API commitment.
paths:
/admin/operations/{run}:
get:
summary: Canonical operation-run detail page
description: >-
Returns the rendered canonical run-detail page. The vendor media type documents
the internal structured page model used to drive the enterprise-detail surface.
parameters:
- name: run
in: path
required: true
schema:
type: integer
responses:
'200':
description: Rendered canonical run detail page
content:
text/html:
schema:
type: string
application/vnd.tenantpilot.operation-run-detail+json:
schema:
$ref: '#/components/schemas/OperationRunDetailPage'
'403':
description: Viewer is in scope but lacks the required capability
'404':
description: Run is not visible because it does not exist or tenant/workspace entitlement is missing
components:
schemas:
OperationRunDetailPage:
type: object
required:
- header
- decisionZone
- supportingGroups
- mainSections
- technicalSections
properties:
header:
$ref: '#/components/schemas/PageHeader'
decisionZone:
$ref: '#/components/schemas/DecisionZone'
supportingGroups:
type: array
items:
$ref: '#/components/schemas/SupportingGroup'
mainSections:
type: array
items:
$ref: '#/components/schemas/DetailSection'
technicalSections:
type: array
items:
$ref: '#/components/schemas/DetailSection'
attentionBanners:
type: array
items:
$ref: '#/components/schemas/AttentionBanner'
PageHeader:
type: object
required:
- title
- statusBadges
- keyFacts
properties:
title:
type: string
subtitle:
type:
- string
- 'null'
statusBadges:
type: array
items:
$ref: '#/components/schemas/Badge'
keyFacts:
type: array
items:
$ref: '#/components/schemas/Fact'
primaryActions:
type: array
items:
$ref: '#/components/schemas/PageAction'
descriptionHint:
type:
- string
- 'null'
DecisionZone:
type: object
required:
- executionState
- outcome
- primaryNextStep
properties:
executionState:
$ref: '#/components/schemas/Fact'
outcome:
$ref: '#/components/schemas/Fact'
artifactTruth:
oneOf:
- $ref: '#/components/schemas/Fact'
- type: 'null'
resultMeaning:
oneOf:
- $ref: '#/components/schemas/Fact'
- type: 'null'
resultTrust:
oneOf:
- $ref: '#/components/schemas/Fact'
- type: 'null'
primaryNextStep:
$ref: '#/components/schemas/PrimaryNextStep'
compactCounts:
oneOf:
- $ref: '#/components/schemas/CountPresentation'
- type: 'null'
attentionNote:
type:
- string
- 'null'
PrimaryNextStep:
type: object
required:
- text
- source
properties:
text:
type: string
source:
type: string
enum:
- operator_explanation
- artifact_truth
- blocked_reason
- lifecycle_attention
- ops_ux
- none_required
secondaryGuidance:
type: array
items:
type: string
CountPresentation:
type: object
properties:
summaryLine:
type:
- string
- 'null'
primaryFacts:
type: array
items:
$ref: '#/components/schemas/Fact'
diagnosticFacts:
type: array
items:
$ref: '#/components/schemas/Fact'
SupportingGroup:
type: object
required:
- kind
- title
properties:
kind:
type: string
enum:
- guidance
- lifecycle
- timing
- metadata
title:
type: string
description:
type:
- string
- 'null'
items:
type: array
items:
$ref: '#/components/schemas/Fact'
DetailSection:
type: object
required:
- id
- title
properties:
id:
type: string
kind:
type:
- string
- 'null'
title:
type: string
description:
type:
- string
- 'null'
collapsible:
type: boolean
collapsed:
type: boolean
items:
type: array
items:
$ref: '#/components/schemas/Fact'
AttentionBanner:
type: object
required:
- tone
- title
- body
properties:
tone:
type: string
enum:
- info
- amber
- rose
- slate
title:
type: string
body:
type: string
Fact:
type: object
required:
- label
- value
properties:
label:
type: string
value:
type: string
hint:
type:
- string
- 'null'
badge:
oneOf:
- $ref: '#/components/schemas/Badge'
- type: 'null'
Badge:
type: object
required:
- label
properties:
label:
type: string
color:
type:
- string
- 'null'
icon:
type:
- string
- 'null'
iconColor:
type:
- string
- 'null'
PageAction:
type: object
required:
- label
- destructive
- requiresConfirmation
- visible
- openInNewTab
properties:
label:
type: string
placement:
type:
- string
- 'null'
url:
type:
- string
- 'null'
actionName:
type:
- string
- 'null'
destructive:
type: boolean
requiresConfirmation:
type: boolean
visible:
type: boolean
icon:
type:
- string
- 'null'
openInNewTab:
type: boolean