TenantAtlas/specs/211-runtime-trend-recalibration/contracts/test-runtime-trend.logical.openapi.yaml
Ahmed Darrazi 97262787c9
Some checks failed
PR Fast Feedback / fast-feedback (pull_request) Failing after 4m15s
feat: implement runtime trend recalibration reporting
2026-04-18 09:34:23 +02:00

641 lines
16 KiB
YAML

openapi: 3.1.0
info:
title: Test Runtime Trend Reporting & Baseline Recalibration
version: 1.0.0
description: |
Logical contract for the repository-owned workflow that updates bounded lane
history, evaluates drift status, emits hotspot deltas, and records explicit
recalibration evidence. This file documents wrapper/support-class semantics,
not a public HTTP API.
servers:
- url: https://tenantatlas.local/logical
paths:
/test-governance/lanes/{laneId}/trend-history:
post:
summary: Update one lane's bounded trend history artifact
operationId: updateLaneTrendHistory
parameters:
- $ref: '#/components/parameters/LaneId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TrendHistoryUpdateRequest'
responses:
'200':
description: Updated bounded history artifact for the lane
content:
application/json:
schema:
$ref: '#/components/schemas/LaneTrendHistoryArtifact'
/test-governance/lanes/{laneId}/trend-assessment:
post:
summary: Evaluate drift status and hotspot deltas for one lane
operationId: evaluateLaneTrendAssessment
parameters:
- $ref: '#/components/parameters/LaneId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LaneTrendAssessmentRequest'
responses:
'200':
description: Current lane assessment including health class and hotspot snapshot
content:
application/json:
schema:
$ref: '#/components/schemas/LaneTrendAssessmentResponse'
/test-governance/lanes/{laneId}/recalibration:
post:
summary: Evaluate or record an explicit recalibration decision for one lane
operationId: evaluateLaneRecalibration
parameters:
- $ref: '#/components/parameters/LaneId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RecalibrationEvaluationRequest'
responses:
'200':
description: Structured recalibration decision or candidate record
content:
application/json:
schema:
$ref: '#/components/schemas/RecalibrationDecision'
/test-governance/cycles/{cycleId}/summary:
get:
summary: Read the trend-aware summary for one reporting cycle
operationId: getTrendSummaryCycle
parameters:
- name: cycleId
in: path
required: true
schema:
type: string
responses:
'200':
description: Trend-aware cycle summary spanning the relevant lanes
content:
application/json:
schema:
$ref: '#/components/schemas/TrendSummaryCycle'
components:
parameters:
LaneId:
name: laneId
in: path
required: true
schema:
type: string
enum:
- fast-feedback
- confidence
- heavy-governance
- browser
- junit
- profiling
schemas:
TrendHistoryUpdateRequest:
type: object
additionalProperties: false
required:
- currentRecord
properties:
currentRecord:
$ref: '#/components/schemas/TrendRecord'
priorHistory:
type: array
items:
$ref: '#/components/schemas/TrendRecord'
description: |
Previously retained history records, typically hydrated from the
most recent comparable uploaded artifact bundle.
policyOverride:
$ref: '#/components/schemas/TrendPolicy'
LaneTrendAssessmentRequest:
type: object
additionalProperties: false
required:
- policy
- history
properties:
policy:
$ref: '#/components/schemas/TrendPolicy'
history:
type: array
items:
$ref: '#/components/schemas/TrendRecord'
includeHotspots:
type: boolean
default: true
LaneTrendAssessmentResponse:
type: object
additionalProperties: false
required:
- assessment
properties:
assessment:
$ref: '#/components/schemas/DriftAssessment'
hotspotSnapshot:
$ref: '#/components/schemas/HotspotSnapshot'
warnings:
type: array
items:
type: string
RecalibrationEvaluationRequest:
type: object
additionalProperties: false
required:
- targetType
- assessment
- evidenceRunRefs
properties:
targetType:
type: string
enum:
- baseline
- budget
assessment:
$ref: '#/components/schemas/DriftAssessment'
evidenceRunRefs:
type: array
minItems: 1
items:
type: string
proposedValueSeconds:
type:
- number
- 'null'
rationaleCode:
type:
- string
- 'null'
enum:
- lane-scope-change
- infrastructure-shift
- post-improvement-reset
- sustained-erosion
- noise-rejected
- manual-hold
- null
recordLocation:
type:
- string
- 'null'
description: Active spec path or implementation PR reference for the human-reviewed decision record.
LaneTrendHistoryArtifact:
type: object
additionalProperties: false
required:
- schemaVersion
- laneId
- workflowProfile
- generatedAt
- policy
- history
- currentAssessment
properties:
schemaVersion:
type: string
laneId:
type: string
workflowProfile:
type: string
generatedAt:
type: string
format: date-time
policy:
$ref: '#/components/schemas/TrendPolicy'
history:
type: array
items:
$ref: '#/components/schemas/TrendRecord'
currentAssessment:
$ref: '#/components/schemas/DriftAssessment'
hotspotSnapshot:
$ref: '#/components/schemas/HotspotSnapshot'
recalibrationDecisions:
type: array
items:
$ref: '#/components/schemas/RecalibrationDecision'
warnings:
type: array
items:
type: string
TrendPolicy:
type: object
additionalProperties: false
required:
- retentionLimit
- comparisonWindowSize
- minimumComparableSamples
- varianceFloorSeconds
- nearBudgetHeadroomSeconds
- hotspotFamilyLimit
- hotspotFileLimit
- slowestEntryRetention
properties:
retentionLimit:
type: integer
minimum: 1
comparisonWindowSize:
type: integer
minimum: 1
minimumComparableSamples:
type: integer
minimum: 3
varianceFloorSeconds:
type: integer
minimum: 0
nearBudgetHeadroomSeconds:
type: integer
minimum: 0
hotspotFamilyLimit:
type: integer
minimum: 1
hotspotFileLimit:
type: integer
minimum: 1
slowestEntryRetention:
type: integer
minimum: 1
recalibrationPolicy:
type: object
additionalProperties: false
properties:
baselineRequiresExplicitReview:
type: boolean
budgetRequiresExplicitReview:
type: boolean
minimumBudgetEvidenceSamples:
type: integer
minimum: 1
TrendRecord:
type: object
additionalProperties: false
required:
- runRef
- laneId
- workflowId
- triggerClass
- generatedAt
- wallClockSeconds
- budgetSeconds
- budgetStatus
- blockingStatus
- comparisonFingerprint
properties:
runRef:
type: string
laneId:
type: string
workflowId:
type: string
triggerClass:
type: string
enum:
- pull-request
- mainline-push
- manual
- scheduled
- local
generatedAt:
type: string
format: date-time
wallClockSeconds:
type: number
minimum: 0
baselineSeconds:
type:
- number
- 'null'
baselineSource:
type:
- string
- 'null'
budgetSeconds:
type: number
minimum: 0
budgetStatus:
type: string
blockingStatus:
type: string
comparisonFingerprint:
type: string
classificationTotals:
type: array
items:
$ref: '#/components/schemas/RuntimeBucket'
familyTotals:
type: array
items:
$ref: '#/components/schemas/RuntimeBucket'
hotspotFiles:
type: array
items:
$ref: '#/components/schemas/RuntimeBucket'
slowestEntries:
type: array
items:
$ref: '#/components/schemas/SlowestEntry'
artifactRefs:
type: object
additionalProperties: false
properties:
summary:
type: string
report:
type: string
budget:
type: string
junit:
type: string
trendHistory:
type: string
DriftAssessment:
type: object
additionalProperties: false
required:
- healthClass
- recalibrationRecommendation
- budgetHeadroomSeconds
- summaryLine
- windowStatus
- sampleCount
properties:
healthClass:
type: string
enum:
- healthy
- budget-near
- trending-worse
- regressed
- unstable
recalibrationRecommendation:
type: string
enum:
- none
- investigate
- review-baseline
- review-budget
budgetHeadroomSeconds:
type: number
deltaToPreviousSeconds:
type:
- number
- 'null'
deltaToPreviousPercent:
type:
- number
- 'null'
deltaToBaselineSeconds:
type:
- number
- 'null'
deltaToBaselinePercent:
type:
- number
- 'null'
worseningStreak:
type: integer
minimum: 0
varianceObservedSeconds:
type: number
minimum: 0
windowStatus:
type: string
enum:
- stable
- insufficient-history
- scope-changed
- noisy
sampleCount:
type: integer
minimum: 0
previousComparableRunRef:
type:
- string
- 'null'
summaryLine:
type: string
HotspotSnapshot:
type: object
additionalProperties: false
required:
- evidenceAvailability
- familyDeltas
- fileHotspots
properties:
evidenceAvailability:
type: string
enum:
- available
- unavailable
familyDeltas:
type: array
items:
$ref: '#/components/schemas/DeltaBucket'
fileHotspots:
type: array
items:
$ref: '#/components/schemas/DeltaBucket'
newEntrants:
type: array
items:
type: string
droppedEntrants:
type: array
items:
type: string
DeltaBucket:
type: object
additionalProperties: false
required:
- name
- currentSeconds
- previousSeconds
- deltaSeconds
properties:
name:
type: string
currentSeconds:
type: number
minimum: 0
previousSeconds:
type: number
minimum: 0
deltaSeconds:
type: number
deltaPercent:
type:
- number
- 'null'
direction:
type:
- string
- 'null'
enum:
- up
- down
- flat
- null
RuntimeBucket:
type: object
additionalProperties: false
required:
- name
- runtimeSeconds
properties:
name:
type: string
runtimeSeconds:
type: number
minimum: 0
SlowestEntry:
type: object
additionalProperties: false
required:
- label
- runtimeSeconds
properties:
label:
type: string
runtimeSeconds:
type: number
minimum: 0
file:
type:
- string
- 'null'
RecalibrationDecision:
type: object
additionalProperties: false
required:
- targetType
- decisionStatus
- evidenceRunRefs
- previousValueSeconds
- rationaleCode
- recordedIn
- notes
properties:
targetType:
type: string
enum:
- baseline
- budget
decisionStatus:
type: string
enum:
- candidate
- approved
- rejected
evidenceRunRefs:
type: array
minItems: 1
items:
type: string
previousValueSeconds:
type: number
minimum: 0
proposedValueSeconds:
type:
- number
- 'null'
rationaleCode:
type: string
enum:
- lane-scope-change
- infrastructure-shift
- post-improvement-reset
- sustained-erosion
- noise-rejected
- manual-hold
recordedIn:
type: string
description: Active spec path or implementation PR reference for the approved or rejected decision.
notes:
type: string
TrendSummaryCycle:
type: object
additionalProperties: false
required:
- cycleId
- generatedAt
- laneSummaries
- laneAssessments
properties:
cycleId:
type: string
generatedAt:
type: string
format: date-time
laneSummaries:
type: array
items:
$ref: '#/components/schemas/CycleLaneSummary'
laneAssessments:
type: array
items:
$ref: '#/components/schemas/DriftAssessment'
hotspotSnapshots:
type: array
items:
$ref: '#/components/schemas/HotspotSnapshot'
recalibrationDecisions:
type: array
items:
$ref: '#/components/schemas/RecalibrationDecision'
artifactPublicationStatus:
type: array
items:
type: string
warnings:
type: array
items:
type: string
CycleLaneSummary:
type: object
additionalProperties: false
required:
- laneId
- currentRuntimeSeconds
- budgetSeconds
- assessment
properties:
laneId:
type: string
enum:
- fast-feedback
- confidence
- heavy-governance
- browser
- junit
- profiling
currentRuntimeSeconds:
type: number
minimum: 0
previousComparableSeconds:
type:
- number
- 'null'
baselineSeconds:
type:
- number
- 'null'
budgetSeconds:
type: number
minimum: 0
assessment:
$ref: '#/components/schemas/DriftAssessment'
hotspotSnapshot:
$ref: '#/components/schemas/HotspotSnapshot'
warnings:
type: array
items:
type: string