TenantAtlas/specs/165-baseline-summary-trust/contracts/baseline-summary-surface.openapi.yaml
ahmido 02e75e1cda feat: harden baseline compare summary trust surfaces (#196)
## Summary
- add a shared baseline compare summary assessment and assessor for compact trust propagation
- harden dashboard, landing, and banner baseline compare surfaces against false all-clear claims
- add focused Pest coverage for dashboard, landing, banner, reason translation, and canonical detail parity

## Validation
- vendor/bin/sail bin pint --dirty --format agent
- vendor/bin/sail artisan test --compact tests/Feature/Baselines/BaselineCompareSummaryAssessmentTest.php tests/Feature/Baselines/BaselineCompareExplanationFallbackTest.php tests/Feature/Filament/BaselineCompareNowWidgetTest.php tests/Feature/Filament/NeedsAttentionWidgetTest.php tests/Feature/Filament/BaselineCompareExplanationSurfaceTest.php tests/Feature/Filament/BaselineCompareLandingWhyNoFindingsTest.php tests/Feature/Filament/BaselineCompareCoverageBannerTest.php tests/Feature/Filament/BaselineCompareSummaryConsistencyTest.php tests/Feature/Filament/OperationRunBaselineTruthSurfaceTest.php tests/Feature/ReasonTranslation/ReasonTranslationExplanationTest.php

## Notes
- Livewire compliance: Filament v5 / Livewire v4 stack unchanged
- Provider registration: unchanged, Laravel 12 providers remain in bootstrap/providers.php
- Global search: no searchable resource behavior changed
- Destructive actions: none introduced by this change
- Assets: no new assets registered; existing deploy process remains unchanged

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #196
2026-03-27 00:19:53 +00:00

225 lines
6.8 KiB
YAML

openapi: 3.1.0
info:
title: Baseline Summary Surface Contract
version: 1.0.0
description: >-
Internal contract for baseline compare summary semantics across tenant dashboard,
Baseline Compare landing, findings-adjacent warning surfaces, and canonical run-detail alignment.
servers:
- url: /
paths:
/admin:
get:
summary: Tenant dashboard baseline summary contract
description: >-
HTML tenant dashboard surface whose embedded baseline summary semantics must obey the shared summary assessment.
responses:
'200':
description: Dashboard rendered with an embedded baseline summary assessment
content:
application/json:
schema:
$ref: '#/components/schemas/TenantDashboardBaselineSummary'
/admin/baseline-compare:
get:
summary: Baseline Compare landing summary contract
description: >-
Landing surface for the latest baseline compare result. The primary summary must not exceed the trust carried by the underlying explanation.
responses:
'200':
description: Landing page rendered with primary summary assessment and diagnostics links
content:
application/json:
schema:
$ref: '#/components/schemas/BaselineLandingSummary'
/admin/findings:
get:
summary: Findings-adjacent baseline warning contract
description: >-
Findings context that may display a coverage or evidence caution banner derived from the same summary assessment.
responses:
'200':
description: Findings page rendered with optional baseline summary caution
content:
application/json:
schema:
$ref: '#/components/schemas/BaselineBannerSummary'
/admin/operations/{run}:
get:
summary: Canonical baseline compare run-detail reference contract
description: >-
Canonical run detail remains the deepest truth surface. Compact summaries may not be more optimistic than this contract.
parameters:
- name: run
in: path
required: true
schema:
type: integer
responses:
'200':
description: Run detail rendered with baseline compare truth semantics
content:
application/json:
schema:
$ref: '#/components/schemas/BaselineRunDetailReference'
components:
schemas:
SummaryStateFamily:
type: string
enum:
- positive
- caution
- stale
- action_required
- unavailable
- in_progress
TrustworthinessLevel:
type: string
enum:
- trustworthy
- limited_confidence
- diagnostic_only
- unusable
EvaluationResult:
type: string
description: >-
`failed_result` represents a compare execution that completed without a usable decision-grade artifact
and therefore must map to an investigation-oriented `action_required` summary state rather than
`unavailable`.
enum:
- full_result
- no_result
- incomplete_result
- failed_result
- suppressed_result
- unavailable
EvidenceImpact:
type: string
enum:
- none
- coverage_warning
- evidence_gap
- stale_result
- suppressed_output
- unavailable
NextAction:
type: object
required:
- label
- target
properties:
label:
type: string
target:
type: string
enum:
- landing
- findings
- run
- none
BaselineSummaryAssessment:
type: object
description: >-
Shared compact-summary contract. If `evaluationResult` is `failed_result`, `stateFamily` must be
`action_required` and `nextAction.target` must not be `none`.
required:
- stateFamily
- headline
- positiveClaimAllowed
- trustworthinessLevel
- evaluationResult
- evidenceImpact
- nextAction
properties:
stateFamily:
$ref: '#/components/schemas/SummaryStateFamily'
headline:
type: string
supportingMessage:
type: string
nullable: true
tone:
type: string
positiveClaimAllowed:
type: boolean
trustworthinessLevel:
$ref: '#/components/schemas/TrustworthinessLevel'
evaluationResult:
$ref: '#/components/schemas/EvaluationResult'
evidenceImpact:
$ref: '#/components/schemas/EvidenceImpact'
findingsVisibleCount:
type: integer
minimum: 0
highSeverityCount:
type: integer
minimum: 0
reasonCode:
type: string
nullable: true
lastComparedLabel:
type: string
nullable: true
nextAction:
$ref: '#/components/schemas/NextAction'
TenantDashboardBaselineSummary:
type: object
required:
- widget
- needsAttention
properties:
widget:
$ref: '#/components/schemas/BaselineSummaryAssessment'
needsAttention:
$ref: '#/components/schemas/BaselineSummaryAssessment'
kpiCards:
type: array
description: Quantitative indicators only; not claim-bearing semantics.
items:
type: object
required:
- label
- value
properties:
label:
type: string
value:
type: integer
minimum: 0
BaselineLandingSummary:
type: object
required:
- primarySummary
properties:
primarySummary:
$ref: '#/components/schemas/BaselineSummaryAssessment'
diagnosticsAvailable:
type: boolean
runLinkAvailable:
type: boolean
findingsLinkAvailable:
type: boolean
BaselineBannerSummary:
type: object
required:
- shouldShow
properties:
shouldShow:
type: boolean
bannerSummary:
allOf:
- $ref: '#/components/schemas/BaselineSummaryAssessment'
nullable: true
BaselineRunDetailReference:
type: object
required:
- primarySummary
properties:
primarySummary:
$ref: '#/components/schemas/BaselineSummaryAssessment'
semanticCeiling:
type: boolean
description: Always true for the canonical detail; compact surfaces may not exceed this confidence.
x-tenantpilot-notes:
- These routes render HTML in practice; the schema models the internal summary payload that their views must honor.
- No new HTTP endpoints are introduced by this feature.