Some checks failed
Main Confidence / confidence (push) Failing after 44s
## Summary - add the full Spec 201 artifact set for enforcement and review guardrails - update the SpecKit workflow surfaces to carry UI/surface guardrail classification, handling modes, proof depth, and close-out targeting - align the operator UX standards reference and agent context with the new guardrail workflow ## Validation - completed cross-artifact consistency analysis for spec, plan, tasks, research, data model, contracts, and quickstart - recorded the low-impact workflow path at `00:48` and the representative guarded review at `02:34` - no Pest or runtime test suite was run because this is a docs/workflow-only feature - integrated browser smoke on the tenant dashboard could not complete because tenant-scoped unauthenticated navigation currently redirects to `/admin/t/login`, which returns `404 Not Found` ## Filament Notes - Livewire v4.0+ compliance is unchanged - provider registration remains in `bootstrap/providers.php` - no globally searchable resources were added or modified - no destructive runtime actions were introduced or changed - no asset strategy changes were made; existing `filament:assets` deployment behavior remains unchanged Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #250
451 lines
12 KiB
YAML
451 lines
12 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: UI Surface Enforcement & Review Guardrails
|
|
version: 1.0.0
|
|
description: |
|
|
Logical contract for the repository-owned guardrail workflow introduced by Spec 201.
|
|
It documents authoring, review, repository-signal, test-guardrail, and exception
|
|
semantics. It is not a public HTTP API.
|
|
servers:
|
|
- url: https://tenantpilot.local/logical
|
|
paths:
|
|
/logical/ui-guardrails/spec-impact/validate:
|
|
post:
|
|
summary: Validate one spec-level UI guardrail impact block
|
|
operationId: validateSpecGuardrailImpact
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SpecImpactValidationRequest'
|
|
responses:
|
|
'200':
|
|
description: Spec guardrail impact evaluated
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/SpecImpactValidationResult'
|
|
/logical/ui-guardrails/reviews/classify:
|
|
post:
|
|
summary: Classify one UI or surface change through the reviewer checklist
|
|
operationId: classifyReviewOutcome
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ReviewClassificationRequest'
|
|
responses:
|
|
'200':
|
|
description: Review classification returned
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ReviewClassificationResult'
|
|
/logical/ui-guardrails/repository-signals/assess:
|
|
post:
|
|
summary: Assess repository-level technical signals for a change
|
|
operationId: assessRepositorySignals
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/RepositorySignalAssessmentRequest'
|
|
responses:
|
|
'200':
|
|
description: Repository-signal assessment returned
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/RepositorySignalAssessmentResult'
|
|
/logical/ui-guardrails/test-guardrails/resolve:
|
|
post:
|
|
summary: Resolve the required test profile for a surface contract class
|
|
operationId: resolveTestGuardrailProfile
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TestGuardrailResolutionRequest'
|
|
responses:
|
|
'200':
|
|
description: Test guardrail profile returned
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TestGuardrailResolutionResult'
|
|
/logical/ui-guardrails/exceptions/assess:
|
|
post:
|
|
summary: Assess whether an exception record is complete and bounded
|
|
operationId: assessExceptionWorkflow
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ExceptionAssessmentRequest'
|
|
responses:
|
|
'200':
|
|
description: Exception assessment returned
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ExceptionAssessmentResult'
|
|
/logical/ui-guardrails/closeout/prepare:
|
|
post:
|
|
summary: Prepare the active feature PR close-out entry for guarded work
|
|
operationId: prepareCloseoutEntry
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloseoutPreparationRequest'
|
|
responses:
|
|
'200':
|
|
description: Close-out entry requirements returned
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloseoutPreparationResult'
|
|
/logical/ui-guardrails/guidance:
|
|
get:
|
|
summary: Read the current guardrail guidance pack
|
|
operationId: readGuardrailGuidance
|
|
responses:
|
|
'200':
|
|
description: Guardrail guidance returned
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GuardrailGuidancePack'
|
|
components:
|
|
schemas:
|
|
SpecImpactValidationRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- specPath
|
|
- uiSurfaceChange
|
|
- nativeCustomClassification
|
|
- stateLayers
|
|
- sharedFamilyRelevance
|
|
- exceptionNeeded
|
|
properties:
|
|
specPath:
|
|
type: string
|
|
uiSurfaceChange:
|
|
type: boolean
|
|
nativeCustomClassification:
|
|
type: string
|
|
stateLayers:
|
|
type: array
|
|
items:
|
|
type: string
|
|
enum:
|
|
- shell
|
|
- page
|
|
- detail
|
|
sharedFamilyRelevance:
|
|
type: string
|
|
exceptionNeeded:
|
|
type: boolean
|
|
plannedGuardrailClasses:
|
|
type: array
|
|
items:
|
|
type: string
|
|
closeoutEntryTarget:
|
|
type: string
|
|
SpecImpactValidationResult:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- status
|
|
- findings
|
|
- closeoutEntryTarget
|
|
properties:
|
|
status:
|
|
type: string
|
|
enum:
|
|
- complete
|
|
- needs-revision
|
|
findings:
|
|
type: array
|
|
items:
|
|
type: string
|
|
reviewerHandOff:
|
|
type: string
|
|
closeoutEntryTarget:
|
|
type: string
|
|
ReviewClassificationRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- changeRef
|
|
- triggeredMappings
|
|
- checklistAnswers
|
|
properties:
|
|
changeRef:
|
|
type: string
|
|
triggeredMappings:
|
|
type: array
|
|
items:
|
|
type: string
|
|
checklistAnswers:
|
|
type: array
|
|
items:
|
|
type: string
|
|
exceptionClaimed:
|
|
type: boolean
|
|
closeoutEntryTarget:
|
|
type: string
|
|
ReviewClassificationResult:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- outcomeClass
|
|
- workflowOutcome
|
|
- recordLocation
|
|
properties:
|
|
outcomeClass:
|
|
type: string
|
|
enum:
|
|
- blocker
|
|
- strong-warning
|
|
- documentation-required-exception
|
|
- acceptable-special-case
|
|
workflowOutcome:
|
|
type: string
|
|
enum:
|
|
- keep
|
|
- split
|
|
- document-in-feature
|
|
- follow-up-spec
|
|
- reject-or-split
|
|
missingEvidence:
|
|
type: array
|
|
items:
|
|
type: string
|
|
recordLocation:
|
|
type: string
|
|
RepositorySignalAssessmentRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- changeRef
|
|
- signalIds
|
|
properties:
|
|
changeRef:
|
|
type: string
|
|
signalIds:
|
|
type: array
|
|
items:
|
|
type: string
|
|
exceptionClaimed:
|
|
type: boolean
|
|
scopeNote:
|
|
type: string
|
|
RepositorySignalAssessmentResult:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- status
|
|
- handlingModes
|
|
- closeoutEntryRequired
|
|
properties:
|
|
status:
|
|
type: string
|
|
enum:
|
|
- complete
|
|
- needs-review
|
|
handlingModes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
requiresException:
|
|
type: boolean
|
|
closeoutEntryRequired:
|
|
type: boolean
|
|
notes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
TestGuardrailResolutionRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- surfaceClass
|
|
properties:
|
|
surfaceClass:
|
|
type: string
|
|
enum:
|
|
- shared-detail-family
|
|
- monitoring-state-page
|
|
- global-context-shell
|
|
- exception-coded-surface
|
|
- standard-native-filament
|
|
changedContractAreas:
|
|
type: array
|
|
items:
|
|
type: string
|
|
exceptionType:
|
|
type: string
|
|
TestGuardrailResolutionResult:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- requiredTestTypes
|
|
- specialCoverageRequired
|
|
- profileId
|
|
properties:
|
|
profileId:
|
|
type: string
|
|
requiredTestTypes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
manualSmokeExpectations:
|
|
type: array
|
|
items:
|
|
type: string
|
|
specialCoverageRequired:
|
|
type: boolean
|
|
ExceptionAssessmentRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- changeRef
|
|
- exceptionType
|
|
- brokenRules
|
|
- boundaryPlan
|
|
- closeoutEntryTarget
|
|
properties:
|
|
changeRef:
|
|
type: string
|
|
exceptionType:
|
|
type: string
|
|
brokenRules:
|
|
type: array
|
|
items:
|
|
type: string
|
|
productReason:
|
|
type: string
|
|
boundaryPlan:
|
|
type: array
|
|
items:
|
|
type: string
|
|
standardizationPlan:
|
|
type: array
|
|
items:
|
|
type: string
|
|
closeoutEntryTarget:
|
|
type: string
|
|
ExceptionAssessmentResult:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- status
|
|
- spreadAllowed
|
|
- closeoutEntryRequired
|
|
properties:
|
|
status:
|
|
type: string
|
|
enum:
|
|
- complete
|
|
- needs-revision
|
|
spreadAllowed:
|
|
type: boolean
|
|
closeoutEntryRequired:
|
|
type: boolean
|
|
closeoutNotes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
CloseoutPreparationRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- changeRef
|
|
- outcomeClass
|
|
- handlingModes
|
|
- workflowOutcome
|
|
properties:
|
|
changeRef:
|
|
type: string
|
|
outcomeClass:
|
|
type: string
|
|
enum:
|
|
- blocker
|
|
- strong-warning
|
|
- documentation-required-exception
|
|
- acceptable-special-case
|
|
handlingModes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
workflowOutcome:
|
|
type: string
|
|
enum:
|
|
- keep
|
|
- split
|
|
- document-in-feature
|
|
- follow-up-spec
|
|
- reject-or-split
|
|
proofDepth:
|
|
type: array
|
|
items:
|
|
type: string
|
|
duplicatePromptNotes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
CloseoutPreparationResult:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- entryName
|
|
- requiredFields
|
|
properties:
|
|
entryName:
|
|
type: string
|
|
requiredFields:
|
|
type: array
|
|
items:
|
|
type: string
|
|
lowImpactAllowed:
|
|
type: boolean
|
|
notes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
GuardrailGuidancePack:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- entryPoints
|
|
- outcomeClasses
|
|
- workflowOutcomes
|
|
- closeoutEntryName
|
|
properties:
|
|
entryPoints:
|
|
type: array
|
|
items:
|
|
type: string
|
|
outcomeClasses:
|
|
type: array
|
|
items:
|
|
type: string
|
|
workflowOutcomes:
|
|
type: array
|
|
items:
|
|
type: string
|
|
closeoutEntryName:
|
|
type: string
|
|
notes:
|
|
type: array
|
|
items:
|
|
type: string
|