## Summary - standardize the shared verification report family across operation detail, onboarding, and tenant verification widget hosts - standardize normalized settings and normalized diff family wrappers across policy, policy version, and finding detail hosts - add parity and guard coverage plus the full Spec 197 artifacts, including recorded manual smoke evidence ## Testing - focused Sail regression pack from `specs/197-shared-detail-contract/quickstart.md` - local integrated-browser manual smoke for SC-197-003 and SC-197-004 Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #237
299 lines
9.2 KiB
YAML
299 lines
9.2 KiB
YAML
openapi: 3.1.0
|
|
info:
|
|
title: Normalized Detail Family Internal Surface Contract
|
|
version: 0.1.0
|
|
summary: Internal logical contract for shared normalized settings and normalized diff families
|
|
description: |
|
|
This contract is an internal planning artifact for Spec 197. It documents the
|
|
family-owned normalized settings and normalized diff surfaces used across
|
|
policy, policy version, and finding detail hosts. Rendered routes still
|
|
return HTML. The structured schemas below describe the internal surface
|
|
contract and approved host-variation boundaries. This does not add a public
|
|
HTTP API.
|
|
servers:
|
|
- url: /internal
|
|
x-family-consumers:
|
|
- surface: policy_settings
|
|
source: normalized_settings_surface
|
|
accessPattern: infolist_safe
|
|
guardScope:
|
|
- apps/platform/app/Filament/Resources/PolicyResource.php
|
|
- apps/platform/resources/views/filament/infolists/entries/normalized-settings.blade.php
|
|
requiredMarkers:
|
|
- NormalizedSettingsSurface::build
|
|
- data-shared-detail-family="normalized-settings"
|
|
- data-shared-normalized-settings-host="policy"
|
|
- surface: policy_version_settings
|
|
source: normalized_settings_surface
|
|
accessPattern: infolist_safe
|
|
guardScope:
|
|
- apps/platform/app/Filament/Resources/PolicyVersionResource.php
|
|
- apps/platform/resources/views/filament/infolists/entries/normalized-settings.blade.php
|
|
requiredMarkers:
|
|
- NormalizedSettingsSurface::build
|
|
- data-shared-detail-family="normalized-settings"
|
|
- data-shared-normalized-settings-host="policy_version"
|
|
x-forbiddenMarkers:
|
|
- needle: "->view('filament.infolists.entries.policy-settings-standard')"
|
|
max: 0
|
|
- surface: policy_version_diff
|
|
source: normalized_diff_surface
|
|
accessPattern: infolist_safe
|
|
guardScope:
|
|
- apps/platform/app/Filament/Resources/PolicyVersionResource.php
|
|
- apps/platform/resources/views/filament/infolists/entries/normalized-diff.blade.php
|
|
requiredMarkers:
|
|
- NormalizedDiffSurface::build
|
|
- data-shared-detail-family="normalized-diff"
|
|
- data-shared-normalized-diff-host="policy_version"
|
|
- data-shared-zone="summary"
|
|
- data-shared-zone="groups"
|
|
- surface: finding_diff
|
|
source: normalized_diff_surface
|
|
accessPattern: infolist_safe
|
|
guardScope:
|
|
- apps/platform/app/Filament/Resources/FindingResource.php
|
|
- apps/platform/resources/views/filament/infolists/entries/normalized-diff.blade.php
|
|
requiredMarkers:
|
|
- NormalizedDiffSurface::build
|
|
- data-shared-detail-family="normalized-diff"
|
|
- data-shared-normalized-diff-host="finding"
|
|
- data-shared-normalized-diff-state
|
|
- data-shared-zone="summary"
|
|
paths:
|
|
/ui-contracts/normalized-settings/resolve:
|
|
get:
|
|
summary: Resolve the shared normalized settings family contract for one host
|
|
operationId: resolveNormalizedSettingsSurface
|
|
parameters:
|
|
- name: host
|
|
in: query
|
|
required: true
|
|
schema:
|
|
$ref: '#/components/schemas/NormalizedSettingsHostKind'
|
|
responses:
|
|
'200':
|
|
description: Shared normalized settings family contract resolved for the current host context
|
|
content:
|
|
application/vnd.tenantpilot.normalized-settings-surface+json:
|
|
schema:
|
|
$ref: '#/components/schemas/NormalizedSettingsSurfaceContract'
|
|
'403':
|
|
description: Actor is in scope but lacks the capability required to view the host
|
|
'404':
|
|
description: Host or tenant scope is not visible in the current workspace or tenant context
|
|
/ui-contracts/normalized-diff/resolve:
|
|
get:
|
|
summary: Resolve the shared normalized diff family contract for one host
|
|
operationId: resolveNormalizedDiffSurface
|
|
parameters:
|
|
- name: host
|
|
in: query
|
|
required: true
|
|
schema:
|
|
$ref: '#/components/schemas/NormalizedDiffHostKind'
|
|
responses:
|
|
'200':
|
|
description: Shared normalized diff family contract resolved for the current host context
|
|
content:
|
|
application/vnd.tenantpilot.normalized-diff-surface+json:
|
|
schema:
|
|
$ref: '#/components/schemas/NormalizedDiffSurfaceContract'
|
|
'403':
|
|
description: Actor is in scope but lacks the capability required to view the host
|
|
'404':
|
|
description: Host or tenant scope is not visible in the current workspace or tenant context
|
|
components:
|
|
schemas:
|
|
NormalizedSettingsHostKind:
|
|
type: string
|
|
enum:
|
|
- policy
|
|
- policy_version
|
|
NormalizedDiffHostKind:
|
|
type: string
|
|
enum:
|
|
- policy_version
|
|
- finding
|
|
NormalizedSettingsVariant:
|
|
type: string
|
|
enum:
|
|
- settings_catalog_table
|
|
- standard_blocks
|
|
AvailabilityState:
|
|
type: string
|
|
enum:
|
|
- available
|
|
- unavailable
|
|
- partial
|
|
NormalizedSettingsSectionBehavior:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- preservesSectionOrder
|
|
- supportsExpansion
|
|
- ownsEmptyState
|
|
properties:
|
|
preservesSectionOrder:
|
|
type: boolean
|
|
supportsExpansion:
|
|
type: boolean
|
|
ownsEmptyState:
|
|
type: boolean
|
|
NormalizedSettingsRenderExpectations:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- ownsWarningsInWrapper
|
|
- ownsSubtypeDelegation
|
|
- keepsHostFramingOutsideCore
|
|
properties:
|
|
ownsWarningsInWrapper:
|
|
type: boolean
|
|
ownsSubtypeDelegation:
|
|
type: boolean
|
|
keepsHostFramingOutsideCore:
|
|
type: boolean
|
|
NormalizedDiffViewMode:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- key
|
|
- label
|
|
- default
|
|
properties:
|
|
key:
|
|
type: string
|
|
label:
|
|
type: string
|
|
default:
|
|
type: boolean
|
|
NormalizedDiffSectionBehavior:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- preservesGroupOrder
|
|
- supportsExpansion
|
|
- supportsFullscreen
|
|
properties:
|
|
preservesGroupOrder:
|
|
type: boolean
|
|
supportsExpansion:
|
|
type: boolean
|
|
supportsFullscreen:
|
|
type: boolean
|
|
NormalizedDiffRenderExpectations:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- ownsAvailabilityState
|
|
- ownsZeroDiffMessaging
|
|
- keepsHostFramingOutsideCore
|
|
properties:
|
|
ownsAvailabilityState:
|
|
type: boolean
|
|
ownsZeroDiffMessaging:
|
|
type: boolean
|
|
keepsHostFramingOutsideCore:
|
|
type: boolean
|
|
NormalizedSettingsSurfaceContract:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- hostKind
|
|
- context
|
|
- variant
|
|
- sectionBehavior
|
|
- renderExpectations
|
|
- titlePolicy
|
|
properties:
|
|
hostKind:
|
|
$ref: '#/components/schemas/NormalizedSettingsHostKind'
|
|
context:
|
|
type: string
|
|
enum:
|
|
- policy
|
|
- version
|
|
variant:
|
|
$ref: '#/components/schemas/NormalizedSettingsVariant'
|
|
warnings:
|
|
type: array
|
|
items:
|
|
type: string
|
|
settingsTable:
|
|
type:
|
|
- object
|
|
- 'null'
|
|
blocks:
|
|
type: array
|
|
items:
|
|
type: object
|
|
sectionBehavior:
|
|
$ref: '#/components/schemas/NormalizedSettingsSectionBehavior'
|
|
renderExpectations:
|
|
$ref: '#/components/schemas/NormalizedSettingsRenderExpectations'
|
|
emptyState:
|
|
type:
|
|
- object
|
|
- 'null'
|
|
titlePolicy:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- showWrapperTitle
|
|
properties:
|
|
showWrapperTitle:
|
|
type: boolean
|
|
NormalizedDiffSurfaceContract:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- hostKind
|
|
- availabilityState
|
|
- summary
|
|
- viewModes
|
|
- sectionBehavior
|
|
- renderExpectations
|
|
properties:
|
|
hostKind:
|
|
$ref: '#/components/schemas/NormalizedDiffHostKind'
|
|
availabilityState:
|
|
$ref: '#/components/schemas/AvailabilityState'
|
|
summary:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- added
|
|
- removed
|
|
- changed
|
|
properties:
|
|
added:
|
|
type: integer
|
|
removed:
|
|
type: integer
|
|
changed:
|
|
type: integer
|
|
message:
|
|
type:
|
|
- string
|
|
- 'null'
|
|
viewModes:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/NormalizedDiffViewMode'
|
|
sectionBehavior:
|
|
$ref: '#/components/schemas/NormalizedDiffSectionBehavior'
|
|
renderExpectations:
|
|
$ref: '#/components/schemas/NormalizedDiffRenderExpectations'
|
|
groups:
|
|
type: array
|
|
items:
|
|
type: object
|
|
scriptRendering:
|
|
type:
|
|
- object
|
|
- 'null'
|
|
emptyState:
|
|
type:
|
|
- object
|
|
- 'null' |