TenantAtlas/specs/146-central-tenant-status-presentation/contracts/tenant-lifecycle-presentation.openapi.yaml
ahmido 6ca496233b feat: centralize tenant lifecycle presentation (#175)
## Summary
- add a shared tenant lifecycle presentation contract and referenced-tenant adapter for canonical lifecycle labels and helper copy
- align tenant, chooser, onboarding, archived-banner, and tenantless operation viewer surfaces with the shared lifecycle vocabulary
- add Spec 146 design artifacts, audit notes, and regression coverage for lifecycle presentation across Filament and onboarding surfaces

## Validation
- `vendor/bin/sail bin pint --dirty --format agent`
- `vendor/bin/sail artisan test --compact tests/Feature/Badges/TenantStatusBadgeTest.php tests/Unit/Badges/TenantBadgesTest.php tests/Unit/Tenants/TenantLifecycleTest.php tests/Unit/Support/Tenants/TenantLifecyclePresentationTest.php tests/Feature/Filament/TenantLifecyclePresentationAcrossTenantSurfacesTest.php tests/Feature/Filament/ReferencedTenantLifecyclePresentationTest.php tests/Feature/Filament/TenantLifecycleStatusDomainSeparationTest.php tests/Feature/Filament/TenantViewHeaderUiEnforcementTest.php tests/Feature/Onboarding/TenantLifecyclePresentationCopyTest.php tests/Feature/Onboarding/OnboardingDraftAuthorizationTest.php tests/Feature/Onboarding/OnboardingDraftLifecycleTest.php`

## Notes
- Livewire v4.0+ compliance preserved; this change is presentation-only on existing Filament v5 surfaces.
- Panel provider registration remains unchanged in `bootstrap/providers.php`.
- No global-search behavior changed; no resource was newly made globally searchable or disabled.
- No destructive actions were added or changed.
- No asset registration strategy changed; existing deploy flow for `php artisan filament:assets` remains unchanged.

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #175
2026-03-16 18:18:53 +00:00

128 lines
3.5 KiB
YAML

openapi: 3.1.0
info:
title: Tenant Lifecycle Presentation Contract
version: 0.1.0
description: >-
Internal presentation contract for rendering tenant lifecycle consistently across
tenant management surfaces and canonical viewers. This feature introduces no new
external HTTP endpoints; the contract is expressed as shared schemas for UI-facing
presentation objects.
paths: {}
components:
schemas:
TenantLifecycleValue:
type: string
enum:
- draft
- onboarding
- active
- archived
description: Canonical tenant lifecycle values defined by the tenant domain.
TenantLifecycleBadge:
type: object
additionalProperties: false
required:
- color
- icon
properties:
color:
type: string
description: Shared badge or chip tone token.
icon:
type: string
description: Shared icon token for lifecycle rendering.
iconColor:
type:
- string
- 'null'
description: Optional icon color override.
TenantLifecyclePresentation:
type: object
additionalProperties: false
required:
- value
- label
- badge
- shortDescription
- longDescription
- isInvalidFallback
properties:
value:
$ref: '#/components/schemas/TenantLifecycleValue'
label:
type: string
enum:
- Draft
- Onboarding
- Active
- Archived
badge:
$ref: '#/components/schemas/TenantLifecycleBadge'
shortDescription:
type: string
description: Concise explanation for detail, selector, or viewer surfaces.
longDescription:
type: string
description: Detailed helper text for infolists, banners, or canonical viewers.
isInvalidFallback:
type: boolean
description: Reserved for corrupted or unexpected non-canonical values only.
TenantLifecyclePresentationVariant:
type: object
additionalProperties: false
required:
- surface
- showBadge
- showShortDescription
- showLongDescription
properties:
surface:
type: string
enum:
- table
- detail
- selector
- canonical_viewer
- banner
showBadge:
type: boolean
showShortDescription:
type: boolean
showLongDescription:
type: boolean
contextNote:
type:
- string
- 'null'
description: Optional surface-specific note that does not change lifecycle meaning.
ReferencedTenantLifecyclePresentation:
type: object
additionalProperties: false
required:
- tenantId
- tenantName
- presentation
- viewerContext
properties:
tenantId:
type:
- integer
- 'null'
tenantName:
type:
- string
- 'null'
presentation:
$ref: '#/components/schemas/TenantLifecyclePresentation'
viewerContext:
type: string
enum:
- operation_run
- report
- audit_reference
contextNote:
type:
- string
- 'null'
description: Optional explanatory copy for onboarding or archived references.