Some checks failed
Main Confidence / confidence (push) Failing after 46s
## Summary - implement Spec 211 runtime trend reporting with bounded lane history, drift classification, hotspot trend output, and recalibration evidence handling - extend the repo-truth governance seams and workflow wrappers for comparable-bundle hydration, trend artifact publication, and contract-backed reporting - add the Spec 211 planning artifacts, data model, quickstart, tasks, and repository contract documents ## Validation - parsed `specs/211-runtime-trend-recalibration/contracts/test-runtime-trend-history.schema.json` - parsed `specs/211-runtime-trend-recalibration/contracts/test-runtime-trend.logical.openapi.yaml` - re-ran cross-artifact consistency analysis for the Spec 211 artifact set until no material findings remained - no application test suite was re-run as part of this final commit/push/PR step Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #244
641 lines
16 KiB
YAML
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 |