TenantAtlas/specs/266-tenant-dashboard-productization-v1/contracts/tenant-dashboard-productization.openapi.yaml
ahmido 3aeb0d04b8 Auto: 266-tenant-dashboard-productization-v1 → platform-dev (#322)
Automated PR created by Copilot per user request. Branch pushed: 266-tenant-dashboard-productization-v1

Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de>
Reviewed-on: #322
2026-05-03 14:03:46 +00:00

505 lines
14 KiB
YAML

openapi: 3.0.3
info:
title: TenantPilot Tenant Dashboard Productization v1 (Conceptual)
version: 0.1.0
description: |
Conceptual contract for the tenant dashboard productization slice in Spec 266.
NOTE: These paths describe existing tenant and admin routes reused by the
implementation. The schemas document expected derived page and view behavior
for planning purposes only; they do not require a new public REST API.
servers:
- url: /
paths:
/admin/t/{tenant}:
get:
summary: View the productized tenant dashboard
description: |
Existing tenant-scoped dashboard route reused as the canonical tenant
landing page. The implementation stays read-mostly and reuses existing
findings, exception, review, evidence, review-pack, permissions,
recovery, and operation truth.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
description: Tenant id or external id already accepted by the tenant panel.
responses:
'200':
description: Tenant dashboard rendered
content:
text/html:
schema:
type: string
application/json:
schema:
$ref: '#/components/schemas/TenantDashboardPageModel'
'404':
description: Not found for non-members or out-of-scope tenant requests
/admin/governance/inbox:
get:
summary: Open the canonical governance inbox from the tenant dashboard
description: |
Existing admin-plane governance queue reused as a canonical follow-up
destination. The dashboard may launch it with a tenant prefilter and an
optional family filter.
parameters:
- in: query
name: tenant_id
required: false
schema:
type: string
- in: query
name: family
required: false
schema:
type: string
responses:
'200':
description: Governance inbox rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden when the current workspace scope has no visible governance family
'404':
description: Not found for non-members or out-of-scope tenant filters
/admin/operations:
get:
summary: Open canonical operations from the tenant dashboard
description: |
Existing canonical operations surface reused for recent-operation and
operation follow-up links. The dashboard preserves tenant-prefilter
continuity with the current query-state contract.
parameters:
- in: query
name: tenant_id
required: false
schema:
type: string
- in: query
name: tenant_scope
required: false
schema:
type: string
- in: query
name: problemClass
required: false
schema:
type: string
responses:
'200':
description: Operations page rendered
content:
text/html:
schema:
type: string
'404':
description: Not found for non-members or tenant filters outside entitled scope
/admin/t/{tenant}/findings:
get:
summary: Open tenant findings from the dashboard
description: Existing tenant findings list reused by KPI and recommended-action follow-up links.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
responses:
'200':
description: Findings list rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden for an in-scope actor missing findings capability
'404':
description: Not found for non-members or out-of-scope tenant requests
/admin/t/{tenant}/finding-exceptions:
get:
summary: Open tenant risk exceptions from the dashboard
description: Existing tenant exception list reused for risk and pending-decision follow-up.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
responses:
'200':
description: Finding exception list rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden for an in-scope actor missing exception capability
'404':
description: Not found for non-members or out-of-scope tenant requests
/admin/tenants/{tenant}/required-permissions:
get:
summary: Open required permissions from the dashboard
description: Existing required-permissions route reused for provider-health follow-up.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
responses:
'200':
description: Required permissions page rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden for an in-scope actor missing capability
'404':
description: Not found for non-members or out-of-scope tenant requests
/admin/reviews/workspace:
get:
summary: Open customer-safe review workspace from the tenant dashboard
description: Existing review workspace reused for output-readiness follow-up when the actor is entitled.
parameters:
- in: query
name: tenant
required: false
schema:
type: string
responses:
'200':
description: Customer review workspace rendered
content:
text/html:
schema:
type: string
'404':
description: Not found for non-members or tenants outside current scope
/admin/t/{tenant}/reviews:
get:
summary: Open tenant reviews from the dashboard
description: Existing tenant review resource reused for review drill-through and current review continuity.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
responses:
'200':
description: Tenant reviews list or detail entry rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden for an in-scope actor missing review capability
'404':
description: Not found for non-members or out-of-scope tenant requests
/admin/t/{tenant}/review-packs:
get:
summary: Open tenant review packs from the dashboard
description: Existing review-pack resource reused for output-package continuity.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
responses:
'200':
description: Review packs list or detail entry rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden for an in-scope actor missing review-pack capability
'404':
description: Not found for non-members or out-of-scope tenant requests
/admin/t/{tenant}/evidence:
get:
summary: Open tenant evidence snapshots from the dashboard
description: Existing evidence resource reused for evidence-readiness follow-up.
parameters:
- in: path
name: tenant
required: true
schema:
type: string
responses:
'200':
description: Evidence snapshots list or detail entry rendered
content:
text/html:
schema:
type: string
'403':
description: Forbidden for an in-scope actor missing evidence capability
'404':
description: Not found for non-members or out-of-scope tenant requests
components:
schemas:
TenantDashboardPageModel:
type: object
required:
- workspace
- tenant
- header_actions
- kpis
- recommended_actions
- governance_status_rows
- recent_operations
properties:
workspace:
$ref: '#/components/schemas/ContextLabel'
tenant:
$ref: '#/components/schemas/ContextLabel'
context_chips:
type: array
items:
$ref: '#/components/schemas/ContextChip'
arrival_context:
$ref: '#/components/schemas/ArrivalContext'
nullable: true
header_actions:
type: array
maxItems: 2
items:
$ref: '#/components/schemas/DashboardAction'
kpis:
type: array
maxItems: 4
items:
$ref: '#/components/schemas/KpiCard'
recommended_actions:
type: array
maxItems: 3
items:
$ref: '#/components/schemas/RecommendedAction'
governance_status_rows:
type: array
items:
$ref: '#/components/schemas/GovernanceStatusRow'
recent_operations:
type: array
maxItems: 4
items:
$ref: '#/components/schemas/RecentOperationRow'
current_review:
$ref: '#/components/schemas/SummaryCard'
nullable: true
risk_exception_summary:
$ref: '#/components/schemas/SummaryCard'
nullable: true
provider_health_summary:
$ref: '#/components/schemas/SummaryCard'
nullable: true
output_readiness_summary:
$ref: '#/components/schemas/SummaryCard'
nullable: true
ContextLabel:
type: object
required:
- label
- value
properties:
label:
type: string
value:
type: string
ContextChip:
type: object
required:
- label
properties:
label:
type: string
value:
type: string
nullable: true
ArrivalContext:
type: object
properties:
title:
type: string
body:
type: string
action:
$ref: '#/components/schemas/DashboardAction'
nullable: true
DashboardAction:
type: object
required:
- label
- style
- availability_state
properties:
label:
type: string
style:
type: string
enum:
- primary
- secondary
availability_state:
type: string
enum:
- available
- unavailable
- absent
url:
type: string
nullable: true
helper_text:
type: string
nullable: true
KpiCard:
type: object
required:
- key
- label
- value
- status_label
properties:
key:
type: string
label:
type: string
value:
type: string
supporting_text:
type: string
nullable: true
status_label:
type: string
badge_state:
type: string
nullable: true
trend_label:
type: string
nullable: true
primary_link:
$ref: '#/components/schemas/DashboardAction'
nullable: true
RecommendedAction:
type: object
required:
- priority
- title
- reason
- impact
- cta
properties:
priority:
type: integer
category:
type: string
nullable: true
title:
type: string
reason:
type: string
impact:
type: string
cta:
$ref: '#/components/schemas/DashboardAction'
GovernanceStatusRow:
type: object
required:
- key
- label
- description
- status_label
properties:
key:
type: string
label:
type: string
description:
type: string
status_label:
type: string
badge_state:
type: string
nullable: true
support_link:
$ref: '#/components/schemas/DashboardAction'
nullable: true
RecentOperationRow:
type: object
required:
- operation_run_id
- label
- relative_time
properties:
operation_run_id:
type: integer
label:
type: string
status_label:
type: string
nullable: true
outcome_label:
type: string
nullable: true
relative_time:
type: string
summary_text:
type: string
nullable: true
detail_url:
type: string
nullable: true
SummaryCard:
type: object
required:
- title
- availability_state
properties:
title:
type: string
headline:
type: string
nullable: true
supporting_lines:
type: array
items:
type: string
availability_state:
type: string
enum:
- available
- unavailable
- absent
cta:
$ref: '#/components/schemas/DashboardAction'
nullable: true
helper_text:
type: string
nullable: true