openapi: 3.1.0 info: title: Baseline Compare Matrix Operator Mode Internal Surface Contract version: 0.2.0 summary: Internal logical contract for adaptive operator-density rendering on the existing baseline compare matrix route description: | This contract is an internal planning artifact for Spec 191. The affected surface still renders HTML through Filament and Livewire. The schemas below define the bounded request-scoped presentation models and staged filter interactions that must be derivable from existing Spec 190 matrix truth before the operator-density refactor can render safely. servers: - url: /internal x-baseline-compare-operator-mode-consumers: - surface: baseline.compare.matrix sourceFiles: - apps/platform/app/Filament/Pages/BaselineCompareMatrix.php - apps/platform/resources/views/filament/pages/baseline-compare-matrix.blade.php mustRender: - reference - requested_vs_resolved_mode - presentation_state - support_surface_state - applied_filters - draft_filters - staged_filter_changes - tenant_summaries - dense_rows_or_compact_results - last_updated_at - auto_refresh_state mustAccept: - mode - policy_type - state - severity - tenant_sort - subject_sort - subject_key mustStage: - selectedPolicyTypes - selectedStates - selectedSeverities - tenantSort - subjectSort paths: /admin/baseline-profiles/{profile}/compare-matrix: get: summary: Render the existing baseline compare matrix using adaptive operator-density presentation operationId: viewBaselineCompareOperatorMode parameters: - name: profile in: path required: true schema: type: integer - name: mode in: query required: false schema: $ref: '#/components/schemas/PresentationMode' - name: policy_type in: query required: false schema: type: array items: type: string - name: state in: query required: false schema: type: array items: $ref: '#/components/schemas/MatrixCellState' - name: severity in: query required: false schema: type: array items: $ref: '#/components/schemas/FindingSeverity' - name: tenant_sort in: query required: false schema: type: string - name: subject_sort in: query required: false schema: type: string - name: subject_key in: query required: false schema: type: string responses: '200': description: Rendered matrix plus adaptive operator-density read models content: text/html: schema: type: string application/vnd.tenantpilot.baseline-compare-operator-mode+json: schema: $ref: '#/components/schemas/BaselineCompareOperatorModeBundle' '403': description: Actor is in scope but lacks workspace baseline view capability '404': description: Workspace or baseline profile is outside actor scope /internal/workspaces/{workspace}/baseline-profiles/{profile}/compare-matrix/apply-filters: post: summary: Apply staged heavy filters to the operator-density matrix route operationId: applyBaselineCompareOperatorFilters parameters: - name: workspace in: path required: true schema: type: integer - name: profile in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MatrixFilterDraft' responses: '200': description: Updated operator-density bundle using the applied filter state content: application/vnd.tenantpilot.baseline-compare-operator-mode+json: schema: $ref: '#/components/schemas/BaselineCompareOperatorModeBundle' '403': description: Actor is in scope but lacks workspace baseline view capability '404': description: Workspace or baseline profile is outside actor scope /internal/workspaces/{workspace}/baseline-profiles/{profile}/compare-matrix/reset-filters: post: summary: Reset staged and applied heavy filters for the operator-density matrix route operationId: resetBaselineCompareOperatorFilters parameters: - name: workspace in: path required: true schema: type: integer - name: profile in: path required: true schema: type: integer responses: '200': description: Updated operator-density bundle with default filter state restored content: application/vnd.tenantpilot.baseline-compare-operator-mode+json: schema: $ref: '#/components/schemas/BaselineCompareOperatorModeBundle' '403': description: Actor is in scope but lacks workspace baseline view capability '404': description: Workspace or baseline profile is outside actor scope components: schemas: PresentationMode: type: string enum: - auto - dense - compact MatrixCellState: type: string enum: - match - differ - missing - ambiguous - not_compared - stale_result FindingSeverity: type: string enum: - low - medium - high - critical FreshnessState: type: string enum: - fresh - stale - never_compared - unknown TrustLevel: type: string enum: - trustworthy - limited_confidence - diagnostic_only - unusable AttentionLevel: type: string enum: - aligned - review - refresh_recommended - needs_attention MatrixReference: type: object additionalProperties: false required: - baselineProfileId - baselineProfileName - referenceState - assignedTenantCount - visibleTenantCount properties: baselineProfileId: type: integer baselineProfileName: type: string referenceSnapshotId: type: - integer - 'null' referenceState: type: string assignedTenantCount: type: integer visibleTenantCount: type: integer MatrixFilterDraft: type: object additionalProperties: false required: - selectedPolicyTypes - selectedStates - selectedSeverities - tenantSort - subjectSort properties: selectedPolicyTypes: type: array items: type: string selectedStates: type: array items: $ref: '#/components/schemas/MatrixCellState' selectedSeverities: type: array items: $ref: '#/components/schemas/FindingSeverity' tenantSort: type: string subjectSort: type: string focusedSubjectKey: type: - string - 'null' MatrixPresentationState: type: object additionalProperties: false required: - requestedMode - resolvedMode - visibleTenantCount - activeFilterCount - hasStagedFilterChanges - autoRefreshActive - lastUpdatedAt - canOverrideMode - compactModeAvailable properties: requestedMode: $ref: '#/components/schemas/PresentationMode' resolvedMode: type: string enum: - dense - compact description: | Final render mode after evaluating the requested route mode against the visible tenant count. A requested `compact` mode may still resolve to `dense` when more than one visible tenant remains in scope. visibleTenantCount: type: integer activeFilterCount: type: integer hasStagedFilterChanges: type: boolean autoRefreshActive: type: boolean lastUpdatedAt: type: - string - 'null' format: date-time canOverrideMode: type: boolean compactModeAvailable: type: boolean MatrixTenantSummary: type: object additionalProperties: false required: - tenantId - tenantName - freshnessState - differingCount - missingCount - ambiguousCount - trustLevel properties: tenantId: type: integer tenantName: type: string freshnessState: $ref: '#/components/schemas/FreshnessState' lastComparedAt: type: - string - 'null' format: date-time differingCount: type: integer missingCount: type: integer ambiguousCount: type: integer trustLevel: $ref: '#/components/schemas/TrustLevel' maxSeverity: type: - string - 'null' DenseCellView: type: object additionalProperties: false required: - tenantId - subjectKey - state - freshnessState - trustLevel - attentionLevel properties: tenantId: type: integer subjectKey: type: string state: $ref: '#/components/schemas/MatrixCellState' freshnessState: $ref: '#/components/schemas/FreshnessState' trustLevel: $ref: '#/components/schemas/TrustLevel' severity: type: - string - 'null' attentionLevel: $ref: '#/components/schemas/AttentionLevel' reasonSummary: type: - string - 'null' primaryDrilldownUrl: type: - string - 'null' secondaryDrilldownUrls: type: object additionalProperties: type: string DenseSubjectRowView: type: object additionalProperties: false required: - subjectKey - displayName - policyType - deviationBreadth - missingBreadth - ambiguousBreadth - trustLevel - cells properties: subjectKey: type: string displayName: type: string policyType: type: string baselineExternalId: type: - string - 'null' deviationBreadth: type: integer missingBreadth: type: integer ambiguousBreadth: type: integer maxSeverity: type: - string - 'null' trustLevel: $ref: '#/components/schemas/TrustLevel' cells: type: array items: $ref: '#/components/schemas/DenseCellView' CompactSubjectResultView: type: object additionalProperties: false required: - tenantId - subjectKey - displayName - policyType - state - freshnessState - trustLevel properties: tenantId: type: integer subjectKey: type: string displayName: type: string policyType: type: string state: $ref: '#/components/schemas/MatrixCellState' freshnessState: $ref: '#/components/schemas/FreshnessState' trustLevel: $ref: '#/components/schemas/TrustLevel' severity: type: - string - 'null' reasonSummary: type: - string - 'null' primaryDrilldownUrl: type: - string - 'null' runUrl: type: - string - 'null' MatrixSupportSurfaceState: type: object additionalProperties: false required: - legendMode - showActiveFilterSummary - showLastUpdated - showAutoRefreshHint - showBlockingRefreshState properties: legendMode: type: string showActiveFilterSummary: type: boolean showLastUpdated: type: boolean showAutoRefreshHint: type: boolean showBlockingRefreshState: type: boolean BaselineCompareOperatorModeBundle: type: object additionalProperties: false required: - reference - presentation - supportSurface - appliedFilters - draftFilters - tenantSummaries properties: reference: $ref: '#/components/schemas/MatrixReference' presentation: $ref: '#/components/schemas/MatrixPresentationState' supportSurface: $ref: '#/components/schemas/MatrixSupportSurfaceState' appliedFilters: $ref: '#/components/schemas/MatrixFilterDraft' draftFilters: $ref: '#/components/schemas/MatrixFilterDraft' tenantSummaries: type: array items: $ref: '#/components/schemas/MatrixTenantSummary' denseRows: type: array items: $ref: '#/components/schemas/DenseSubjectRowView' compactResults: type: array items: $ref: '#/components/schemas/CompactSubjectResultView' $ref: '#/components/schemas/CompactSubjectResultView'