TenantAtlas/specs/207-shared-test-fixture-slimming/contracts/shared-test-fixture-slimming.logical.openapi.yaml
2026-04-16 19:27:47 +02:00

327 lines
8.6 KiB
YAML

openapi: 3.1.0
info:
title: Shared Test Fixture Slimming Logical Contract
version: 1.0.0
summary: Logical contract for resolving fixture profiles, reading cascade audits, and comparing lane impact.
description: |
This is a logical contract for repository tooling, tests, and planning artifacts.
It does not imply a new runtime HTTP service. It documents the expected semantics
of fixture-profile resolution and lane-impact comparison so helper behavior,
guard tests, and reporting remain consistent during the migration.
x-logical-contract: true
servers:
- url: https://tenantatlas.local/logical
paths:
/shared-fixtures/helpers/{helperName}/contexts:
post:
summary: Resolve the promised side effects of a helper for a selected fixture profile.
operationId: resolveSharedFixtureContext
parameters:
- name: helperName
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/HelperResolutionRequest'
responses:
'200':
description: Logical resolution of the helper profile and its side effects.
content:
application/json:
schema:
$ref: '#/components/schemas/HelperResolution'
/shared-fixtures/audits/factories/{factoryName}:
get:
summary: Read the current cascade-audit result for a touched factory or model seam.
operationId: getFactoryCascadeAudit
parameters:
- name: factoryName
in: path
required: true
schema:
type: string
responses:
'200':
description: Current cascade-audit description for the requested seam.
content:
application/json:
schema:
$ref: '#/components/schemas/FactoryCascadeAudit'
/shared-fixtures/lane-impact/runs:
post:
summary: Compare pre- and post-migration lane measurements for a migration pack.
operationId: compareFixtureLaneImpact
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LaneImpactComparisonRequest'
responses:
'200':
description: Comparison result for the affected lanes against the current Spec 206 budgets.
content:
application/json:
schema:
$ref: '#/components/schemas/LaneImpactComparison'
components:
schemas:
ProfileId:
type: string
enum:
- minimal
- standard
- full
CostClass:
type: string
enum:
- minimal
- standard
- integration-heavy
TransitionStatus:
type: string
enum:
- current
- legacy-transition
- planned-removal
RemovalTrigger:
type: string
minLength: 1
Disposition:
type: string
enum:
- remove
- make-explicit
- retain-documented
- follow-up
LaneId:
type: string
enum:
- fast-feedback
- confidence
- browser
- heavy-governance
SideEffects:
type: object
additionalProperties: false
required:
- workspace
- workspaceMembership
- tenantMembership
- session
- cache
- providerConnection
- providerCredential
- uiContext
properties:
workspace:
type: boolean
workspaceMembership:
type: boolean
tenantMembership:
type: boolean
session:
type: boolean
cache:
type: boolean
providerConnection:
type: boolean
providerCredential:
type: boolean
uiContext:
type: boolean
HelperResolutionRequest:
type: object
additionalProperties: false
required:
- profileId
properties:
profileId:
$ref: '#/components/schemas/ProfileId'
legacyAlias:
type: string
expectedHeavyContext:
type: boolean
HelperResolution:
type: object
additionalProperties: false
required:
- helperName
- defaultProfile
- requestedProfile
- canonicalProfile
- costClass
- sideEffects
- transitionStatus
properties:
helperName:
type: string
defaultProfile:
$ref: '#/components/schemas/ProfileId'
requestedProfile:
$ref: '#/components/schemas/ProfileId'
canonicalProfile:
$ref: '#/components/schemas/ProfileId'
costClass:
$ref: '#/components/schemas/CostClass'
sideEffects:
$ref: '#/components/schemas/SideEffects'
transitionStatus:
$ref: '#/components/schemas/TransitionStatus'
legacyAliasUsed:
type: boolean
legacyAlias:
type: string
removalTrigger:
$ref: '#/components/schemas/RemovalTrigger'
notes:
type: string
allOf:
- if:
properties:
requestedProfile:
const: minimal
then:
properties:
costClass:
const: minimal
sideEffects:
properties:
providerConnection:
const: false
providerCredential:
const: false
cache:
const: false
uiContext:
const: false
FactoryCascadeFinding:
type: object
additionalProperties: false
required:
- source
- triggerCondition
- createdObjects
- disposition
properties:
source:
type: string
enum:
- definition
- attribute-callback
- afterCreating
- model-event
- support-helper
triggerCondition:
type: string
createdObjects:
type: array
minItems: 1
items:
type: string
disposition:
$ref: '#/components/schemas/Disposition'
notes:
type: string
FactoryCascadeAudit:
type: object
additionalProperties: false
required:
- factoryName
- defaultCostClass
- findings
properties:
factoryName:
type: string
defaultCostClass:
$ref: '#/components/schemas/CostClass'
leanStates:
type: array
items:
type: string
heavyStates:
type: array
items:
type: string
findings:
type: array
minItems: 1
items:
$ref: '#/components/schemas/FactoryCascadeFinding'
LaneImpactComparisonRequest:
type: object
additionalProperties: false
required:
- packId
- laneMeasurements
properties:
packId:
type: string
laneMeasurements:
type: array
minItems: 1
items:
$ref: '#/components/schemas/LaneMeasurement'
LaneMeasurement:
type: object
additionalProperties: false
required:
- laneId
- baselineSeconds
- postMigrationSeconds
- budgetThresholdSeconds
properties:
laneId:
$ref: '#/components/schemas/LaneId'
baselineSeconds:
type: number
minimum: 0
postMigrationSeconds:
type: number
minimum: 0
budgetThresholdSeconds:
type: number
minimum: 0
LaneImpactComparison:
type: object
additionalProperties: false
required:
- packId
- results
properties:
packId:
type: string
results:
type: array
minItems: 1
items:
type: object
additionalProperties: false
required:
- laneId
- deltaSeconds
- deltaPercent
- budgetThresholdSeconds
- status
properties:
laneId:
$ref: '#/components/schemas/LaneId'
deltaSeconds:
type: number
deltaPercent:
type: number
budgetThresholdSeconds:
type: number
status:
type: string
enum:
- improved
- stable
- regressed
notes:
type: string