TenantAtlas/specs/158-artifact-truth-semantics/contracts/artifact-truth.openapi.yaml
2026-03-23 01:06:25 +01:00

409 lines
11 KiB
YAML

openapi: 3.1.0
info:
title: Governance Artifact Truth Internal Contract
version: 0.1.0
summary: Internal planning contract for Spec 158 operator-surface read models.
description: |
This contract documents the normalized truth-envelope expected by the first
implementation slice for baseline snapshots, evidence snapshots, tenant
reviews, review packs, and artifact-targeted operation runs. These paths map
to existing Filament surfaces and internal action handlers; they are not a
commitment to a public JSON API.
servers:
- url: /admin
paths:
/baseline-snapshots:
get:
summary: List workspace baseline snapshots with normalized truth summaries
operationId: listBaselineSnapshotsWithTruth
responses:
'200':
description: Baseline snapshot list rows
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactCollectionResponse'
/baseline-snapshots/{snapshotId}:
get:
summary: Read one workspace baseline snapshot with truth envelope and diagnostics
operationId: viewBaselineSnapshotWithTruth
parameters:
- $ref: '#/components/parameters/SnapshotId'
responses:
'200':
description: Baseline snapshot detail
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactDetailResponse'
/evidence/overview:
get:
summary: List canonical workspace evidence rows limited to entitled tenants
operationId: listEvidenceOverviewWithTruth
parameters:
- in: query
name: tenant_id
schema:
type: integer
required: false
responses:
'200':
description: Canonical evidence overview rows
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactCollectionResponse'
/t/{tenantId}/evidence:
get:
summary: List tenant evidence snapshots with truth summaries
operationId: listEvidenceSnapshotsWithTruth
parameters:
- $ref: '#/components/parameters/TenantId'
responses:
'200':
description: Evidence snapshot list rows
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactCollectionResponse'
/t/{tenantId}/evidence/{snapshotId}:
get:
summary: Read one evidence snapshot with truth envelope, per-dimension state, and diagnostics
operationId: viewEvidenceSnapshotWithTruth
parameters:
- $ref: '#/components/parameters/TenantId'
- $ref: '#/components/parameters/SnapshotId'
responses:
'200':
description: Evidence snapshot detail
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactDetailResponse'
/reviews:
get:
summary: List canonical review register rows limited to entitled tenants
operationId: listReviewRegisterWithTruth
parameters:
- in: query
name: tenant_id
schema:
type: integer
required: false
responses:
'200':
description: Canonical review register rows
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactCollectionResponse'
/t/{tenantId}/reviews:
get:
summary: List tenant reviews with lifecycle, completeness, and publication truth
operationId: listTenantReviewsWithTruth
parameters:
- $ref: '#/components/parameters/TenantId'
responses:
'200':
description: Tenant review list rows
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactCollectionResponse'
/t/{tenantId}/reviews/{reviewId}:
get:
summary: Read one tenant review with truth envelope and blocker explanations
operationId: viewTenantReviewWithTruth
parameters:
- $ref: '#/components/parameters/TenantId'
- $ref: '#/components/parameters/ReviewId'
responses:
'200':
description: Tenant review detail
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactDetailResponse'
/t/{tenantId}/review-packs:
get:
summary: List review packs with lifecycle and provenance truth
operationId: listReviewPacksWithTruth
parameters:
- $ref: '#/components/parameters/TenantId'
responses:
'200':
description: Review-pack list rows
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactCollectionResponse'
/t/{tenantId}/review-packs/{packId}:
get:
summary: Read one review pack with truth envelope, provenance, and diagnostics
operationId: viewReviewPackWithTruth
parameters:
- $ref: '#/components/parameters/TenantId'
- $ref: '#/components/parameters/PackId'
responses:
'200':
description: Review-pack detail
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactDetailResponse'
/operations/{runId}:
get:
summary: Read canonical artifact-targeted run detail with normalized artifact result
operationId: viewArtifactRunWithTruth
parameters:
- $ref: '#/components/parameters/RunId'
responses:
'200':
description: Operation-run detail
content:
application/json:
schema:
$ref: '#/components/schemas/ArtifactRunDetailResponse'
components:
parameters:
TenantId:
in: path
name: tenantId
required: true
schema:
type: integer
SnapshotId:
in: path
name: snapshotId
required: true
schema:
type: integer
ReviewId:
in: path
name: reviewId
required: true
schema:
type: integer
PackId:
in: path
name: packId
required: true
schema:
type: integer
RunId:
in: path
name: runId
required: true
schema:
type: integer
schemas:
ArtifactCollectionResponse:
type: object
required:
- rows
properties:
rows:
type: array
items:
$ref: '#/components/schemas/ArtifactSummaryRow'
ArtifactDetailResponse:
type: object
required:
- artifact
- truth
properties:
artifact:
type: object
additionalProperties: true
truth:
$ref: '#/components/schemas/ArtifactTruthEnvelope'
diagnostics:
type: object
additionalProperties: true
ArtifactRunDetailResponse:
allOf:
- $ref: '#/components/schemas/ArtifactDetailResponse'
- type: object
properties:
run:
type: object
additionalProperties: true
ArtifactSummaryRow:
type: object
required:
- artifactKey
- artifactFamily
- truth
properties:
artifactKey:
type: string
artifactFamily:
type: string
enum:
- baseline_snapshot
- evidence_snapshot
- tenant_review
- review_pack
- artifact_run
displayTitle:
type: string
tenantName:
type:
- string
- 'null'
truth:
$ref: '#/components/schemas/ArtifactTruthEnvelope'
ArtifactTruthEnvelope:
type: object
required:
- artifactFamily
- artifactExistence
- contentState
- freshnessState
- supportState
- actionability
- primaryLabel
properties:
artifactFamily:
type: string
executionOutcome:
type:
- string
- 'null'
enum:
- pending
- succeeded
- partially_succeeded
- blocked
- failed
- null
artifactExistence:
type: string
enum:
- not_created
- historical_only
- created
- created_but_not_usable
contentState:
type: string
enum:
- trusted
- partial
- missing_input
- metadata_only
- reference_only
- empty
- unsupported
freshnessState:
type: string
enum:
- current
- stale
- unknown
publicationReadiness:
type:
- string
- 'null'
enum:
- not_applicable
- internal_only
- publishable
- blocked
- null
supportState:
type: string
enum:
- normal
- limited_support
actionability:
type: string
enum:
- none
- optional
- required
primaryLabel:
type: string
primaryExplanation:
type:
- string
- 'null'
reason:
$ref: '#/components/schemas/ArtifactTruthCause'
nextAction:
$ref: '#/components/schemas/ArtifactTruthNextAction'
dimensions:
type: array
items:
$ref: '#/components/schemas/ArtifactTruthDimension'
ArtifactTruthDimension:
type: object
required:
- axis
- state
- label
- classification
properties:
axis:
type: string
enum:
- execution_outcome
- artifact_existence
- content_fidelity
- data_freshness
- publication_readiness
- support_maturity
- operator_actionability
state:
type: string
label:
type: string
classification:
type: string
enum:
- primary
- secondary
- diagnostic
badgeDomain:
type:
- string
- 'null'
badgeState:
type:
- string
- 'null'
ArtifactTruthCause:
type: object
properties:
reasonCode:
type:
- string
- 'null'
operatorLabel:
type:
- string
- 'null'
shortExplanation:
type:
- string
- 'null'
diagnosticCode:
type:
- string
- 'null'
nextSteps:
type: array
items:
type: string
ArtifactTruthNextAction:
type: object
properties:
label:
type:
- string
- 'null'
url:
type:
- string
- 'null'
required:
type: boolean