366 lines
9.6 KiB
YAML
366 lines
9.6 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: Dashboard Recovery Posture Honesty Surface Contracts
|
|
version: 1.0.0
|
|
description: >-
|
|
Internal reference contract for tenant dashboard recovery-posture honesty.
|
|
The application continues to return rendered HTML through Filament and
|
|
Livewire. The vendor media types below document the structured dashboard and
|
|
restore-history models that must be derivable before rendering. This is not
|
|
a public API commitment.
|
|
paths:
|
|
/admin/t/{tenant}:
|
|
get:
|
|
summary: Tenant dashboard recovery-posture summary surface
|
|
description: >-
|
|
Returns the rendered tenant dashboard. The vendor media type documents
|
|
the backup posture, recovery-evidence summary, and recovery-related
|
|
attention or healthy-check state that must be available before rendering.
|
|
parameters:
|
|
- name: tenant
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Rendered tenant dashboard page
|
|
content:
|
|
text/html:
|
|
schema:
|
|
type: string
|
|
application/vnd.tenantpilot.dashboard-recovery-posture+json:
|
|
schema:
|
|
$ref: '#/components/schemas/TenantDashboardRecoverySurface'
|
|
'403':
|
|
description: Viewer is in scope but lacks the capability required for the dashboard surface
|
|
'404':
|
|
description: Tenant scope is not visible because workspace or tenant membership is missing
|
|
/admin/t/{tenant}/restore-runs:
|
|
get:
|
|
summary: Restore history collection surface with recovery continuity context
|
|
description: >-
|
|
Returns the rendered restore-run list. The vendor media type documents
|
|
the continuity subheading and result-attention facts needed to confirm a
|
|
dashboard recovery signal.
|
|
parameters:
|
|
- name: tenant
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
- name: recovery_posture_reason
|
|
in: query
|
|
required: false
|
|
schema:
|
|
$ref: '#/components/schemas/RecoveryPostureReason'
|
|
responses:
|
|
'200':
|
|
description: Rendered restore-run list page
|
|
content:
|
|
text/html:
|
|
schema:
|
|
type: string
|
|
application/vnd.tenantpilot.restore-history-collection+json:
|
|
schema:
|
|
$ref: '#/components/schemas/RestoreHistoryCollectionSurface'
|
|
'403':
|
|
description: Viewer is in scope but lacks restore-history viewing capability
|
|
'404':
|
|
description: Restore history is not visible because workspace or tenant membership is missing
|
|
/admin/t/{tenant}/restore-runs/{restoreRun}:
|
|
get:
|
|
summary: Restore history detail surface
|
|
description: >-
|
|
Returns the rendered restore-run detail page. The vendor media type
|
|
documents the result-attention and claim-boundary facts that confirm a
|
|
specific dashboard recovery signal.
|
|
parameters:
|
|
- name: tenant
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
- name: restoreRun
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Rendered restore-run detail page
|
|
content:
|
|
text/html:
|
|
schema:
|
|
type: string
|
|
application/vnd.tenantpilot.restore-history-detail+json:
|
|
schema:
|
|
$ref: '#/components/schemas/RestoreHistoryDetailSurface'
|
|
'403':
|
|
description: Viewer is in scope but lacks capability for the restore-run detail surface
|
|
'404':
|
|
description: Restore run is not visible because workspace or tenant membership is missing
|
|
components:
|
|
schemas:
|
|
TenantDashboardRecoverySurface:
|
|
type: object
|
|
required:
|
|
- backupPosture
|
|
- recoveryEvidence
|
|
properties:
|
|
backupPosture:
|
|
$ref: '#/components/schemas/BackupPostureStat'
|
|
recoveryEvidence:
|
|
$ref: '#/components/schemas/RecoveryEvidenceSummary'
|
|
needsAttentionItems:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/RecoveryAttentionItem'
|
|
healthyChecks:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/HealthyCheck'
|
|
BackupPostureStat:
|
|
type: object
|
|
required:
|
|
- label
|
|
- posture
|
|
- summary
|
|
- claimBoundary
|
|
properties:
|
|
label:
|
|
type: string
|
|
posture:
|
|
type: string
|
|
enum:
|
|
- absent
|
|
- stale
|
|
- degraded
|
|
- healthy
|
|
summary:
|
|
type: string
|
|
claimBoundary:
|
|
type: string
|
|
action:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/ActionLink'
|
|
- type: 'null'
|
|
RecoveryEvidenceSummary:
|
|
type: object
|
|
required:
|
|
- state
|
|
- headline
|
|
- summary
|
|
- claimBoundary
|
|
properties:
|
|
state:
|
|
type: string
|
|
description: Canonical recovery-evidence state key for the dashboard surface.
|
|
enum:
|
|
- unvalidated
|
|
- weakened
|
|
- no_recent_issues_visible
|
|
headline:
|
|
type: string
|
|
summary:
|
|
type: string
|
|
claimBoundary:
|
|
type: string
|
|
latestRelevantRestoreRunId:
|
|
type:
|
|
- integer
|
|
- 'null'
|
|
latestRelevantAttentionState:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
enum:
|
|
- failed
|
|
- partial
|
|
- completed_with_follow_up
|
|
- completed
|
|
- null
|
|
action:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/ActionLink'
|
|
- type: 'null'
|
|
RecoveryAttentionItem:
|
|
type: object
|
|
required:
|
|
- title
|
|
- body
|
|
- badge
|
|
- badgeColor
|
|
properties:
|
|
title:
|
|
type: string
|
|
body:
|
|
type: string
|
|
supportingMessage:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
badge:
|
|
type: string
|
|
badgeColor:
|
|
type: string
|
|
action:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/ActionLink'
|
|
- type: 'null'
|
|
HealthyCheck:
|
|
type: object
|
|
required:
|
|
- title
|
|
- body
|
|
properties:
|
|
title:
|
|
type: string
|
|
body:
|
|
type: string
|
|
RestoreHistoryCollectionSurface:
|
|
type: object
|
|
required:
|
|
- rows
|
|
properties:
|
|
subheading:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
rows:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/RestoreHistoryRow'
|
|
emptyState:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/EmptyState'
|
|
- type: 'null'
|
|
RestoreHistoryRow:
|
|
type: object
|
|
required:
|
|
- id
|
|
- status
|
|
- resultAttention
|
|
properties:
|
|
id:
|
|
type: integer
|
|
backupSetName:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
status:
|
|
type: string
|
|
completedAt:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
format: date-time
|
|
requestedBy:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
resultAttention:
|
|
$ref: '#/components/schemas/ResultAttentionFact'
|
|
action:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/ActionLink'
|
|
- type: 'null'
|
|
RestoreHistoryDetailSurface:
|
|
type: object
|
|
required:
|
|
- header
|
|
- resultAttention
|
|
properties:
|
|
header:
|
|
$ref: '#/components/schemas/RestoreHistoryHeader'
|
|
resultAttention:
|
|
$ref: '#/components/schemas/ResultAttentionFact'
|
|
relatedLinks:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ActionLink'
|
|
RestoreHistoryHeader:
|
|
type: object
|
|
required:
|
|
- id
|
|
- status
|
|
properties:
|
|
id:
|
|
type: integer
|
|
status:
|
|
type: string
|
|
completedAt:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
format: date-time
|
|
backupSetName:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
ResultAttentionFact:
|
|
type: object
|
|
required:
|
|
- state
|
|
- summary
|
|
- followUpRequired
|
|
- claimBoundary
|
|
properties:
|
|
state:
|
|
type: string
|
|
enum:
|
|
- not_executed
|
|
- failed
|
|
- partial
|
|
- completed_with_follow_up
|
|
- completed
|
|
summary:
|
|
type: string
|
|
followUpRequired:
|
|
type: boolean
|
|
claimBoundary:
|
|
type: string
|
|
primaryNextAction:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
EmptyState:
|
|
type: object
|
|
required:
|
|
- title
|
|
- body
|
|
properties:
|
|
title:
|
|
type: string
|
|
body:
|
|
type: string
|
|
action:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/ActionLink'
|
|
- type: 'null'
|
|
ActionLink:
|
|
type: object
|
|
required:
|
|
- label
|
|
- disabled
|
|
properties:
|
|
label:
|
|
type: string
|
|
url:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
disabled:
|
|
type: boolean
|
|
helperText:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
RecoveryPostureReason:
|
|
type: string
|
|
enum:
|
|
- no_history
|
|
- failed
|
|
- partial
|
|
- completed_with_follow_up
|
|
- no_recent_issues_visible |