From b0b50885685df9114fcb376cfe24f2fbe8fd4aae Mon Sep 17 00:00:00 2001 From: ahmido Date: Tue, 23 Jun 2026 15:12:38 +0000 Subject: [PATCH] feat: add evidence anchor runtime closure contract proofs (#474) Automated PR provided by Codex via Gitea API. Co-authored-by: Ahmed Darrazi Reviewed-on: https://git.cloudarix.de/ahmido/TenantAtlas/pulls/474 --- .../Pages/Monitoring/EvidenceOverview.php | 259 ++++++---- .../Pages/Reviews/CustomerReviewWorkspace.php | 188 ++++--- .../Evidence/EvidenceAnchorResolver.php | 61 ++- .../ArtifactTruthPresenter.php | 1 + .../monitoring/evidence-overview.blade.php | 2 +- .../customer-review-workspace.blade.php | 4 +- ...pec316WorkspaceHubClearFilterSmokeTest.php | 4 +- ...ReviewWorkspaceProductizationSmokeTest.php | 3 +- ...EvidenceReviewPackProductFlowSmokeTest.php | 14 +- ...merReviewWorkspaceConsumptionSmokeTest.php | 27 +- ...c347ReviewPackOutputReadinessSmokeTest.php | 19 +- ...ec349OutputResolutionGuidanceSmokeTest.php | 19 +- ...350OperatorResolutionGuidanceSmokeTest.php | 4 +- ...351ReviewOutputResolveActionsSmokeTest.php | 52 +- ...pec385EvidenceReviewReadinessSmokeTest.php | 5 +- .../Spec392CustomerOutputGatingSmokeTest.php | 12 +- ...enceCurrentnessRuntimeClosureSmokeTest.php | 248 +++++++++ ...c322WorkspaceEnvironmentBrowserHarness.php | 2 +- .../Evidence/EvidenceOverviewPageTest.php | 74 ++- ...ec337EvidenceReviewPackProductFlowTest.php | 42 +- ...CustomerReviewWorkspaceConsumptionTest.php | 20 +- ...omerReviewWorkspaceOutputReadinessTest.php | 24 +- ...tomerReviewWorkspaceOutputGuidanceTest.php | 9 +- ...ReviewWorkspaceGuidanceIntegrationTest.php | 14 +- ...erReviewWorkspaceBaselineReadinessTest.php | 7 +- .../AuthorizationSemanticsTest.php | 7 +- ...idenceOverviewWorkspaceHubContractTest.php | 6 +- ...denceAuditDisclosureProductizationTest.php | 16 +- ...3EvidenceCurrentnessRuntimeClosureTest.php | 318 ++++++++++++ .../WorkspaceHubClearFilterContractTest.php | 4 +- ...kspaceHubEnvironmentFilterContractTest.php | 4 +- .../CustomerReviewWorkspacePackAccessTest.php | 25 +- .../CustomerReviewWorkspacePageTest.php | 27 +- .../Spec393EvidenceAnchorResolverTest.php | 2 +- .../artifacts/screenshots/.gitkeep | 1 + ...nce-currentness-operation-proof-failed.png | Bin 0 -> 345604 bytes .../checklists/requirements.md | 79 +++ .../implementation-report.md | 313 ++++++++++++ .../plan.md | 279 +++++++++++ .../spec.md | 473 ++++++++++++++++++ .../tasks.md | 200 ++++++++ 41 files changed, 2555 insertions(+), 313 deletions(-) create mode 100644 apps/platform/tests/Browser/Spec403EvidenceCurrentnessRuntimeClosureSmokeTest.php create mode 100644 apps/platform/tests/Feature/Monitoring/Spec403EvidenceCurrentnessRuntimeClosureTest.php create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/.gitkeep create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/spec403-evidence-currentness-operation-proof-failed.png create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/checklists/requirements.md create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/implementation-report.md create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/plan.md create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/spec.md create mode 100644 specs/403-evidence-anchor-currentness-runtime-closure/tasks.md diff --git a/apps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.php b/apps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.php index e110821c..f6fee5d0 100644 --- a/apps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.php +++ b/apps/platform/app/Filament/Pages/Monitoring/EvidenceOverview.php @@ -613,7 +613,7 @@ private function evidenceReviewPackReadinessFlow( ?EnvironmentReview $review, ?ManagedEnvironment $tenant, ): array { - $sourceState = $tenant instanceof ManagedEnvironment ? 'Available' : 'Unavailable'; + $sourceState = $tenant instanceof ManagedEnvironment ? 'Ready' : 'Not configured'; $snapshotState = $this->snapshotFlowState($snapshot); $storedReportState = $this->storedReportFlowState($snapshot, $storedReport); $reviewPackState = $this->reviewPackFlowState($snapshot, $storedReport, $reviewPack); @@ -621,7 +621,7 @@ private function evidenceReviewPackReadinessFlow( $exportState = $this->exportFlowState($snapshot, $reviewPack, $tenant); return [ - $this->flowStep('Source data selected', $sourceState, $sourceState === 'Available' ? 'Environment scope is established from the workspace context.' : 'Select an authorized environment before building customer-safe evidence.', $this->flowTone($sourceState), $state === 'source_unavailable'), + $this->flowStep('Source data selected', $sourceState, $sourceState === 'Ready' ? 'Environment scope is established from the workspace context.' : 'Select an authorized environment before building customer-safe evidence.', $this->flowTone($sourceState), $state === 'source_unavailable'), $this->flowStep('Evidence snapshot', $snapshotState, $this->snapshotFlowDescription($snapshotState), $this->flowTone($snapshotState), in_array($state, ['no_snapshot', 'snapshot_generating', 'snapshot_failed', 'snapshot_stale'], true)), $this->flowStep('Stored report', $storedReportState, $this->storedReportFlowDescription($storedReportState), $this->flowTone($storedReportState), $state === 'report_missing'), $this->flowStep('Review pack', $reviewPackState, $this->reviewPackFlowDescription($reviewPackState), $this->flowTone($reviewPackState), in_array($state, ['pack_required', 'pack_generating', 'pack_failed'], true)), @@ -697,14 +697,14 @@ private function evidenceReviewPackProofItems( : 'Operation proof unavailable. No generation operation is linked to this artifact.'; return [ - $this->proofItem('Source data', $tenant instanceof ManagedEnvironment ? 'Available' : 'Unavailable', $tenant instanceof ManagedEnvironment ? 'Workspace and environment scope are established.' : 'No environment scope is selected.', $tenant instanceof ManagedEnvironment ? 'success' : 'gray'), + $this->proofItem('Source data', $tenant instanceof ManagedEnvironment ? 'Ready' : 'Not configured', $tenant instanceof ManagedEnvironment ? 'Workspace and environment scope are established.' : 'No environment scope is selected.', $tenant instanceof ManagedEnvironment ? 'success' : 'gray'), $this->proofItemFromCard($this->snapshotProofCard($snapshot)), $this->proofItemFromCard($this->storedReportProofCard($storedReport, $tenant)), $this->proofItemFromCard($this->reviewPackProofCard($reviewPack, $snapshot)), - $this->proofItem('Operation proof', $operationRun instanceof OperationRun ? $this->operationProofState($operationRun) : 'Unavailable', $operationDescription, $operationRun instanceof OperationRun ? $this->operationProofTone($operationRun) : 'gray', $operationRun instanceof OperationRun ? OperationRunLinks::tenantlessView($operationRun) : null, $operationRun instanceof OperationRun ? OperationRunLinks::openLabel() : null), + $this->proofItem('Operation proof', $operationRun instanceof OperationRun ? $this->operationProofState($operationRun) : 'Not configured', $operationDescription, $operationRun instanceof OperationRun ? $this->operationProofTone($operationRun) : 'gray'), $this->proofItem('Export artifact', $this->exportFlowState($snapshot, $reviewPack, $tenant), $this->exportProofDescription($reviewPack, $tenant), $this->flowTone($this->exportFlowState($snapshot, $reviewPack, $tenant)), $this->canDownloadReviewPack($reviewPack, $tenant) ? app(ReviewPackService::class)->generateDownloadUrl($reviewPack) : null, $this->canDownloadReviewPack($reviewPack, $tenant) ? 'Download export' : null), $this->proofItem('Customer-safe state', $this->customerSafeFlowState($snapshot, $reviewPack, $review), $this->customerSafeFlowDescription($this->customerSafeFlowState($snapshot, $reviewPack, $review)), $this->flowTone($this->customerSafeFlowState($snapshot, $reviewPack, $review)), $tenant instanceof ManagedEnvironment ? CustomerReviewWorkspace::environmentFilterUrl($tenant) : null, $tenant instanceof ManagedEnvironment ? 'Open customer workspace' : null), - $this->proofItem('Diagnostics', 'Collapsed', 'Raw report metadata, raw evidence payloads, generation diagnostics, export diagnostics, provider diagnostics, stack traces, and internal exceptions stay collapsed by default.', 'gray'), + $this->proofItem('Diagnostics', 'Not configured', 'Raw report metadata, raw evidence payloads, generation diagnostics, export diagnostics, provider diagnostics, stack traces, and internal exceptions stay collapsed by default.', 'gray'), ]; } @@ -725,60 +725,68 @@ private function flowStep(string $label, string $state, string $description, str private function snapshotFlowState(?EvidenceSnapshot $snapshot): string { if (! $snapshot instanceof EvidenceSnapshot) { - return 'Missing'; + return 'Not configured'; + } + + if ($this->snapshotIsExpired($snapshot)) { + return 'Expired'; + } + + if ($this->snapshotHasStaleDimensions($snapshot)) { + return 'Needs attention'; } return match ((string) $snapshot->status) { - EvidenceSnapshotStatus::Queued->value, EvidenceSnapshotStatus::Generating->value => 'Generating', + EvidenceSnapshotStatus::Queued->value, EvidenceSnapshotStatus::Generating->value => 'Running', EvidenceSnapshotStatus::Failed->value => 'Failed', - default => $this->snapshotIsStale($snapshot) ? 'Stale' : 'Available', + default => 'Ready', }; } private function storedReportFlowState(?EvidenceSnapshot $snapshot, ?StoredReport $storedReport): string { - if (! $snapshot instanceof EvidenceSnapshot || in_array($this->snapshotFlowState($snapshot), ['Generating', 'Failed'], true)) { - return 'Unavailable'; + if (! $snapshot instanceof EvidenceSnapshot || in_array($this->snapshotFlowState($snapshot), ['Running', 'Failed', 'Expired'], true)) { + return 'Blocked'; } - return $storedReport instanceof StoredReport ? 'Available' : 'Missing'; + return $storedReport instanceof StoredReport ? 'Ready' : 'Not configured'; } private function reviewPackFlowState(?EvidenceSnapshot $snapshot, ?StoredReport $storedReport, ?ReviewPack $reviewPack): string { if ($reviewPack instanceof ReviewPack) { return match ((string) $reviewPack->status) { - ReviewPackStatus::Queued->value, ReviewPackStatus::Generating->value => 'Generating', + ReviewPackStatus::Queued->value, ReviewPackStatus::Generating->value => 'Running', ReviewPackStatus::Failed->value => 'Failed', - ReviewPackStatus::Ready->value => 'Available', - default => 'Unavailable', + ReviewPackStatus::Ready->value => 'Ready', + default => 'Blocked', }; } - if (! $snapshot instanceof EvidenceSnapshot) { - return 'Unavailable'; + if (! $snapshot instanceof EvidenceSnapshot || ! $storedReport instanceof StoredReport) { + return 'Blocked'; } - return $storedReport instanceof StoredReport ? 'Required' : 'Unavailable'; + return 'Not configured'; } private function customerSafeFlowState(?EvidenceSnapshot $snapshot, ?ReviewPack $reviewPack, ?EnvironmentReview $review): string { if (! $snapshot instanceof EvidenceSnapshot) { - return 'Not ready'; + return 'Not configured'; } if (! $reviewPack instanceof ReviewPack || ! $reviewPack->isReady()) { - return 'Not ready'; + return 'Not configured'; } - return $this->customerSafeOutputReady($review, $reviewPack) ? 'Ready' : 'Needs review'; + return $this->customerSafeOutputReady($review, $reviewPack) ? 'Ready' : 'Needs attention'; } private function exportFlowState(?EvidenceSnapshot $snapshot, ?ReviewPack $reviewPack, ?ManagedEnvironment $tenant): string { if (! $snapshot instanceof EvidenceSnapshot || ! $reviewPack instanceof ReviewPack) { - return 'Unavailable'; + return 'Not configured'; } if ((string) $reviewPack->status === ReviewPackStatus::Failed->value) { @@ -786,22 +794,23 @@ private function exportFlowState(?EvidenceSnapshot $snapshot, ?ReviewPack $revie } if (! $reviewPack->isReady()) { - return 'Unavailable'; + return 'Blocked'; } return $this->reviewPackHasExportArtifact($reviewPack) && $this->canDownloadReviewPack($reviewPack, $tenant) - ? 'Available' - : 'Required'; + ? 'Ready' + : 'Needs attention'; } private function snapshotFlowDescription(string $state): string { return match ($state) { - 'Available' => 'Snapshot proof exists.', - 'Missing' => 'No snapshot in scope.', - 'Generating' => 'Generation is running.', + 'Ready' => 'Snapshot proof exists.', + 'Not configured' => 'No snapshot in scope.', + 'Running' => 'Generation is running.', 'Failed' => 'Generation failed.', - 'Stale' => 'Evidence is stale or expired.', + 'Expired' => 'Evidence has expired.', + 'Needs attention' => 'Evidence has stale dimensions.', default => 'Evidence snapshot state is unavailable.', }; } @@ -809,8 +818,8 @@ private function snapshotFlowDescription(string $state): string private function storedReportFlowDescription(string $state): string { return match ($state) { - 'Available' => 'Stored report exists.', - 'Missing' => 'No report for this output.', + 'Ready' => 'Stored report exists.', + 'Not configured' => 'No report for this output.', default => 'Depends on snapshot availability.', }; } @@ -818,9 +827,9 @@ private function storedReportFlowDescription(string $state): string private function reviewPackFlowDescription(string $state): string { return match ($state) { - 'Available' => 'Review pack exists.', - 'Required' => 'Generate a review pack.', - 'Generating' => 'Generation is running.', + 'Ready' => 'Review pack exists.', + 'Not configured' => 'Generate a review pack.', + 'Running' => 'Generation is running.', 'Failed' => 'Generation failed.', default => 'Blocked by earlier proof.', }; @@ -830,8 +839,8 @@ private function customerSafeFlowDescription(string $state): string { return match ($state) { 'Ready' => 'Published review backs current export pack.', - 'Needs review' => 'Readiness is not confirmed.', - 'Not ready' => 'Customer-safe output is not ready.', + 'Needs attention' => 'Readiness is not confirmed.', + 'Not configured' => 'Customer-safe output is not ready.', default => 'Customer-safe output readiness is unavailable.', }; } @@ -839,8 +848,8 @@ private function customerSafeFlowDescription(string $state): string private function exportFlowDescription(string $state): string { return match ($state) { - 'Available' => 'Authorized download is available.', - 'Required' => 'Export file is missing or unauthorized.', + 'Ready' => 'Authorized download is available.', + 'Needs attention' => 'Export file is missing or unauthorized.', 'Failed' => 'The linked review-pack export failed.', default => 'No generated export is available.', }; @@ -849,9 +858,10 @@ private function exportFlowDescription(string $state): string private function flowTone(string $state): string { return match ($state) { - 'Available', 'Ready', 'Generated' => 'success', - 'Generating' => 'info', - 'Missing', 'Required', 'Stale', 'Needs review', 'Not ready' => 'warning', + 'Ready' => 'success', + 'Historical', 'Running' => 'info', + 'Not configured', 'Needs attention', 'Expired' => 'warning', + 'Blocked' => 'danger', 'Failed' => 'danger', default => 'gray', }; @@ -859,18 +869,59 @@ private function flowTone(string $state): string private function snapshotIsStale(EvidenceSnapshot $snapshot): bool { - if ((string) $snapshot->status === EvidenceSnapshotStatus::Expired->value) { - return true; - } + return $this->snapshotIsExpired($snapshot) + || $this->snapshotHasStaleDimensions($snapshot); + } - if ($snapshot->expires_at instanceof \DateTimeInterface && $snapshot->expires_at->isPast()) { - return true; - } + private function snapshotIsExpired(EvidenceSnapshot $snapshot): bool + { + return (string) $snapshot->status === EvidenceSnapshotStatus::Expired->value + || ($snapshot->expires_at instanceof \DateTimeInterface && $snapshot->expires_at->isPast()); + } + private function snapshotHasStaleDimensions(EvidenceSnapshot $snapshot): bool + { return $snapshot->completenessState() === EvidenceCompletenessState::Stale || (int) data_get($snapshot->summary ?? [], 'stale_dimensions', 0) > 0; } + private function snapshotHasUsableCurrentContent(EvidenceSnapshot $snapshot, ?ArtifactTruthEnvelope $truth = null): bool + { + $truth ??= $this->snapshotTruth($snapshot); + + return $truth->contentState === 'trusted' + && $truth->freshnessState === 'current' + && (int) data_get($snapshot->summary ?? [], 'dimension_count', 0) > 0; + } + + private function snapshotProofState(EvidenceSnapshot $snapshot): string + { + if ($this->snapshotIsExpired($snapshot)) { + return 'Expired'; + } + + return match ((string) $snapshot->status) { + EvidenceSnapshotStatus::Queued->value, EvidenceSnapshotStatus::Generating->value => 'Running', + EvidenceSnapshotStatus::Failed->value => 'Failed', + EvidenceSnapshotStatus::Superseded->value => 'Historical', + default => $this->snapshotHasUsableCurrentContent($snapshot) ? 'Ready' : 'Needs attention', + }; + } + + private function evidenceInventoryOutcomeState(EvidenceSnapshot $snapshot, ArtifactTruthEnvelope $truth): string + { + if ($this->snapshotIsExpired($snapshot)) { + return 'Expired'; + } + + return match ((string) $snapshot->status) { + EvidenceSnapshotStatus::Queued->value, EvidenceSnapshotStatus::Generating->value => 'Running', + EvidenceSnapshotStatus::Failed->value => 'Failed', + EvidenceSnapshotStatus::Superseded->value => 'Historical', + default => $this->snapshotHasUsableCurrentContent($snapshot, $truth) ? 'Ready' : 'Needs attention', + }; + } + private function reviewPackHasExportArtifact(?ReviewPack $reviewPack): bool { if (! $reviewPack instanceof ReviewPack || ! $reviewPack->isReady()) { @@ -948,13 +999,18 @@ private function proofItemFromCard(array $card): array private function operationProofState(OperationRun $operationRun): string { - if ((string) $operationRun->outcome === OperationRunOutcome::Failed->value) { - return 'Failed'; + if (in_array((string) $operationRun->status, [OperationRunStatus::Queued->value, OperationRunStatus::Running->value], true)) { + return 'Running'; } - return in_array((string) $operationRun->status, [OperationRunStatus::Queued->value, OperationRunStatus::Running->value], true) - ? 'Generating' - : 'Available'; + return match ((string) $operationRun->outcome) { + OperationRunOutcome::Succeeded->value => 'Historical', + OperationRunOutcome::PartiallySucceeded->value => 'Needs attention', + OperationRunOutcome::Blocked->value => 'Blocked', + OperationRunOutcome::Failed->value, + OperationRunOutcome::Cancelled->value => 'Failed', + default => 'Needs attention', + }; } private function operationProofTone(OperationRun $operationRun): string @@ -994,7 +1050,7 @@ private function decisionEvidenceSummary( $parts[] = 'Export: '.$this->exportFlowState($snapshot, $reviewPack, $tenant); if ($operationRun instanceof OperationRun) { - $parts[] = OperationRunLinks::identifier($operationRun); + $parts[] = 'Operation proof: '.$this->operationProofState($operationRun); } return implode(' ยท ', $parts); @@ -1034,8 +1090,10 @@ private function decisionActionDescription(string $state, ?array $primaryAction) return match ($state) { 'no_snapshot' => 'Creates the evidence snapshot required before reports or review packs can be trusted.', - 'snapshot_generating', 'pack_generating' => 'Opens the linked operation so progress can be verified before using the output.', - 'snapshot_failed', 'pack_failed' => 'Opens failed operation proof before retrying or sharing any output.', + 'snapshot_generating' => 'Evidence generation is still running; operation history stays in technical monitoring.', + 'snapshot_failed' => 'Evidence generation failed; operation history stays in technical monitoring.', + 'pack_generating' => 'Opens the review-pack context while generation proof stays in technical monitoring.', + 'pack_failed' => 'Opens the review-pack context before retrying or sharing any output.', 'snapshot_stale' => 'Opens the stale snapshot so evidence can be refreshed from the correct scope.', 'report_missing' => 'Opens snapshot proof; report generation remains on the supported report surface.', 'pack_required' => 'Opens the environment review-pack surface where generation stays capability-gated.', @@ -1180,12 +1238,10 @@ private function primaryEvidenceAction( ?ManagedEnvironment $tenant, ?OperationRun $operationRun, ): ?array { - if (in_array($state, ['snapshot_generating', 'snapshot_failed', 'pack_generating', 'pack_failed'], true) && $operationRun instanceof OperationRun) { + if (in_array($state, ['pack_generating', 'pack_failed'], true) && $reviewPack instanceof ReviewPack && $reviewPack->tenant instanceof ManagedEnvironment) { return [ - 'label' => $state === 'snapshot_generating' || $state === 'pack_generating' - ? 'View operation progress' - : 'Review operation', - 'url' => OperationRunLinks::tenantlessView($operationRun), + 'label' => 'Open review pack', + 'url' => ReviewPackResource::getUrl('view', ['record' => $reviewPack], tenant: $reviewPack->tenant, panel: 'admin'), ]; } @@ -1271,13 +1327,6 @@ private function primaryEvidenceAction( ]; } - if ($operationRun instanceof OperationRun) { - return [ - 'label' => OperationRunLinks::openLabel(), - 'url' => OperationRunLinks::tenantlessView($operationRun), - ]; - } - return null; } @@ -1286,21 +1335,9 @@ private function primaryEvidenceAction( */ private function currentEvidenceActionForSnapshot(EvidenceSnapshot $snapshot): ?array { - $tenant = $snapshot->tenant; - $workspace = $snapshot->workspace; - $user = auth()->user(); + $anchor = $this->currentAnchorForSnapshot($snapshot); - if (! $tenant instanceof ManagedEnvironment || ! $workspace instanceof Workspace) { - return null; - } - - $anchor = $this->evidenceAnchors()->currentForScope( - $workspace, - $tenant, - $user instanceof User ? $user : null, - ); - - if (! $anchor->canLink || ! is_string($anchor->targetRoute)) { + if (! $anchor instanceof EvidenceAnchorResult || ! $anchor->canLink || ! is_string($anchor->targetRoute)) { return null; } @@ -1332,7 +1369,7 @@ private function snapshotProofCard(?EvidenceSnapshot $snapshot): array if (! $snapshot instanceof EvidenceSnapshot) { return $this->unavailableProofCard( 'Current evidence', - 'Not generated', + 'Not configured', 'No complete active evidence snapshot is available in this scope.', 'gray', ); @@ -1341,15 +1378,16 @@ private function snapshotProofCard(?EvidenceSnapshot $snapshot): array $outcome = $this->snapshotOutcome($snapshot); $isEmptySnapshot = $this->isEmptyEvidenceSnapshot($snapshot); $anchor = $this->currentAnchorForSnapshot($snapshot); + $state = $this->snapshotProofState($snapshot); return [ 'label' => 'Current evidence', - 'value' => $isEmptySnapshot ? 'Proof incomplete' : $outcome->primaryLabel, - 'path_state' => $isEmptySnapshot ? 'Empty' : $outcome->primaryLabel, + 'value' => $state, + 'path_state' => $state, 'description' => $isEmptySnapshot ? 'A proof record exists, but no usable captured evidence is available yet.' : $this->productSafeEvidenceReason($outcome->primaryReason), - 'color' => $outcome->primaryBadge->color, + 'color' => $this->flowTone($state), 'url' => $anchor instanceof EvidenceAnchorResult && $anchor->canLink ? $anchor->targetRoute : null, 'action_label' => $anchor instanceof EvidenceAnchorResult && $anchor->canLink ? 'View internal evidence details' @@ -1368,11 +1406,15 @@ private function currentAnchorForSnapshot(EvidenceSnapshot $snapshot): ?Evidence return null; } - return $this->evidenceAnchors()->currentForScope( + $anchor = $this->evidenceAnchors()->currentForScope( $workspace, $tenant, $user instanceof User ? $user : null, ); + + return (int) ($anchor->evidenceSnapshotId ?? 0) === (int) $snapshot->getKey() + ? $anchor + : null; } /** @@ -1383,7 +1425,7 @@ private function reviewPackProofCard(?ReviewPack $reviewPack, ?EvidenceSnapshot if (! $reviewPack instanceof ReviewPack) { return $this->unavailableProofCard( 'Review pack', - $snapshot instanceof EvidenceSnapshot ? 'Not generated' : 'Not applicable', + $snapshot instanceof EvidenceSnapshot ? 'Not configured' : 'Blocked', $snapshot instanceof EvidenceSnapshot ? 'No review pack has been generated from the current evidence snapshot.' : 'A review pack requires an evidence snapshot first.', @@ -1393,11 +1435,11 @@ private function reviewPackProofCard(?ReviewPack $reviewPack, ?EvidenceSnapshot return [ 'label' => 'Review pack', - 'value' => BadgeRenderer::label(BadgeDomain::ReviewPackStatus)((string) $reviewPack->status), + 'value' => $this->reviewPackProofState($reviewPack), 'description' => $reviewPack->isReady() ? 'Customer-review artifact exists for this evidence path.' : 'Review pack exists but is not ready for sharing.', - 'color' => BadgeRenderer::color(BadgeDomain::ReviewPackStatus)((string) $reviewPack->status), + 'color' => $this->flowTone($this->reviewPackProofState($reviewPack)), 'url' => $reviewPack->tenant instanceof ManagedEnvironment ? ReviewPackResource::getUrl('view', ['record' => $reviewPack], tenant: $reviewPack->tenant, panel: 'admin') : null, @@ -1405,6 +1447,20 @@ private function reviewPackProofCard(?ReviewPack $reviewPack, ?EvidenceSnapshot ]; } + private function reviewPackProofState(ReviewPack $reviewPack): string + { + if ((string) $reviewPack->status === ReviewPackStatus::Expired->value || ($reviewPack->expires_at instanceof \DateTimeInterface && $reviewPack->expires_at->isPast())) { + return 'Expired'; + } + + return match ((string) $reviewPack->status) { + ReviewPackStatus::Queued->value, ReviewPackStatus::Generating->value => 'Running', + ReviewPackStatus::Ready->value => 'Ready', + ReviewPackStatus::Failed->value => 'Failed', + default => 'Blocked', + }; + } + /** * @return array */ @@ -1413,7 +1469,7 @@ private function storedReportProofCard(?StoredReport $storedReport, ?ManagedEnvi if (! $tenant instanceof ManagedEnvironment) { return $this->unavailableProofCard( 'Stored report / export', - 'Not applicable', + 'Not configured', 'Stored report availability is evaluated after an evidence scope exists.', 'gray', ); @@ -1422,7 +1478,7 @@ private function storedReportProofCard(?StoredReport $storedReport, ?ManagedEnvi if (! $storedReport instanceof StoredReport) { return $this->unavailableProofCard( 'Stored report / export', - 'Unavailable', + 'Not configured', 'No repo-supported stored report is available for this environment scope.', 'gray', ); @@ -1430,7 +1486,7 @@ private function storedReportProofCard(?StoredReport $storedReport, ?ManagedEnvi return [ 'label' => 'Stored report / export', - 'value' => 'Available', + 'value' => 'Ready', 'description' => StoredReportResource::reportFamilyReportLabel((string) $storedReport->report_type), 'color' => 'success', 'url' => StoredReportResource::getUrl('view', ['record' => $storedReport], tenant: $tenant, panel: 'admin'), @@ -1446,7 +1502,7 @@ private function operationProofCard(?OperationRun $operationRun): array if (! $operationRun instanceof OperationRun) { return $this->unavailableProofCard( 'Operation proof', - 'Unavailable', + 'Not configured', 'No authorized operation run is linked to the current proof path.', 'gray', ); @@ -1454,10 +1510,10 @@ private function operationProofCard(?OperationRun $operationRun): array return [ 'label' => 'Operation proof', - 'value' => 'Available', - 'description' => OperationRunLinks::identifier($operationRun), - 'color' => 'info', - 'url' => OperationRunLinks::tenantlessView($operationRun), + 'value' => $this->operationProofState($operationRun), + 'description' => 'Authorized operation history is linked to this proof path.', + 'color' => $this->operationProofTone($operationRun), + 'url' => null, 'meta' => $operationRun->completed_at?->diffForHumans() ?? $operationRun->created_at?->diffForHumans() ?? 'Run time unavailable', ]; } @@ -1538,7 +1594,7 @@ private function primaryProofState( } return [ - 'label' => 'Proof incomplete', + 'label' => 'Needs attention', 'color' => 'warning', 'reason' => 'Primary evidence snapshot is empty.', 'impact' => $this->emptySnapshotImpact($reviewPack, $storedReport, $operationRun), @@ -1748,6 +1804,7 @@ private function rowForSnapshot(EvidenceSnapshot $snapshot, array $currentReview $truth = $this->snapshotTruth($snapshot); $outcome = $this->snapshotOutcome($snapshot); $anchor = $this->currentAnchorForSnapshot($snapshot); + $outcomeState = $this->evidenceInventoryOutcomeState($snapshot, $truth); $tenantId = (int) $snapshot->managed_environment_id; $hasCurrentReview = $currentReviewTenantIds[$tenantId] ?? false; $nextStep = ! $hasCurrentReview && $truth->contentState === 'trusted' && $truth->freshnessState === 'current' @@ -1759,13 +1816,13 @@ private function rowForSnapshot(EvidenceSnapshot $snapshot, array $currentReview 'managed_environment_id' => $tenantId, 'snapshot_id' => (int) $snapshot->getKey(), 'generated_at' => $snapshot->generated_at?->toDateTimeString(), - 'artifact_truth_label' => $truth->contentState === 'empty' ? 'Proof incomplete' : $outcome->primaryLabel, - 'artifact_truth_color' => $outcome->primaryBadge->color, + 'artifact_truth_label' => $outcomeState, + 'artifact_truth_color' => $this->flowTone($outcomeState), 'artifact_truth_icon' => $outcome->primaryBadge->icon, 'artifact_truth_explanation' => $this->productSafeEvidenceReason($outcome->primaryReason), 'artifact_truth' => [ - 'label' => $truth->contentState === 'empty' ? 'Proof incomplete' : $outcome->primaryLabel, - 'color' => $outcome->primaryBadge->color, + 'label' => $outcomeState, + 'color' => $this->flowTone($outcomeState), 'icon' => $outcome->primaryBadge->icon, 'explanation' => $this->productSafeEvidenceReason($outcome->primaryReason), ], diff --git a/apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php b/apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php index d50dcf52..2b37ee64 100644 --- a/apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php +++ b/apps/platform/app/Filament/Pages/Reviews/CustomerReviewWorkspace.php @@ -492,7 +492,7 @@ public function latestReviewConsumptionPayload(): ?array 'status_color' => $this->latestReviewStateColor($tenant), 'published_label' => $publishedAt instanceof \DateTimeInterface ? $publishedAt->format('M j, Y H:i') - : __('localization.review.unavailable'), + : $this->canonicalCustomerReviewStateLabel('not_available'), 'package_label' => $packageAvailability['label'], 'package_badge_label' => $this->governancePackageAvailabilityLabel($tenant), 'package_color' => $this->governancePackageAvailabilityColor($tenant), @@ -776,20 +776,19 @@ private function reviewReadinessForTenant( ) : $resolutionCase; $presentedResolutionCase = $this->decorateSuccessorResolutionCase($presentedResolutionCase, $review); + $presentedResolutionCase = array_replace($presentedResolutionCase, [ + 'title' => $this->canonicalWorkspaceResolutionTitle($presentedResolutionCase, $effectiveState), + ]); $primaryAction = is_array($presentedResolutionCase['primary_action'] ?? null) ? $presentedResolutionCase['primary_action'] : null; $secondaryActions = is_array($presentedResolutionCase['secondary_actions'] ?? null) ? $presentedResolutionCase['secondary_actions'] : []; return [ 'question' => __('localization.review.review_pack_output_status'), - 'label' => $followUpOverride - ? $this->workspaceReadinessLabel($effectiveState) - : (string) ($outputGuidance['label'] ?? $this->workspaceReadinessLabel($effectiveState)), + 'label' => $this->workspaceReadinessLabel($effectiveState), 'color' => $followUpOverride ? $this->workspaceReadinessColor($effectiveState) : (string) ($outputGuidance['color'] ?? $this->workspaceReadinessColor($effectiveState)), - 'boundary_label' => $followUpOverride - ? $this->workspaceBoundaryLabel((string) ($outputReadiness['customer_safe_state'] ?? 'requires_review')) - : (string) ($outputGuidance['boundary_label'] ?? $this->workspaceBoundaryLabel((string) ($outputReadiness['customer_safe_state'] ?? 'requires_review'))), + 'boundary_label' => $this->workspaceBoundaryLabel((string) ($outputReadiness['customer_safe_state'] ?? 'requires_review')), 'boundary_color' => $followUpOverride ? $this->workspaceBoundaryColor((string) ($outputReadiness['customer_safe_state'] ?? 'requires_review')) : (string) ($outputGuidance['boundary_color'] ?? $this->workspaceBoundaryColor((string) ($outputReadiness['customer_safe_state'] ?? 'requires_review'))), @@ -838,10 +837,10 @@ private function reviewConsumptionFlowForReview( || $workspaceState !== ReviewPackOutputReadiness::STATE_CUSTOMER_SAFE_READY; $customerOutputLabel = match (true) { - $hasReadyPackage && ! $hasBlockingAttention => __('localization.review.ready'), - $workspaceState === ReviewPackOutputReadiness::STATE_EXPORT_NOT_READY || ! $hasReadyPackage => __('localization.review.not_ready'), - $hasReadyPackage => __('localization.review.needs_review'), - default => __('localization.review.not_ready'), + $hasReadyPackage && ! $hasBlockingAttention => $this->canonicalCustomerReviewStateLabel('available'), + $workspaceState === ReviewPackOutputReadiness::STATE_EXPORT_NOT_READY || ! $hasReadyPackage => $this->canonicalCustomerReviewStateLabel('not_available'), + $hasReadyPackage => $this->canonicalCustomerReviewStateLabel('limited'), + default => $this->canonicalCustomerReviewStateLabel('not_available'), }; $customerOutputColor = match (true) { $hasReadyPackage && ! $hasBlockingAttention => 'success', @@ -858,7 +857,7 @@ private function reviewConsumptionFlowForReview( return [ [ 'title' => __('localization.review.review_data'), - 'label' => __('localization.review.available'), + 'label' => $this->canonicalCustomerReviewStateLabel('available'), 'color' => 'success', 'description' => __('localization.review.review_data_available_description'), 'is_current' => false, @@ -886,7 +885,7 @@ private function reviewConsumptionFlowForReview( ], [ 'title' => __('localization.review.review_pack'), - 'label' => $packageAvailability['label'], + 'label' => $this->canonicalCustomerReviewStateLabel($packageAvailability['state']), 'color' => $this->governancePackageAvailabilityColor($tenant), 'description' => $this->reviewPackDimensionDescription($packageAvailability), 'is_current' => $packageAvailability['state'] !== 'available', @@ -1050,9 +1049,9 @@ private function asideEvidencePathLabel(array $proof): string } return match ($proof['color']) { - 'success', 'info' => __('localization.review.available'), - 'warning' => __('localization.review.limited'), - default => __('localization.review.unavailable'), + 'success', 'info' => $this->canonicalCustomerReviewStateLabel('available'), + 'warning' => $this->canonicalCustomerReviewStateLabel('limited'), + default => $this->canonicalCustomerReviewStateLabel('unavailable'), }; } @@ -1106,11 +1105,11 @@ private function reviewPackProofForReview(array $packageAvailability, ?string $d return [ 'key' => 'review_pack', 'title' => __('localization.review.review_pack'), - 'label' => $packageAvailability['label'], + 'label' => $this->canonicalCustomerReviewStateLabel($packageAvailability['state']), 'color' => match ($packageAvailability['state']) { 'available' => 'success', 'preparing' => 'warning', - 'expired', 'unavailable' => 'danger', + 'expired', 'failed', 'unavailable' => 'danger', default => 'gray', }, 'description' => $packageAvailability['description'], @@ -1167,8 +1166,8 @@ private function exportArtifactProofForReview(array $packageAvailability, ?strin 'key' => 'export_artifact', 'title' => __('localization.review.export_artifact'), 'label' => $downloadUrl !== null - ? __('localization.review.available') - : $packageAvailability['label'], + ? $this->canonicalCustomerReviewStateLabel('available') + : $this->canonicalCustomerReviewStateLabel($packageAvailability['state']), 'color' => $downloadUrl !== null ? 'success' : 'gray', 'description' => $downloadUrl !== null ? __('localization.review.export_artifact_available_description') @@ -1211,8 +1210,8 @@ private function findingPanelForReview(ManagedEnvironment $tenant): array return [ 'status_label' => $open > 0 - ? __('localization.review.needs_review') - : __('localization.review.no_action_needed'), + ? $this->canonicalCustomerReviewStateLabel('limited') + : $this->canonicalCustomerReviewStateLabel('available'), 'status_color' => match (true) { $highImpact > 0 => 'danger', $open > 0 => 'warning', @@ -1405,7 +1404,7 @@ private function acceptedRiskPanelForReview(EnvironmentReview $review, ManagedEn 'color' => $pending > 0 ? 'warning' : 'gray', ], [ - 'label' => __('localization.review.accepted_risks_needs_review'), + 'label' => $this->canonicalCustomerReviewStateLabel('limited'), 'value' => (string) $needsReview, 'color' => $needsReview > 0 ? 'warning' : 'gray', ], @@ -1442,9 +1441,9 @@ private function reviewPackPanelForReview( default => 'unavailable', }; $packageExistsLabel = match ($packageExistsState) { - 'available' => __('localization.review.available'), - 'preparing' => __('localization.review.preparing'), - default => __('localization.review.unavailable'), + 'available' => $this->canonicalCustomerReviewStateLabel('available'), + 'preparing' => $this->canonicalCustomerReviewStateLabel('preparing'), + default => $this->canonicalCustomerReviewStateLabel('unavailable'), }; $packageExistsColor = match ($packageExistsState) { 'available' => 'success', @@ -1454,7 +1453,7 @@ private function reviewPackPanelForReview( $customerSharingState = (string) ($outputReadiness['customer_safe_state'] ?? 'requires_review'); return [ - 'status_label' => $packageAvailability['label'], + 'status_label' => $this->canonicalCustomerReviewStateLabel($packageAvailability['state']), 'status_color' => $this->governancePackageAvailabilityColor($tenant), 'description' => $this->reviewPackPanelDescription($packageAvailability, $outputReadiness), 'sections' => [ @@ -1469,14 +1468,14 @@ private function reviewPackPanelForReview( 'label' => __('localization.review.last_generated'), 'value' => $pack instanceof ReviewPack && $pack->generated_at !== null ? $pack->generated_at->format('M j, Y H:i') - : __('localization.review.unavailable'), + : $this->canonicalCustomerReviewStateLabel('not_available'), 'color' => 'gray', ], [ 'label' => __('localization.review.evidence_source'), 'value' => $snapshot instanceof EvidenceSnapshot && $snapshot->generated_at !== null ? $snapshot->generated_at->format('M j, Y H:i') - : __('localization.review.unavailable'), + : $this->canonicalCustomerReviewStateLabel('not_available'), 'color' => 'gray', ], ], @@ -1485,8 +1484,8 @@ private function reviewPackPanelForReview( 'key' => 'internal_export', 'title' => __('localization.review.internal_export'), 'label' => $downloadUrl !== null - ? __('localization.review.export_ready') - : __('localization.review.export_not_ready'), + ? $this->canonicalCustomerReviewStateLabel('available') + : $this->canonicalCustomerReviewStateLabel('not_available'), 'color' => $downloadUrl !== null ? 'success' : ($packageAvailability['state'] === 'preparing' ? 'warning' : 'gray'), @@ -1495,8 +1494,8 @@ private function reviewPackPanelForReview( [ 'label' => __('localization.review.export_availability'), 'value' => $downloadUrl !== null - ? __('localization.review.export_ready') - : __('localization.review.export_not_ready'), + ? $this->canonicalCustomerReviewStateLabel('available') + : $this->canonicalCustomerReviewStateLabel('not_available'), 'color' => $downloadUrl !== null ? 'success' : 'gray', ], [ @@ -1534,14 +1533,14 @@ private function reviewPackPanelForReview( 'label' => __('localization.review.protected_values'), 'value' => (bool) ($outputReadiness['protected_values_hidden'] ?? true) ? __('localization.review.protected_values_hidden') - : __('localization.review.unavailable'), + : $this->canonicalCustomerReviewStateLabel('blocked'), 'color' => (bool) ($outputReadiness['protected_values_hidden'] ?? true) ? 'success' : 'warning', ], [ 'label' => __('localization.review.disclosure'), 'value' => (bool) ($outputReadiness['disclosure_present'] ?? false) ? __('localization.review.disclosure_present') - : __('localization.review.unavailable'), + : $this->canonicalCustomerReviewStateLabel('not_available'), 'color' => (bool) ($outputReadiness['disclosure_present'] ?? false) ? 'success' : 'warning', ], ], @@ -1595,22 +1594,22 @@ private function disclosureRuleRows(): array return [ [ 'label' => __('localization.review.disclosure_decision'), - 'value' => __('localization.review.disclosure_visible'), + 'value' => $this->canonicalCustomerReviewStateLabel('available'), 'color' => 'info', ], [ 'label' => __('localization.review.disclosure_evidence'), - 'value' => __('localization.review.disclosure_visible'), + 'value' => $this->canonicalCustomerReviewStateLabel('available'), 'color' => 'info', ], [ 'label' => __('localization.review.disclosure_diagnostics'), - 'value' => __('localization.review.disclosure_collapsed'), + 'value' => $this->canonicalCustomerReviewStateLabel('not_available'), 'color' => 'gray', ], [ 'label' => __('localization.review.disclosure_raw_support'), - 'value' => __('localization.review.disclosure_hidden'), + 'value' => $this->canonicalCustomerReviewStateLabel('blocked'), 'color' => 'gray', ], ]; @@ -2017,9 +2016,19 @@ private function latestReviewStateLabel(ManagedEnvironment $tenant): string } return match ($this->workspaceCustomerOutputState($tenant)) { - 'ready' => __('localization.review.ready'), - 'not_ready' => __('localization.review.not_ready'), - default => __('localization.review.needs_review'), + 'ready' => $this->canonicalCustomerReviewStateLabel('available'), + 'not_ready' => $this->latestReviewNotReadyStateLabel($tenant), + default => $this->canonicalCustomerReviewStateLabel('limited'), + }; + } + + private function latestReviewNotReadyStateLabel(ManagedEnvironment $tenant): string + { + return match ($this->governancePackageAvailability($tenant)['state']) { + 'expired' => $this->canonicalCustomerReviewStateLabel('expired'), + 'failed' => $this->canonicalCustomerReviewStateLabel('failed'), + 'blocked' => $this->canonicalCustomerReviewStateLabel('blocked'), + default => $this->canonicalCustomerReviewStateLabel('not_available'), }; } @@ -2033,7 +2042,7 @@ private function latestReviewStateColor(ManagedEnvironment $tenant): string return match ($this->workspaceCustomerOutputState($tenant)) { 'ready' => 'success', - 'not_ready' => in_array($this->governancePackageAvailability($tenant)['state'], ['expired', 'unavailable'], true) + 'not_ready' => in_array($this->governancePackageAvailability($tenant)['state'], ['expired', 'failed', 'blocked'], true) ? 'danger' : 'gray', default => 'warning', @@ -2124,8 +2133,8 @@ private function governancePackageAvailability(ManagedEnvironment $tenant): arra if (! $review instanceof EnvironmentReview) { return [ - 'state' => 'unavailable', - 'label' => __('localization.review.governance_package_unavailable'), + 'state' => 'not_available', + 'label' => $this->canonicalCustomerReviewStateLabel('not_available'), 'description' => __('localization.review.no_published_review_available'), ]; } @@ -2136,15 +2145,15 @@ private function governancePackageAvailability(ManagedEnvironment $tenant): arra if (! $pack instanceof ReviewPack) { return [ 'state' => 'not_available', - 'label' => __('localization.review.review_pack_not_available_yet'), + 'label' => $this->canonicalCustomerReviewStateLabel('not_available'), 'description' => __('localization.review.review_pack_not_available_yet_description'), ]; } if (! $user instanceof User || ! $user->can(Capabilities::REVIEW_PACK_VIEW, $tenant)) { return [ - 'state' => 'unavailable', - 'label' => __('localization.review.unavailable'), + 'state' => 'blocked', + 'label' => $this->canonicalCustomerReviewStateLabel('blocked'), 'description' => __('localization.review.review_pack_unavailable_customer_description'), ]; } @@ -2152,7 +2161,7 @@ private function governancePackageAvailability(ManagedEnvironment $tenant): arra if ($pack->status === ReviewPackStatus::Expired->value || ($pack->expires_at !== null && $pack->expires_at->isPast())) { return [ 'state' => 'expired', - 'label' => __('localization.review.governance_package_expired'), + 'label' => $this->canonicalCustomerReviewStateLabel('expired'), 'description' => __('localization.review.governance_package_expired_description'), ]; } @@ -2160,15 +2169,15 @@ private function governancePackageAvailability(ManagedEnvironment $tenant): arra if (in_array($pack->status, [ReviewPackStatus::Queued->value, ReviewPackStatus::Generating->value], true)) { return [ 'state' => 'preparing', - 'label' => __('localization.review.review_pack_preparing'), + 'label' => $this->canonicalCustomerReviewStateLabel('preparing'), 'description' => __('localization.review.review_pack_preparing_description'), ]; } if ($pack->status !== ReviewPackStatus::Ready->value) { return [ - 'state' => 'unavailable', - 'label' => __('localization.review.unavailable'), + 'state' => 'failed', + 'label' => $this->canonicalCustomerReviewStateLabel('failed'), 'description' => __('localization.review.review_pack_unavailable_customer_description'), ]; } @@ -2176,27 +2185,21 @@ private function governancePackageAvailability(ManagedEnvironment $tenant): arra if (! filled($pack->file_path) || ! filled($pack->file_disk)) { return [ 'state' => 'not_available', - 'label' => __('localization.review.review_pack_not_available_yet'), + 'label' => $this->canonicalCustomerReviewStateLabel('not_available'), 'description' => __('localization.review.review_pack_not_available_yet_description'), ]; } return [ 'state' => 'available', - 'label' => __('localization.review.available'), + 'label' => $this->canonicalCustomerReviewStateLabel('available'), 'description' => __('localization.review.review_pack_available_customer_description'), ]; } private function governancePackageAvailabilityLabel(ManagedEnvironment $tenant): string { - return match ($this->governancePackageAvailability($tenant)['state']) { - 'available' => __('localization.review.available'), - 'not_available' => __('localization.review.review_pack_not_available_yet'), - 'preparing' => __('localization.review.review_pack_preparing'), - 'expired' => __('localization.review.expired'), - default => __('localization.review.unavailable'), - }; + return (string) $this->governancePackageAvailability($tenant)['label']; } private function governancePackageAvailabilityColor(ManagedEnvironment $tenant): string @@ -2204,7 +2207,7 @@ private function governancePackageAvailabilityColor(ManagedEnvironment $tenant): return match ($this->governancePackageAvailability($tenant)['state']) { 'available' => 'success', 'preparing' => 'warning', - 'expired', 'unavailable' => 'danger', + 'expired', 'failed', 'blocked' => 'danger', default => 'gray', }; } @@ -2389,7 +2392,7 @@ private function evidenceBasisLabel(string $state): string 'stale' => __('localization.review.evidence_basis_stale'), 'incomplete' => __('localization.review.evidence_basis_incomplete'), 'not_generated' => __('localization.review.evidence_basis_not_generated'), - default => __('localization.review.evidence_basis_unavailable'), + default => $this->canonicalCustomerReviewStateLabel('not_available'), }; } @@ -2516,13 +2519,34 @@ private function effectiveWorkspaceReadinessState(array $outputReadiness, bool $ private function workspaceReadinessLabel(string $state): string { return match ($state) { - ReviewPackOutputReadiness::STATE_CUSTOMER_SAFE_READY => __('localization.review.customer_safe_review_pack_ready'), - ReviewPackOutputReadiness::STATE_INTERNAL_REVIEW_PACKAGE_AVAILABLE => __('localization.review.internal_review_package_available'), - ReviewPackOutputReadiness::STATE_EXPORT_NOT_READY => __('localization.review.export_not_ready'), - default => __('localization.review.published_with_limitations'), + ReviewPackOutputReadiness::STATE_CUSTOMER_SAFE_READY => $this->canonicalCustomerReviewStateLabel('available'), + ReviewPackOutputReadiness::STATE_EXPORT_NOT_READY => $this->canonicalCustomerReviewStateLabel('not_available'), + default => $this->canonicalCustomerReviewStateLabel('limited'), }; } + /** + * @param array $resolutionCase + */ + private function canonicalWorkspaceResolutionTitle(array $resolutionCase, string $effectiveState): string + { + $title = (string) ($resolutionCase['title'] ?? ''); + $legacyStatusTitles = [ + __('localization.review.output_not_customer_ready'), + __('localization.review.customer_safe_review_pack_ready'), + __('localization.review.internal_review_package_available'), + __('localization.review.export_not_ready'), + __('localization.review.published_with_limitations'), + __('localization.review.requires_review'), + ]; + + if ($title === '' || in_array($title, $legacyStatusTitles, true)) { + return $this->workspaceReadinessLabel($effectiveState); + } + + return $title; + } + private function workspaceReadinessColor(string $state): string { return match ($state) { @@ -2535,10 +2559,9 @@ private function workspaceReadinessColor(string $state): string private function workspaceBoundaryLabel(string $state): string { return match ($state) { - 'customer_safe_ready' => __('localization.review.customer_safe'), - 'internal_only' => __('localization.review.internal_only'), - 'not_ready' => __('localization.review.not_ready'), - default => __('localization.review.requires_review'), + 'customer_safe_ready' => $this->canonicalCustomerReviewStateLabel('available'), + 'not_ready' => $this->canonicalCustomerReviewStateLabel('not_available'), + default => $this->canonicalCustomerReviewStateLabel('limited'), }; } @@ -2877,7 +2900,7 @@ private function sectionCompletenessLabel(array $sectionSummary): string $requiredLimited = (int) ($sectionSummary['required_limited'] ?? 0); if ($requiredTotal <= 0) { - return __('localization.review.unavailable'); + return $this->canonicalCustomerReviewStateLabel('not_available'); } if ($requiredLimited > 0) { @@ -3050,10 +3073,23 @@ private function evidenceStatusState(ManagedEnvironment $tenant): string private function evidenceStatusLabelForState(string $state): string { return match ($state) { - 'available' => __('localization.review.available'), - 'restricted' => __('localization.review.restricted'), - 'expired' => __('localization.review.expired'), - default => __('localization.review.pending'), + 'available' => $this->canonicalCustomerReviewStateLabel('available'), + 'restricted' => $this->canonicalCustomerReviewStateLabel('blocked'), + 'expired' => $this->canonicalCustomerReviewStateLabel('expired'), + default => $this->canonicalCustomerReviewStateLabel('not_available'), + }; + } + + private function canonicalCustomerReviewStateLabel(string $state): string + { + return match ($state) { + 'available' => 'Ready', + 'preparing' => 'Running', + 'failed' => 'Failed', + 'expired' => 'Expired', + 'limited' => 'Needs attention', + 'blocked', 'restricted' => 'Blocked', + default => 'Not configured', }; } diff --git a/apps/platform/app/Services/Evidence/EvidenceAnchorResolver.php b/apps/platform/app/Services/Evidence/EvidenceAnchorResolver.php index dd8edc44..676dbb4d 100644 --- a/apps/platform/app/Services/Evidence/EvidenceAnchorResolver.php +++ b/apps/platform/app/Services/Evidence/EvidenceAnchorResolver.php @@ -60,10 +60,10 @@ public function currentForScope(Workspace $workspace, ?ManagedEnvironment $envir ? EvidenceAnchorResult::STATE_NEEDS_ATTENTION : EvidenceAnchorResult::STATE_NOT_CONFIGURED, primaryReason: $hasAnySnapshot - ? 'No complete active evidence snapshot is available for this environment.' + ? 'No complete active evidence snapshot with usable captured evidence is available for this environment.' : 'No evidence snapshot is configured for this environment.', blockingReasons: $hasAnySnapshot - ? ['Only active, complete, non-expired evidence can be used as current evidence.'] + ? ['Only active, complete, non-empty, non-expired evidence can be used as current evidence.'] : ['Generate evidence before opening a current evidence detail.'], displayLabel: 'Current evidence', ); @@ -100,11 +100,21 @@ public function currentSnapshotForEnvironment(ManagedEnvironment $environment): public function currentSnapshotQuery(Workspace $workspace, ManagedEnvironment $environment): Builder { - return EvidenceSnapshot::query() + $query = EvidenceSnapshot::query() ->where('workspace_id', (int) $workspace->getKey()) ->where('managed_environment_id', (int) $environment->getKey()) ->where('status', EvidenceSnapshotStatus::Active->value) ->where('completeness_state', EvidenceCompletenessState::Complete->value) + ->where(function (Builder $query): void { + $query + ->whereNull('summary->missing_dimensions') + ->orWhere('summary->missing_dimensions', 0); + }) + ->where(function (Builder $query): void { + $query + ->whereNull('summary->stale_dimensions') + ->orWhere('summary->stale_dimensions', 0); + }) ->where(function (Builder $query): void { $query ->whereNull('expires_at') @@ -113,6 +123,10 @@ public function currentSnapshotQuery(Workspace $workspace, ManagedEnvironment $e ->orderByRaw('generated_at IS NULL') ->orderByDesc('generated_at') ->orderByDesc('id'); + + $this->whereHasUsableCapturedDimensions($query); + + return $query; } public function forReviewPackDraft(ReviewPack $reviewPack, ?User $actor = null): EvidenceAnchorResult @@ -376,6 +390,14 @@ private function stateForSnapshot(EvidenceSnapshot $snapshot, bool $releaseBound return EvidenceAnchorResult::STATE_NEEDS_ATTENTION; } + if ($this->hasMissingOrStaleDimensions($snapshot)) { + return EvidenceAnchorResult::STATE_NEEDS_ATTENTION; + } + + if ($this->hasNoUsableCapturedEvidence($snapshot)) { + return EvidenceAnchorResult::STATE_NEEDS_ATTENTION; + } + if (! $releaseBound && (string) $snapshot->status !== EvidenceSnapshotStatus::Active->value) { return EvidenceAnchorResult::STATE_BLOCKED; } @@ -397,6 +419,14 @@ private function blockingReasonForSnapshot(EvidenceSnapshot $snapshot, bool $rel return 'Evidence completeness requires attention.'; } + if ($this->hasMissingOrStaleDimensions($snapshot)) { + return 'Evidence dimensions require attention.'; + } + + if ($this->hasNoUsableCapturedEvidence($snapshot)) { + return 'Evidence contains no usable captured content.'; + } + if (! $releaseBound && (string) $snapshot->status !== EvidenceSnapshotStatus::Active->value) { return 'Evidence is not an active current snapshot.'; } @@ -415,6 +445,31 @@ private function isExpired(EvidenceSnapshot $snapshot): bool || ($snapshot->expires_at !== null && $snapshot->expires_at->isPast()); } + private function hasMissingOrStaleDimensions(EvidenceSnapshot $snapshot): bool + { + return (int) data_get($snapshot->summary ?? [], 'missing_dimensions', 0) > 0 + || (int) data_get($snapshot->summary ?? [], 'stale_dimensions', 0) > 0; + } + + /** + * @param Builder $query + */ + private function whereHasUsableCapturedDimensions(Builder $query): void + { + if ($query->getModel()->getConnection()->getDriverName() === 'pgsql') { + $query->whereRaw("COALESCE(CASE WHEN jsonb_typeof(summary->'dimension_count') = 'number' THEN (summary->>'dimension_count')::integer ELSE 0 END, 0) > 0"); + + return; + } + + $query->where('summary->dimension_count', '>', 0); + } + + private function hasNoUsableCapturedEvidence(EvidenceSnapshot $snapshot): bool + { + return (int) data_get($snapshot->summary ?? [], 'dimension_count', 0) <= 0; + } + private function snapshotMatchesArtifactScope(EvidenceSnapshot $snapshot, EnvironmentReview|ReviewPack $artifact): bool { return (int) $snapshot->workspace_id === (int) $artifact->workspace_id diff --git a/apps/platform/app/Support/Ui/GovernanceArtifactTruth/ArtifactTruthPresenter.php b/apps/platform/app/Support/Ui/GovernanceArtifactTruth/ArtifactTruthPresenter.php index ebcefb9e..79f03a42 100644 --- a/apps/platform/app/Support/Ui/GovernanceArtifactTruth/ArtifactTruthPresenter.php +++ b/apps/platform/app/Support/Ui/GovernanceArtifactTruth/ArtifactTruthPresenter.php @@ -343,6 +343,7 @@ private function buildEvidenceSnapshotEnvelope(EvidenceSnapshot $snapshot): Arti $status === 'failed' => 'missing_input', $snapshot->completeness_state === 'missing' => 'missing_input', $snapshot->completeness_state === 'partial' => 'partial', + $missingDimensions > 0 => 'partial', default => 'trusted', }; diff --git a/apps/platform/resources/views/filament/pages/monitoring/evidence-overview.blade.php b/apps/platform/resources/views/filament/pages/monitoring/evidence-overview.blade.php index e9646cf6..43595d32 100644 --- a/apps/platform/resources/views/filament/pages/monitoring/evidence-overview.blade.php +++ b/apps/platform/resources/views/filament/pages/monitoring/evidence-overview.blade.php @@ -207,7 +207,7 @@ class="rounded-xl border border-gray-200 bg-white p-4 text-sm shadow-sm dark:bor data-testid="evidence-disclosure-diagnostics" > - Diagnostics - Collapsed + Diagnostics

diff --git a/apps/platform/resources/views/filament/pages/reviews/customer-review-workspace.blade.php b/apps/platform/resources/views/filament/pages/reviews/customer-review-workspace.blade.php index e9bdc062..b6f31ecf 100644 --- a/apps/platform/resources/views/filament/pages/reviews/customer-review-workspace.blade.php +++ b/apps/platform/resources/views/filament/pages/reviews/customer-review-workspace.blade.php @@ -307,13 +307,13 @@ class="rounded-xl border border-gray-200 bg-white p-4 shadow-sm dark:border-whit

{{ __('localization.review.acknowledged_by') }}
- {{ $acknowledgement['acknowledged_by_label'] ?? __('localization.review.unavailable') }} + {{ $acknowledgement['acknowledged_by_label'] ?? 'Not configured' }}
{{ __('localization.review.acknowledged_at') }}
- {{ $acknowledgement['acknowledged_at_label'] ?? __('localization.review.unavailable') }} + {{ $acknowledgement['acknowledged_at_label'] ?? 'Not configured' }}
diff --git a/apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php b/apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php index 7c53cc9e..666fbca5 100644 --- a/apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php +++ b/apps/platform/tests/Browser/Spec316WorkspaceHubClearFilterSmokeTest.php @@ -19,6 +19,7 @@ use App\Models\ProviderConnection; use App\Models\User; use App\Support\EnvironmentReviewStatus; +use App\Support\Evidence\EvidenceCompletenessState; use App\Support\Evidence\EvidenceSnapshotStatus; use App\Support\OperationRunLinks; use App\Support\Workspaces\WorkspaceContext; @@ -350,7 +351,8 @@ function spec316BrowserEvidenceSnapshot(ManagedEnvironment $environment): Eviden 'managed_environment_id' => (int) $environment->getKey(), 'workspace_id' => (int) $environment->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); } diff --git a/apps/platform/tests/Browser/Spec326CustomerReviewWorkspaceProductizationSmokeTest.php b/apps/platform/tests/Browser/Spec326CustomerReviewWorkspaceProductizationSmokeTest.php index 5421ec90..b1d8e528 100644 --- a/apps/platform/tests/Browser/Spec326CustomerReviewWorkspaceProductizationSmokeTest.php +++ b/apps/platform/tests/Browser/Spec326CustomerReviewWorkspaceProductizationSmokeTest.php @@ -34,7 +34,8 @@ ->assertSee('Accepted risks') ->assertSee('Disclosure rule') ->assertSee('Diagnostics') - ->assertSee('Collapsed') + ->assertSee('Not configured') + ->assertDontSee('Collapsed') ->assertSee('Raw/support') ->assertSee('Review package index') ->assertSee('Decision trail') diff --git a/apps/platform/tests/Browser/Spec337EvidenceReviewPackProductFlowSmokeTest.php b/apps/platform/tests/Browser/Spec337EvidenceReviewPackProductFlowSmokeTest.php index 9bc91e91..766258e4 100644 --- a/apps/platform/tests/Browser/Spec337EvidenceReviewPackProductFlowSmokeTest.php +++ b/apps/platform/tests/Browser/Spec337EvidenceReviewPackProductFlowSmokeTest.php @@ -137,7 +137,7 @@ function spec337BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnviro ->assertScript('document.querySelectorAll("[data-testid=\"evidence-readiness-step\"]").length === 6', true) ->assertScript('(() => { const list = document.querySelector("[data-testid=\"evidence-readiness-flow\"] ol"); return list !== null && getComputedStyle(list).flexDirection === "column"; })()', true) ->assertScript('(() => { const steps = Array.from(document.querySelectorAll("[data-testid=\"evidence-readiness-step\"]")); return steps.length === 6 && steps.every((step) => step.getBoundingClientRect().width >= 300); })()', true) - ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Missing"', true) + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Not configured"', true) ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepCurrentBlocker === "true"', true) ->assertScript('document.querySelector("[data-testid=\"evidence-disclosure-diagnostics\"]")?.open === false', true) ->assertDontSee('raw payload should stay hidden') @@ -153,7 +153,7 @@ function spec337BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnviro ->waitForText('Evidence snapshot required') ->assertDontSee('View operation progress') ->assertDontSee('Spec337 Browser Operator') - ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Missing"', true) + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Not configured"', true) ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepCurrentBlocker === "true"', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); @@ -166,7 +166,7 @@ function spec337BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnviro ->waitForText('Stored report required') ->assertSee('Current evidence') ->assertDontSee('Open evidence snapshot') - ->assertScript('document.querySelector("[data-step-label=\"Stored report\"]")?.dataset.stepState === "Missing"', true) + ->assertScript('document.querySelector("[data-step-label=\"Stored report\"]")?.dataset.stepState === "Not configured"', true) ->assertScript('document.querySelector("[data-step-label=\"Stored report\"]")?.dataset.stepCurrentBlocker === "true"', true) ->assertDontSee('Download export') ->assertNoJavaScriptErrors() @@ -179,7 +179,7 @@ function spec337BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnviro ])) ->waitForText('Review pack required') ->assertSee('Generate review pack') - ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepState === "Required"', true) + ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepState === "Not configured"', true) ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepCurrentBlocker === "true"', true) ->assertScript('document.querySelector("[data-testid=\"evidence-primary-proof-action\"]") instanceof HTMLAnchorElement', true) ->assertNoJavaScriptErrors() @@ -194,9 +194,9 @@ function spec337BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnviro ->assertSee('Download export') ->assertSee('Customer-safe output') ->assertSee('Review pack contents / coverage') - ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepState === "Available"', true) + ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepState === "Ready"', true) ->assertScript('document.querySelector("[data-step-label=\"Customer-safe output\"]")?.dataset.stepState === "Ready"', true) - ->assertScript('document.querySelector("[data-step-label=\"Export / delivery\"]")?.dataset.stepState === "Available"', true) + ->assertScript('document.querySelector("[data-step-label=\"Export / delivery\"]")?.dataset.stepState === "Ready"', true) ->assertScript('Array.from(document.querySelectorAll("[data-testid=\"evidence-review-pack-status-badge\"]")).every((badge) => !badge.innerText.includes("...") && getComputedStyle(badge).overflow !== "hidden" && getComputedStyle(badge).textOverflow !== "ellipsis")', true) ->assertDontSee('Auditor-ready') ->assertDontSee('environment is healthy') @@ -213,7 +213,7 @@ function spec337BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnviro ])) ->waitForText('Export unavailable') ->assertSee('Open review pack') - ->assertScript('document.querySelector("[data-step-label=\"Export / delivery\"]")?.dataset.stepState === "Required"', true) + ->assertScript('document.querySelector("[data-step-label=\"Export / delivery\"]")?.dataset.stepState === "Needs attention"', true) ->assertDontSee('Download export') ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); diff --git a/apps/platform/tests/Browser/Spec342CustomerReviewWorkspaceConsumptionSmokeTest.php b/apps/platform/tests/Browser/Spec342CustomerReviewWorkspaceConsumptionSmokeTest.php index 17eabcca..3a630907 100644 --- a/apps/platform/tests/Browser/Spec342CustomerReviewWorkspaceConsumptionSmokeTest.php +++ b/apps/platform/tests/Browser/Spec342CustomerReviewWorkspaceConsumptionSmokeTest.php @@ -108,14 +108,16 @@ $page = visit(CustomerReviewWorkspace::environmentFilterUrl($notReadyEnvironment)) ->resize(1236, 900) - ->waitForText('Output not customer-ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Review blockers are still recorded for this output.') - ->assertSee('Needs review') ->assertDontSee('Download internal preview') + ->assertDontSee('Output not customer-ready') ->assertSee('Review consumption flow') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertScript('document.querySelectorAll("[data-testid=\"customer-review-readiness-step\"]").length === 6', true) - ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepState === "Available"', true) - ->assertScript('document.querySelector("[data-step-label=\"Customer-safe output\"]")?.dataset.stepState === "Not ready"', true) + ->assertScript('document.querySelector("[data-step-label=\"Review pack\"]")?.dataset.stepState === "Ready"', true) + ->assertScript('document.querySelector("[data-step-label=\"Customer-safe output\"]")?.dataset.stepState === "Not configured"', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-diagnostics\"]")?.open === false', true) ->assertDontSee('raw payload should stay hidden') ->assertDontSee('provider response should stay hidden') @@ -127,14 +129,17 @@ spec342CopyBrowserScreenshot('01-evidence-incomplete-not-ready'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($readyEnvironment)) - ->waitForText('Customer-safe review pack ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Ready') ->assertSee('Stakeholders can use the current review pack and released review as the evidence path.') ->assertSee('Download customer-safe review pack') ->assertSee('Review pack state') - ->assertSee('Export ready') + ->assertSee('Ready') + ->assertDontSee('Customer-safe review pack ready') ->assertDontSee('Operation proof') ->assertDontSee('Spec342 Browser Operator') ->assertSee('No open findings require customer action.') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Ready"', true) ->assertScript('document.querySelectorAll("[data-testid=\"customer-review-primary-action\"]").length === 1', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-evidence-path-panel\"]")?.innerText.includes("Download review pack") === false', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-secondary-action\"]")?.innerText.includes("Download customer-safe review pack") === false', true) @@ -154,13 +159,13 @@ $page->script('document.querySelector("[data-testid=\"customer-review-review-pack-panel\"]")?.scrollIntoView({ block: "center" });'); $page ->assertSee('Export availability') - ->assertSee('Available'); + ->assertSee('Ready'); $page->screenshot(true, spec342BrowserScreenshotName('03-review-pack-available')); spec342CopyBrowserScreenshot('03-review-pack-available'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($findingsEnvironment)) ->waitForText('Findings needing attention') - ->assertSee('Published with limitations') + ->assertSee('Needs attention') ->assertSee('1 open finding needs attention; 1 is high impact.') ->assertSee('Keep open findings visible before customer handoff.') ->assertSee('Do not treat this review as share-ready until open findings are resolved, accepted, or explicitly reviewed.') @@ -169,16 +174,16 @@ ->assertDontSee('Download internal preview') ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"]")?.innerText.includes("Download internal preview") === false', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-evidence-path-panel\"]")?.innerText.includes("Download review pack") === false', true) - ->assertScript('document.querySelector("[data-step-label=\"Findings triaged\"]")?.dataset.stepState === "Needs review"', true) + ->assertScript('document.querySelector("[data-step-label=\"Findings triaged\"]")?.dataset.stepState === "Needs attention"', true) ->assertScript('document.querySelector("[data-step-label=\"Findings triaged\"]")?.dataset.stepCurrent === "true"', true) - ->assertScript('document.querySelector("[data-step-label=\"Customer-safe output\"]")?.dataset.stepState === "Needs review"', true) + ->assertScript('document.querySelector("[data-step-label=\"Customer-safe output\"]")?.dataset.stepState === "Needs attention"', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); $page->screenshot(true, spec342BrowserScreenshotName('04-findings-need-attention')); spec342CopyBrowserScreenshot('04-findings-need-attention'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($acceptedRiskEnvironment)) - ->waitForText('Published with limitations') + ->waitForText('Needs attention') ->assertSee('Accepted-risk follow-up is recorded for this review. Review the owner, rationale, and review date before handoff.') ->assertSee('The pack can be shared only with the accepted-risk context included in the customer handoff.') ->assertSee('Open review') diff --git a/apps/platform/tests/Browser/Spec347ReviewPackOutputReadinessSmokeTest.php b/apps/platform/tests/Browser/Spec347ReviewPackOutputReadinessSmokeTest.php index 53a4529d..1a1cba2f 100644 --- a/apps/platform/tests/Browser/Spec347ReviewPackOutputReadinessSmokeTest.php +++ b/apps/platform/tests/Browser/Spec347ReviewPackOutputReadinessSmokeTest.php @@ -82,9 +82,12 @@ $page = visit(CustomerReviewWorkspace::environmentFilterUrl($readyEnvironment)) ->resize(1236, 900) - ->waitForText('Customer-safe review pack ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Ready') ->assertSee('Download customer-safe review pack') ->assertSee('PII excluded') + ->assertDontSee('Customer-safe review pack ready') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Ready"', true) ->assertDontSee('Ready to share') ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); @@ -92,22 +95,28 @@ spec347CopyBrowserScreenshot('01-customer-safe-ready'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($limitedEnvironment)) - ->waitForText('Output not customer-ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Review blockers are still recorded for this output.') ->assertDontSee('Download internal preview') - ->assertSee('Requires review') + ->assertDontSee('Output not customer-ready') + ->assertDontSee('Requires review') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); $page->screenshot(true, spec347BrowserScreenshotName('02-published-with-limitations')); spec347CopyBrowserScreenshot('02-published-with-limitations'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($internalEnvironment)) - ->waitForText('Internal review package available') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Contains PII') ->assertSee('Review PII/redaction state') ->assertDontSee('Download internal review pack') ->assertDontSee('Download internal preview') - ->assertSee('Internal only') + ->assertDontSee('Internal only') + ->assertDontSee('Internal review package available') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); $page->screenshot(true, spec347BrowserScreenshotName('03-internal-review-package')); diff --git a/apps/platform/tests/Browser/Spec349OutputResolutionGuidanceSmokeTest.php b/apps/platform/tests/Browser/Spec349OutputResolutionGuidanceSmokeTest.php index 55f4ffd2..e6556ceb 100644 --- a/apps/platform/tests/Browser/Spec349OutputResolutionGuidanceSmokeTest.php +++ b/apps/platform/tests/Browser/Spec349OutputResolutionGuidanceSmokeTest.php @@ -84,13 +84,16 @@ $page = visit(CustomerReviewWorkspace::environmentFilterUrl($blockedEnvironment)) ->resize(1236, 900) - ->waitForText('Output not customer-ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Create next review') ->assertSee('Inspect review blockers') ->assertDontSee('Download internal preview') ->assertSee('Create the next review cycle from the latest eligible evidence basis.') ->assertScript('Array.from(document.querySelectorAll("[data-testid=\"customer-review-decision-card\"] [data-testid=\"customer-review-secondary-action\"]")).some((element) => element.innerText.includes("Open review")) === false', true) - ->assertSee('Requires review') + ->assertDontSee('Output not customer-ready') + ->assertDontSee('Requires review') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-output-limitations\"]")?.open === false', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-technical-details\"]") === null', true) ->assertNoJavaScriptErrors() @@ -99,19 +102,25 @@ spec349CopyBrowserScreenshot('01-output-blocked'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($internalEnvironment)) - ->waitForText('Internal review package available') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Review PII/redaction state') ->assertDontSee('Download internal review pack') ->assertDontSee('Download internal preview') - ->assertSee('Internal only') + ->assertDontSee('Internal only') + ->assertDontSee('Internal review package available') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); $page->screenshot(true, spec349BrowserScreenshotName('02-internal-only')); spec349CopyBrowserScreenshot('02-internal-only'); $page = visit(CustomerReviewWorkspace::environmentFilterUrl($readyEnvironment)) - ->waitForText('Customer-safe review pack ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Ready') ->assertSee('Download customer-safe review pack') + ->assertDontSee('Customer-safe review pack ready') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Ready"', true) ->assertDontSee('Ready to share') ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); diff --git a/apps/platform/tests/Browser/Spec350OperatorResolutionGuidanceSmokeTest.php b/apps/platform/tests/Browser/Spec350OperatorResolutionGuidanceSmokeTest.php index 1d98ccd9..bc663f82 100644 --- a/apps/platform/tests/Browser/Spec350OperatorResolutionGuidanceSmokeTest.php +++ b/apps/platform/tests/Browser/Spec350OperatorResolutionGuidanceSmokeTest.php @@ -55,10 +55,12 @@ $page = visit(CustomerReviewWorkspace::environmentFilterUrl($environment)) ->resize(1236, 900) ->waitForText('What is the current review pack output state?') - ->assertSee('Output not customer-ready') + ->assertSee('Needs attention') ->assertSee('Create next review') ->assertSee('Evidence basis incomplete') ->assertDontSee('Technical details') + ->assertDontSee('Output not customer-ready') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->click('[data-testid="customer-review-primary-action"]') ->waitForText('Create next review?') ->assertSee('Create next review?') diff --git a/apps/platform/tests/Browser/Spec351ReviewOutputResolveActionsSmokeTest.php b/apps/platform/tests/Browser/Spec351ReviewOutputResolveActionsSmokeTest.php index 93599e29..c57a9aad 100644 --- a/apps/platform/tests/Browser/Spec351ReviewOutputResolveActionsSmokeTest.php +++ b/apps/platform/tests/Browser/Spec351ReviewOutputResolveActionsSmokeTest.php @@ -62,16 +62,47 @@ 'published_by_user_id' => null, ])->save(); + $readySnapshot = seedEnvironmentReviewEvidence($readyDraftEnvironment, findingCount: 0, driftCount: 0); $readyReview = markEnvironmentReviewCustomerSafeReady(composeEnvironmentReviewForTest( $readyDraftEnvironment, $user, - seedEnvironmentReviewEvidence($readyDraftEnvironment, findingCount: 0, driftCount: 0), + $readySnapshot, )); $readyReview->forceFill([ 'status' => EnvironmentReviewStatus::Ready->value, 'published_at' => null, 'published_by_user_id' => null, ])->save(); + $readyReview->sections()->get()->each(function ($section): void { + $summary = is_array($section->summary_payload) ? $section->summary_payload : []; + $baselineReadiness = is_array($summary['baseline_readiness'] ?? null) ? $summary['baseline_readiness'] : []; + + $baselineReadiness['publication_blockers'] = []; + $summary['publication_blockers'] = []; + $summary['baseline_readiness'] = $baselineReadiness; + + $section->forceFill([ + 'completeness_state' => EnvironmentReviewCompletenessState::Complete->value, + 'summary_payload' => $summary, + ])->save(); + }); + $readyReview = $readyReview->refresh(); + Storage::disk('exports')->put('review-packs/spec351-browser-ready.zip', 'PK-spec351-ready'); + $readyPack = ReviewPack::factory()->ready()->create([ + 'managed_environment_id' => (int) $readyDraftEnvironment->getKey(), + 'workspace_id' => (int) $readyDraftEnvironment->workspace_id, + 'environment_review_id' => (int) $readyReview->getKey(), + 'evidence_snapshot_id' => (int) $readySnapshot->getKey(), + 'initiated_by_user_id' => (int) $user->getKey(), + 'options' => [ + 'include_pii' => false, + 'include_operations' => true, + ], + 'file_path' => 'review-packs/spec351-browser-ready.zip', + 'file_disk' => 'exports', + 'generated_at' => now()->subMinutes(3), + ]); + $readyReview->forceFill(['current_export_review_pack_id' => (int) $readyPack->getKey()])->save(); spec351BrowserCreatePublishedReviewWithPack( $fallbackEnvironment, @@ -91,11 +122,14 @@ $workspacePage = visit(CustomerReviewWorkspace::environmentFilterUrl($publishedBlockedEnvironment)) ->resize(1236, 900) - ->waitForText('Output not customer-ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Create next review') ->assertSee('Supporting actions') ->assertSee('Package exists') ->assertSee('Customer sharing') + ->assertDontSee('Output not customer-ready') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->click('[data-testid="customer-review-primary-action"]') ->waitForText('Create next review?') ->assertSee('Create next review?') @@ -117,10 +151,11 @@ spec351CopyBrowserScreenshot('01b-workspace-successor'); $mutableBlockedPage = visit(EnvironmentReviewResource::environmentScopedUrl('view', ['record' => $mutableBlockedReview], $mutableBlockedEnvironment)) - ->waitForText('Refresh review') - ->click('Refresh review') - ->waitForText('Refresh review') - ->assertSee('Refresh this environment review from the latest eligible evidence basis.') + ->waitForText('Resolve publication blockers') + ->click('Resolve publication blockers') + ->waitForText('Publication preparation') + ->assertSee('Why publication is blocked') + ->assertSee('Next safe action') ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); $mutableBlockedPage->screenshot(true, spec351BrowserScreenshotName('02-mutable-blocked')); @@ -139,9 +174,12 @@ spec351AuthenticateBrowser($this, $readonlyUser, $fallbackEnvironment); $fallbackPage = visit(CustomerReviewWorkspace::environmentFilterUrl($fallbackEnvironment)) - ->waitForText('Output not customer-ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Inspect review blockers') ->assertDontSee('Create next review') + ->assertDontSee('Output not customer-ready') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); $fallbackPage->screenshot(true, spec351BrowserScreenshotName('04-fallback')); diff --git a/apps/platform/tests/Browser/Spec385EvidenceReviewReadinessSmokeTest.php b/apps/platform/tests/Browser/Spec385EvidenceReviewReadinessSmokeTest.php index 3e6dd381..9decc179 100644 --- a/apps/platform/tests/Browser/Spec385EvidenceReviewReadinessSmokeTest.php +++ b/apps/platform/tests/Browser/Spec385EvidenceReviewReadinessSmokeTest.php @@ -66,8 +66,11 @@ $page = visit(CustomerReviewWorkspace::environmentFilterUrl($environment)) ->resize(1366, 920) - ->waitForText('Output not customer-ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') ->assertSee('Review blockers are still recorded for this output.') + ->assertDontSee('Output not customer-ready') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-output-limitations\"]")?.open === false', true) ->click('[data-testid="customer-review-output-limitations"] summary') ->assertSee('Baseline readiness blocked') diff --git a/apps/platform/tests/Browser/Spec392CustomerOutputGatingSmokeTest.php b/apps/platform/tests/Browser/Spec392CustomerOutputGatingSmokeTest.php index 3c7a5bb8..9b36288c 100644 --- a/apps/platform/tests/Browser/Spec392CustomerOutputGatingSmokeTest.php +++ b/apps/platform/tests/Browser/Spec392CustomerOutputGatingSmokeTest.php @@ -42,18 +42,24 @@ visit(CustomerReviewWorkspace::environmentFilterUrl($readyEnvironment)) ->resize(1236, 900) - ->waitForText('Customer-safe review pack ready') + ->waitForText('What is the current review pack output state?') + ->assertSee('Ready') ->assertSee('Download customer-safe review pack') + ->assertDontSee('Customer-safe review pack ready') ->assertDontSee('Download internal preview') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Ready"', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-primary-action\"]")?.innerText.includes("Download customer-safe review pack") === true', true) ->assertNoJavaScriptErrors() ->assertNoConsoleLogs(); visit(CustomerReviewWorkspace::environmentFilterUrl($blockedEnvironment)) ->resize(1236, 900) - ->waitForText('Output not customer-ready') - ->assertSee('Requires review') + ->waitForText('What is the current review pack output state?') + ->assertSee('Needs attention') + ->assertDontSee('Output not customer-ready') + ->assertDontSee('Requires review') ->assertDontSee('Download internal preview') + ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"] h2")?.textContent.trim() === "Needs attention"', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-decision-card\"]")?.innerText.includes("Download internal preview") === false', true) ->assertScript('document.querySelector("[data-testid=\"customer-review-primary-action\"]")?.innerText.includes("Download customer-safe review pack") === false', true) ->assertNoJavaScriptErrors() diff --git a/apps/platform/tests/Browser/Spec403EvidenceCurrentnessRuntimeClosureSmokeTest.php b/apps/platform/tests/Browser/Spec403EvidenceCurrentnessRuntimeClosureSmokeTest.php new file mode 100644 index 00000000..3413c7cf --- /dev/null +++ b/apps/platform/tests/Browser/Spec403EvidenceCurrentnessRuntimeClosureSmokeTest.php @@ -0,0 +1,248 @@ +browser()->timeout(60_000); + +it('Spec403 smokes Evidence Overview canonical operation proof currentness labels', function (): void { + $environment = ManagedEnvironment::factory()->active()->create([ + 'name' => 'Spec403 Failed Proof Environment', + ]); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); + $foreignEnvironment = ManagedEnvironment::factory()->active()->create([ + 'name' => 'Spec403 Foreign Evidence Environment', + ]); + $expiredEnvironment = spec403BrowserEnvironmentFor($user, $environment, 'Spec403 Expired Evidence Environment'); + $staleDimensionEnvironment = spec403BrowserEnvironmentFor($user, $environment, 'Spec403 Stale Dimension Environment'); + $missingDimensionEnvironment = spec403BrowserEnvironmentFor($user, $environment, 'Spec403 Missing Dimension Environment'); + + $run = OperationRun::factory()->forTenant($environment)->create([ + 'status' => OperationRunStatus::Completed->value, + 'outcome' => OperationRunOutcome::Failed->value, + 'started_at' => now()->subMinutes(10), + 'completed_at' => now()->subMinutes(9), + 'initiator_name' => 'Spec403 Browser Operator', + 'context' => [ + 'raw_payload' => 'raw payload should stay hidden', + 'provider_response' => 'provider response should stay hidden', + 'stack_trace' => 'stack trace should stay hidden', + ], + ]); + + EvidenceSnapshot::query()->create([ + 'managed_environment_id' => (int) $environment->getKey(), + 'workspace_id' => (int) $environment->workspace_id, + 'operation_run_id' => (int) $run->getKey(), + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 0, + 'stale_dimensions' => 0, + 'raw_payload' => 'raw payload should stay hidden', + 'provider_response' => 'provider response should stay hidden', + ], + 'generated_at' => now()->subMinutes(8), + 'expires_at' => now()->addDay(), + ]); + + EvidenceSnapshot::query()->create([ + 'managed_environment_id' => (int) $expiredEnvironment->getKey(), + 'workspace_id' => (int) $expiredEnvironment->workspace_id, + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 0, + 'stale_dimensions' => 0, + ], + 'generated_at' => now()->subDays(2), + 'expires_at' => now()->subMinute(), + ]); + + EvidenceSnapshot::query()->create([ + 'managed_environment_id' => (int) $staleDimensionEnvironment->getKey(), + 'workspace_id' => (int) $staleDimensionEnvironment->workspace_id, + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 0, + 'stale_dimensions' => 1, + ], + 'generated_at' => now()->subMinutes(6), + 'expires_at' => now()->addDay(), + ]); + + EvidenceSnapshot::query()->create([ + 'managed_environment_id' => (int) $missingDimensionEnvironment->getKey(), + 'workspace_id' => (int) $missingDimensionEnvironment->workspace_id, + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 1, + 'stale_dimensions' => 0, + ], + 'generated_at' => now()->subMinutes(5), + 'expires_at' => now()->addDay(), + ]); + + spec403AuthenticateBrowser($this, $user, $environment); + + $page = visit(route('admin.evidence.overview', [ + 'environment_id' => (int) $environment->getKey(), + ])) + ->resize(1366, 900) + ->waitForText('Evidence proof workbench') + ->assertSee('Spec403 Failed Proof Environment') + ->assertSee('Operation proof') + ->assertSee('Failed') + ->assertSee('Spec403 Browser Operator') + ->assertSee('Diagnostics') + ->assertDontSee('Diagnostics - Collapsed') + ->assertDontSee('Operation #') + ->assertDontSee(OperationRunLinks::tenantlessView($run), false) + ->assertDontSee('raw payload should stay hidden') + ->assertDontSee('provider response should stay hidden') + ->assertDontSee('stack trace should stay hidden') + ->assertScript('(() => { + const item = document.querySelector("[data-proof-label=\"Operation proof\"]"); + const badge = item?.querySelector("[data-testid=\"evidence-path-state-badge\"]"); + + return badge?.textContent.trim() === "Failed"; + })()', true) + ->assertScript('document.querySelector("[data-proof-label=\"Operation proof\"] a") === null', true) + ->assertScript('(() => { + const legacyStates = ["Available", "Unavailable", "Not generated", "Not applicable", "Proof incomplete", "Empty", "Collapsed", "Unknown"]; + const badges = Array.from(document.querySelectorAll("[data-testid=\"evidence-path-state-badge\"]")); + + return badges.length > 0 && badges.every((badge) => !legacyStates.includes(badge.textContent.trim())); + })()', true) + ->assertScript('document.querySelector("[data-testid=\"evidence-disclosure-diagnostics\"]")?.open === false', true) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + $page->screenshot(true, 'spec403-evidence-currentness-operation-proof-failed'); + spec403CopyBrowserScreenshot('spec403-evidence-currentness-operation-proof-failed'); + + visit(route('admin.evidence.overview', [ + 'environment_id' => (int) $expiredEnvironment->getKey(), + ])) + ->waitForText('Evidence snapshot required') + ->assertSee('Spec403 Expired Evidence Environment') + ->assertSee('Not configured') + ->assertDontSee('View internal evidence details') + ->assertScript('(() => { + const legacyStates = ["Available", "Unavailable", "Not generated", "Not applicable", "Proof incomplete", "Empty", "Collapsed", "Unknown"]; + const badges = Array.from(document.querySelectorAll("[data-testid=\"evidence-path-state-badge\"]")); + + return badges.length > 0 && badges.every((badge) => !legacyStates.includes(badge.textContent.trim())); + })()', true) + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Not configured"', true) + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepCurrentBlocker === "true"', true) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + visit(route('admin.evidence.overview', [ + 'environment_id' => (int) $staleDimensionEnvironment->getKey(), + ])) + ->waitForText('Evidence snapshot required') + ->assertSee('Spec403 Stale Dimension Environment') + ->assertSee('Not configured') + ->assertDontSee('View internal evidence details') + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Not configured"', true) + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepCurrentBlocker === "true"', true) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + visit(route('admin.evidence.overview', [ + 'environment_id' => (int) $missingDimensionEnvironment->getKey(), + ])) + ->waitForText('Evidence snapshot required') + ->assertSee('Spec403 Missing Dimension Environment') + ->assertSee('Not configured') + ->assertSee('Needs attention') + ->assertSee('Refresh evidence before using this snapshot') + ->assertDontSee('Partially complete') + ->assertDontSee('Trustworthy artifact') + ->assertDontSee('View internal evidence details') + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepState === "Not configured"', true) + ->assertScript('document.querySelector("[data-step-label=\"Evidence snapshot\"]")?.dataset.stepCurrentBlocker === "true"', true) + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); + + visit(route('admin.evidence.overview', [ + 'environment_id' => (int) $foreignEnvironment->getKey(), + ])) + ->assertSee('404') + ->assertDontSee('Spec403 Foreign Evidence Environment') + ->assertNoJavaScriptErrors() + ->assertNoConsoleLogs(); +}); + +function spec403BrowserEnvironmentFor(User $user, ManagedEnvironment $baseEnvironment, string $name): ManagedEnvironment +{ + $environment = ManagedEnvironment::factory()->active()->create([ + 'workspace_id' => (int) $baseEnvironment->workspace_id, + 'name' => $name, + ]); + + createUserWithTenant(tenant: $environment, user: $user, role: 'owner', workspaceRole: 'manager'); + + return $environment; +} + +function spec403AuthenticateBrowser(mixed $test, User $user, ManagedEnvironment $environment): void +{ + $workspaceId = (int) $environment->workspace_id; + $session = [ + WorkspaceContext::SESSION_KEY => $workspaceId, + WorkspaceContext::LAST_ENVIRONMENT_IDS_SESSION_KEY => [ + (string) $workspaceId => (int) $environment->getKey(), + ], + ]; + + $test->actingAs($user)->withSession($session); + + foreach ($session as $key => $value) { + session()->put($key, $value); + } + + setAdminPanelContext($environment); +} + +function spec403CopyBrowserScreenshot(string $name): void +{ + $filename = $name.'.png'; + $source = base_path('tests/Browser/Screenshots/'.$filename); + $targetDirectory = repo_path('specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots'); + + if (! is_dir($targetDirectory)) { + @mkdir($targetDirectory, 0755, true); + } + + if (! is_file($source)) { + $source = \Pest\Browser\Support\Screenshot::path($filename); + } + + for ($attempt = 0; $attempt < 10 && ! is_file($source); $attempt++) { + usleep(100_000); + clearstatcache(true, $source); + } + + if (is_file($source) && is_dir($targetDirectory) && is_writable($targetDirectory)) { + @copy($source, $targetDirectory.DIRECTORY_SEPARATOR.$filename); + } +} diff --git a/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php b/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php index 1ae180a0..af8decb2 100644 --- a/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php +++ b/apps/platform/tests/Browser/Support/Spec322WorkspaceEnvironmentBrowserHarness.php @@ -280,7 +280,7 @@ private static function evidenceSnapshot(ManagedEnvironment $environment): Evide 'workspace_id' => (int) $environment->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); } diff --git a/apps/platform/tests/Feature/Evidence/EvidenceOverviewPageTest.php b/apps/platform/tests/Feature/Evidence/EvidenceOverviewPageTest.php index 467128b4..f94fd092 100644 --- a/apps/platform/tests/Feature/Evidence/EvidenceOverviewPageTest.php +++ b/apps/platform/tests/Feature/Evidence/EvidenceOverviewPageTest.php @@ -35,6 +35,7 @@ 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => $state, 'summary' => [ + 'dimension_count' => $state === EvidenceCompletenessState::Complete->value ? 5 : 0, 'missing_dimensions' => $state === EvidenceCompletenessState::Missing->value ? 2 : 0, 'stale_dimensions' => 0, ], @@ -83,7 +84,7 @@ 'workspace_id' => (int) $tenant->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => $state, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); } @@ -130,6 +131,73 @@ ->assertSee(EvidenceSnapshotResource::getUrl('view', ['record' => $freshSnapshot], tenant: $freshTenant, panel: 'admin'), false); }); +it('does not present complete snapshots with missing dimensions as trustworthy current evidence on the overview', function (): void { + $environment = ManagedEnvironment::factory()->create([ + 'name' => 'Missing Dimensions ManagedEnvironment', + ]); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner'); + + $snapshot = $this->makeArtifactTruthEvidenceSnapshot($environment, [], [ + 'dimension_count' => 5, + 'missing_dimensions' => 1, + 'stale_dimensions' => 0, + ]); + + Filament::setTenant(null, true); + + $this->actingAs($user) + ->withSession([WorkspaceContext::SESSION_KEY => (int) $environment->workspace_id]) + ->get(route('admin.evidence.overview')) + ->assertOk() + ->assertSee('Missing Dimensions ManagedEnvironment') + ->assertSee('Needs attention') + ->assertSee('Refresh evidence before using this snapshot') + ->assertDontSee('Partially complete') + ->assertDontSee('Trustworthy artifact') + ->assertDontSee('Create a current review from this evidence snapshot') + ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $snapshot], tenant: $environment, panel: 'admin'), false); + + $this->get(route('admin.evidence.overview', ['environment_id' => (int) $environment->getKey()])) + ->assertOk() + ->assertSee('Evidence snapshot required') + ->assertSee('Not configured') + ->assertDontSee('View internal evidence details') + ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $snapshot], tenant: $environment, panel: 'admin'), false); +}); + +it('does not present complete snapshots without captured dimensions as current evidence on the overview', function (): void { + $environment = ManagedEnvironment::factory()->create([ + 'name' => 'Empty Dimensions ManagedEnvironment', + ]); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner'); + + $snapshot = $this->makeArtifactTruthEvidenceSnapshot($environment, [], [ + 'dimension_count' => 0, + 'missing_dimensions' => 0, + 'stale_dimensions' => 0, + ]); + + Filament::setTenant(null, true); + + $this->actingAs($user) + ->withSession([WorkspaceContext::SESSION_KEY => (int) $environment->workspace_id]) + ->get(route('admin.evidence.overview')) + ->assertOk() + ->assertSee('Empty Dimensions ManagedEnvironment') + ->assertSee('Needs attention') + ->assertSee('A proof record exists, but no usable captured evidence is available yet.') + ->assertDontSee('Trustworthy artifact') + ->assertDontSee('Create a current review from this evidence snapshot') + ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $snapshot], tenant: $environment, panel: 'admin'), false); + + $this->get(route('admin.evidence.overview', ['environment_id' => (int) $environment->getKey()])) + ->assertOk() + ->assertSee('Evidence snapshot required') + ->assertSee('Not configured') + ->assertDontSee('View internal evidence details') + ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $snapshot], tenant: $environment, panel: 'admin'), false); +}); + it('seeds the native entitled-tenant prefilter once and clears it through the page action', function (): void { $tenantA = ManagedEnvironment::factory()->create(); [$user, $tenantA] = createUserWithTenant(tenant: $tenantA, role: 'owner'); @@ -144,7 +212,7 @@ 'workspace_id' => (int) $tenantA->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); @@ -153,7 +221,7 @@ 'workspace_id' => (int) $tenantB->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); diff --git a/apps/platform/tests/Feature/Filament/Spec337EvidenceReviewPackProductFlowTest.php b/apps/platform/tests/Feature/Filament/Spec337EvidenceReviewPackProductFlowTest.php index 2cd85a6c..7001a96c 100644 --- a/apps/platform/tests/Feature/Filament/Spec337EvidenceReviewPackProductFlowTest.php +++ b/apps/platform/tests/Feature/Filament/Spec337EvidenceReviewPackProductFlowTest.php @@ -14,6 +14,7 @@ use App\Support\EnvironmentReviewStatus; use App\Support\Evidence\EvidenceCompletenessState; use App\Support\Evidence\EvidenceSnapshotStatus; +use App\Support\OperationRunLinks; use App\Support\OperationRunOutcome; use App\Support\OperationRunStatus; use App\Support\OperationRunType; @@ -31,19 +32,20 @@ ->assertSee('Generate evidence snapshot') ->assertSee('Evidence readiness flow') ->assertSee('Evidence proof') - ->assertSee('Diagnostics - Collapsed') + ->assertSee('Diagnostics') + ->assertDontSee('Diagnostics - Collapsed') ->assertDontSee('raw payload should stay hidden') ->assertDontSee('provider response should stay hidden') ->assertDontSee('stack trace should stay hidden'); $content = $component->html(); - spec337AssertFlowStep($content, 'Source data selected', 'Available', false); - spec337AssertFlowStep($content, 'Evidence snapshot', 'Missing', true); - spec337AssertFlowStep($content, 'Stored report', 'Unavailable', false); - spec337AssertFlowStep($content, 'Review pack', 'Unavailable', false); - spec337AssertFlowStep($content, 'Customer-safe output', 'Not ready', false); - spec337AssertFlowStep($content, 'Export / delivery', 'Unavailable', false); + spec337AssertFlowStep($content, 'Source data selected', 'Ready', false); + spec337AssertFlowStep($content, 'Evidence snapshot', 'Not configured', true); + spec337AssertFlowStep($content, 'Stored report', 'Blocked', false); + spec337AssertFlowStep($content, 'Review pack', 'Blocked', false); + spec337AssertFlowStep($content, 'Customer-safe output', 'Not configured', false); + spec337AssertFlowStep($content, 'Export / delivery', 'Not configured', false); expect(substr_count($content, 'data-testid="evidence-readiness-step"'))->toBe(6) ->and($content)->toContain('data-testid="evidence-readiness-flow" class="@container') @@ -65,11 +67,11 @@ $content = $component->html(); - spec337AssertFlowStep($content, 'Evidence snapshot', 'Available', false); - spec337AssertFlowStep($content, 'Stored report', 'Missing', true); - spec337AssertFlowStep($content, 'Review pack', 'Unavailable', false); - spec337AssertFlowStep($content, 'Customer-safe output', 'Not ready', false); - spec337AssertFlowStep($content, 'Export / delivery', 'Unavailable', false); + spec337AssertFlowStep($content, 'Evidence snapshot', 'Ready', false); + spec337AssertFlowStep($content, 'Stored report', 'Not configured', true); + spec337AssertFlowStep($content, 'Review pack', 'Blocked', false); + spec337AssertFlowStep($content, 'Customer-safe output', 'Not configured', false); + spec337AssertFlowStep($content, 'Export / delivery', 'Not configured', false); }); it('renders review pack required with capability-aware primary action', function (): void { @@ -86,7 +88,7 @@ ->assertDontSee('Customer-safe output ready') ->assertDontSee('Review pack export available'); - spec337AssertFlowStep($ownerComponent->html(), 'Review pack', 'Required', true); + spec337AssertFlowStep($ownerComponent->html(), 'Review pack', 'Not configured', true); spec337EvidenceOverviewLivewire($readonly, $environment) ->assertSee('Review pack required') @@ -118,11 +120,11 @@ $content = $component->html(); - spec337AssertFlowStep($content, 'Evidence snapshot', 'Available', false); - spec337AssertFlowStep($content, 'Stored report', 'Available', false); - spec337AssertFlowStep($content, 'Review pack', 'Available', false); + spec337AssertFlowStep($content, 'Evidence snapshot', 'Ready', false); + spec337AssertFlowStep($content, 'Stored report', 'Ready', false); + spec337AssertFlowStep($content, 'Review pack', 'Ready', false); spec337AssertFlowStep($content, 'Customer-safe output', 'Ready', false); - spec337AssertFlowStep($content, 'Export / delivery', 'Available', true); + spec337AssertFlowStep($content, 'Export / delivery', 'Ready', true); expect($review->current_export_review_pack_id)->toBe($pack->getKey()); }); @@ -145,11 +147,10 @@ $generatingComponent = spec337EvidenceOverviewLivewire($user, $generatingEnvironment) ->assertSee('Evidence snapshot required') ->assertDontSee('View operation progress') - ->assertDontSee('Generating') ->assertDontSee('Spec337 Operator') ->assertDontSee('Customer-safe output ready'); - spec337AssertFlowStep($generatingComponent->html(), 'Evidence snapshot', 'Missing', true); + spec337AssertFlowStep($generatingComponent->html(), 'Evidence snapshot', 'Not configured', true); $failedEnvironment = createUserWithTenant(user: $user, role: 'owner', workspaceRole: 'manager')[1]; $failedRun = OperationRun::factory()->forTenant($failedEnvironment)->create([ @@ -171,10 +172,11 @@ $failedComponent = spec337EvidenceOverviewLivewire($user, $failedEnvironment) ->assertSee('Review pack generation failed') - ->assertSee('Review operation') + ->assertSee('Open review pack') ->assertSee('Operation proof') ->assertSee('Failed') ->assertSee('Spec337 Reviewer') + ->assertDontSee(OperationRunLinks::tenantlessView($failedRun), false) ->assertDontSee('Review pack export available'); spec337AssertFlowStep($failedComponent->html(), 'Review pack', 'Failed', true); diff --git a/apps/platform/tests/Feature/Filament/Spec342CustomerReviewWorkspaceConsumptionTest.php b/apps/platform/tests/Feature/Filament/Spec342CustomerReviewWorkspaceConsumptionTest.php index 9d79bad0..6f719d58 100644 --- a/apps/platform/tests/Feature/Filament/Spec342CustomerReviewWorkspaceConsumptionTest.php +++ b/apps/platform/tests/Feature/Filament/Spec342CustomerReviewWorkspaceConsumptionTest.php @@ -77,7 +77,6 @@ $component ->assertSee('What is the current review pack output state?') - ->assertSee('Customer-safe review pack ready') ->assertSee('Stakeholders can use the current review pack and released review as the evidence path.') ->assertSee('Review consumption flow') ->assertSee('Review data') @@ -87,17 +86,19 @@ ->assertSee('Findings needing attention') ->assertSee('No open findings require customer action.') ->assertSee('Review pack state') - ->assertSee('Export ready') + ->assertSee('Ready') ->assertSee('Download customer-safe review pack') ->assertDontSee('Operation proof') ->assertDontSee('Spec342 Operator') + ->assertDontSee('Customer-safe review pack ready') ->assertDontSee('Auditor-ready') ->assertDontSee('environment is healthy') ->assertDontSee('compliant'); $html = $component->html(); - expect(substr_count($html, 'data-testid="customer-review-primary-action"'))->toBe(1) + expect($html)->toMatch('/]*>\s*Ready\s*<\/h2>/') + ->and(substr_count($html, 'data-testid="customer-review-primary-action"'))->toBe(1) ->and(substr_count($html, 'data-testid="customer-review-readiness-step"'))->toBe(6) ->and($html)->toContain('source_surface=customer_review_workspace') ->and($html)->not->toContain('/admin/t/'); @@ -149,21 +150,22 @@ $review->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); $component = spec342WorkspaceComponent($user, $environment) - ->assertSee('Output not customer-ready') ->assertSee('Review blockers are still recorded for this output.') ->assertSee('Customer-safe output') - ->assertSee('Needs review') + ->assertSee('Needs attention') ->assertSee('Diagnostics') - ->assertSee('Collapsed') + ->assertSee('Not configured') ->assertDontSee('Ready to share') - ->assertSee('Available') + ->assertSee('Ready') ->assertDontSee('Download internal preview') + ->assertDontSee('Output not customer-ready') ->assertDontSee('raw payload should stay hidden') ->assertDontSee('provider response should stay hidden') ->assertDontSee('stack trace should stay hidden') ->assertDontSee('spec342-hidden-fingerprint'); - expect($component->html())->not->toContain('data-testid="customer-review-diagnostics" open'); + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/') + ->not->toContain('data-testid="customer-review-diagnostics" open'); }); it('uses concrete findings follow-up copy and keeps review-pack download primary-only', function (): void { @@ -202,7 +204,7 @@ ]); $component = spec342WorkspaceComponent($user, $environment) - ->assertSee('Published with limitations') + ->assertSee('Needs attention') ->assertSee('1 open finding needs attention; 1 is high impact. Keep open findings visible before customer handoff.') ->assertSee('Do not treat this review as share-ready until open findings are resolved, accepted, or explicitly reviewed.') ->assertSee('Open review') diff --git a/apps/platform/tests/Feature/Filament/Spec347CustomerReviewWorkspaceOutputReadinessTest.php b/apps/platform/tests/Feature/Filament/Spec347CustomerReviewWorkspaceOutputReadinessTest.php index 4ff2ff3f..e87facb6 100644 --- a/apps/platform/tests/Feature/Filament/Spec347CustomerReviewWorkspaceOutputReadinessTest.php +++ b/apps/platform/tests/Feature/Filament/Spec347CustomerReviewWorkspaceOutputReadinessTest.php @@ -38,13 +38,15 @@ ]); $review->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); - spec347WorkspaceComponent($user, $environment) + $component = spec347WorkspaceComponent($user, $environment) ->assertSee('What is the current review pack output state?') - ->assertSee('Customer-safe review pack ready') ->assertSee('Customer-safe') ->assertSee('Download customer-safe review pack') ->assertSee('PII excluded') + ->assertDontSee('Customer-safe review pack ready') ->assertDontSee('Ready to share'); + + expect($component->html())->toMatch('/]*>\s*Ready\s*<\/h2>/'); }); it('shows blocked output guidance when evidence is incomplete and review blockers remain recorded', function (): void { @@ -71,12 +73,15 @@ ]); $review->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); - spec347WorkspaceComponent($user, $environment) - ->assertSee('Output not customer-ready') + $component = spec347WorkspaceComponent($user, $environment) ->assertSee('Review blockers are still recorded for this output.') - ->assertSee('Requires review') + ->assertSee('Needs attention') + ->assertDontSee('Output not customer-ready') + ->assertDontSee('Requires review') ->assertDontSee('Download internal preview') ->assertDontSee('Ready to share'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); }); it('shows the internal-only workspace state when the export contains pii', function (): void { @@ -104,14 +109,17 @@ ]); $review->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); - spec347WorkspaceComponent($user, $environment) - ->assertSee('Internal review package available') - ->assertSee('Internal only') + $component = spec347WorkspaceComponent($user, $environment) + ->assertSee('Needs attention') ->assertSee('Contains PII') ->assertSee('Review PII/redaction state') ->assertDontSee('Download internal review pack') ->assertDontSee('Download internal preview') + ->assertDontSee('Internal only') + ->assertDontSee('Internal review package available') ->assertDontSee('Customer-safe review pack ready'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); }); function spec347WorkspaceComponent(User $user, ManagedEnvironment $environment): mixed diff --git a/apps/platform/tests/Feature/Filament/Spec349CustomerReviewWorkspaceOutputGuidanceTest.php b/apps/platform/tests/Feature/Filament/Spec349CustomerReviewWorkspaceOutputGuidanceTest.php index 9b9c3e3c..39103bb3 100644 --- a/apps/platform/tests/Feature/Filament/Spec349CustomerReviewWorkspaceOutputGuidanceTest.php +++ b/apps/platform/tests/Feature/Filament/Spec349CustomerReviewWorkspaceOutputGuidanceTest.php @@ -54,18 +54,20 @@ $review->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); $component = spec349WorkspaceComponent($user, $environment) - ->assertSee('Output not customer-ready') + ->assertSee('Needs attention') ->assertSee('Create next review') ->assertSee('Inspect review blockers') ->assertSee('Evidence basis incomplete') ->assertSee('Required review sections missing') ->assertSee('Internal package includes PII') ->assertSee('Create the next review cycle from the latest eligible evidence basis.') + ->assertDontSee('Output not customer-ready') ->assertDontSee('Technical details'); $html = $component->html(); - expect(substr_count($html, 'data-testid="customer-review-primary-action"'))->toBe(1) + expect($html)->toMatch('/]*>\s*Needs attention\s*<\/h2>/') + ->and(substr_count($html, 'data-testid="customer-review-primary-action"'))->toBe(1) ->and($html)->toContain('data-testid="customer-review-output-limitations"') ->and($html)->not->toContain('data-testid="customer-review-output-limitations" open') ->and($html)->toContain('data-testid="customer-review-action-help"') @@ -111,10 +113,11 @@ ->test(CustomerReviewWorkspace::class) ->assertSee('Environment filter:') ->assertSee('Spec349 Internal') - ->assertSee('Internal review package available') + ->assertSee('Needs attention') ->assertDontSee('Download internal review pack') ->assertDontSee('Download internal preview') ->assertDontSee('Download governance package') + ->assertDontSee('Internal review package available') ->assertDontSee('Ready to share'); }); diff --git a/apps/platform/tests/Feature/Filament/Spec350CustomerReviewWorkspaceGuidanceIntegrationTest.php b/apps/platform/tests/Feature/Filament/Spec350CustomerReviewWorkspaceGuidanceIntegrationTest.php index 47391835..7f623724 100644 --- a/apps/platform/tests/Feature/Filament/Spec350CustomerReviewWorkspaceGuidanceIntegrationTest.php +++ b/apps/platform/tests/Feature/Filament/Spec350CustomerReviewWorkspaceGuidanceIntegrationTest.php @@ -56,10 +56,13 @@ $component = spec350WorkspaceComponent($user, $environment) ->assertSee('What is the current review pack output state?') - ->assertSee('Output not customer-ready') + ->assertSee('Needs attention') ->assertSee('Create next review') ->assertSee('Review blockers are still recorded for this output.') - ->assertSee('Inspect review blockers'); + ->assertSee('Inspect review blockers') + ->assertDontSee('Output not customer-ready'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); $payload = $component->instance()->latestReviewConsumptionPayload(); @@ -111,9 +114,12 @@ ]); $component = spec350WorkspaceComponent($user, $environment) - ->assertSee('Published with limitations') + ->assertSee('Needs attention') ->assertSee('Keep open findings visible before customer handoff.') - ->assertSee('Open review'); + ->assertSee('Open review') + ->assertDontSee('Published with limitations'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); $payload = $component->instance()->latestReviewConsumptionPayload(); diff --git a/apps/platform/tests/Feature/Filament/Spec385CustomerReviewWorkspaceBaselineReadinessTest.php b/apps/platform/tests/Feature/Filament/Spec385CustomerReviewWorkspaceBaselineReadinessTest.php index 6c79645b..ab4a6f5b 100644 --- a/apps/platform/tests/Feature/Filament/Spec385CustomerReviewWorkspaceBaselineReadinessTest.php +++ b/apps/platform/tests/Feature/Filament/Spec385CustomerReviewWorkspaceBaselineReadinessTest.php @@ -46,14 +46,17 @@ ]); $review->forceFill(['current_export_review_pack_id' => (int) $pack->getKey()])->save(); - spec385WorkspaceComponent($user, $environment) - ->assertSee('Output not customer-ready') + $component = spec385WorkspaceComponent($user, $environment) + ->assertSee('Needs attention') ->assertSee('Baseline readiness blocked') ->assertSee('Open baseline resolution') + ->assertDontSee('Output not customer-ready') ->assertDontSee('baseline_identity_unresolved') ->assertDontSee('provider_resource_id') ->assertDontSee('canonical_subject_key') ->assertDontSee('internal_diagnostics'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); }); function spec385WorkspaceComponent(User $user, ManagedEnvironment $environment): mixed diff --git a/apps/platform/tests/Feature/ManagedEnvironments/AuthorizationSemanticsTest.php b/apps/platform/tests/Feature/ManagedEnvironments/AuthorizationSemanticsTest.php index 24829d5f..8c18a255 100644 --- a/apps/platform/tests/Feature/ManagedEnvironments/AuthorizationSemanticsTest.php +++ b/apps/platform/tests/Feature/ManagedEnvironments/AuthorizationSemanticsTest.php @@ -88,7 +88,7 @@ 'workspace_id' => (int) $tenantA->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); @@ -105,6 +105,7 @@ ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenantA->workspace_id]) ->get(route('admin.evidence.overview')) ->assertOk() - ->assertSee(EvidenceSnapshotResource::getUrl('view', ['record' => $allowedSnapshot], tenant: $tenantA, panel: 'admin')) - ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $deniedSnapshot], tenant: $tenantDenied, panel: 'admin')); + ->assertSee($tenantA->name) + ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $allowedSnapshot], tenant: $tenantA, panel: 'admin'), false) + ->assertDontSee(EvidenceSnapshotResource::getUrl('view', ['record' => $deniedSnapshot], tenant: $tenantDenied, panel: 'admin'), false); }); diff --git a/apps/platform/tests/Feature/Monitoring/EvidenceOverviewWorkspaceHubContractTest.php b/apps/platform/tests/Feature/Monitoring/EvidenceOverviewWorkspaceHubContractTest.php index 015bbf0c..6d50f882 100644 --- a/apps/platform/tests/Feature/Monitoring/EvidenceOverviewWorkspaceHubContractTest.php +++ b/apps/platform/tests/Feature/Monitoring/EvidenceOverviewWorkspaceHubContractTest.php @@ -85,7 +85,11 @@ function spec314EvidenceSnapshot(ManagedEnvironment $environment, string $comple 'workspace_id' => (int) $environment->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => $completenessState, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => [ + 'dimension_count' => $completenessState === EvidenceCompletenessState::Complete->value ? 5 : 0, + 'missing_dimensions' => 0, + 'stale_dimensions' => 0, + ], 'generated_at' => now(), ]); } diff --git a/apps/platform/tests/Feature/Monitoring/Spec329EvidenceAuditDisclosureProductizationTest.php b/apps/platform/tests/Feature/Monitoring/Spec329EvidenceAuditDisclosureProductizationTest.php index 5922061c..128ed3c7 100644 --- a/apps/platform/tests/Feature/Monitoring/Spec329EvidenceAuditDisclosureProductizationTest.php +++ b/apps/platform/tests/Feature/Monitoring/Spec329EvidenceAuditDisclosureProductizationTest.php @@ -51,21 +51,20 @@ ->assertSee('Operation proof') ->assertSee('Stored report / export') ->assertSee('Spec 329 Demo Tenant - Produktion') - ->assertSee('Proof incomplete') - ->assertSee('A proof record exists, but no usable captured evidence is available yet.') - ->assertSee('Primary evidence snapshot is empty.') - ->assertSee('Supporting proof exists through the review pack, stored report, and operation record.') - ->assertSee('Empty') ->assertSee('Ready') - ->assertSee('Available') + ->assertSee('Historical') ->assertSee('Search evidence or next step') - ->assertSee('Diagnostics - Collapsed') + ->assertSee('Diagnostics') ->assertSee('Evidence inventory') ->assertSee('View internal evidence details') + ->assertDontSee('Proof incomplete') + ->assertDontSee('Not generated') + ->assertDontSee('Not applicable') + ->assertDontSee('Diagnostics - Collapsed') ->assertDontSee('Open evidence snapshot') + ->assertDontSee(\App\Support\OperationRunLinks::tenantlessView($run), false) ->assertSee(ReviewPackResource::getUrl('view', ['record' => $reviewPack], tenant: $environment, panel: 'admin'), false) ->assertSee(StoredReportResource::getUrl('view', ['record' => $storedReport], tenant: $environment, panel: 'admin'), false) - ->assertSee(\App\Support\OperationRunLinks::tenantlessView($run), false) ->assertDontSee('The artifact row exists, but it does not contain usable captured content.') ->assertDontSee('artifact row exists') ->assertDontSee('Search tenant or next') @@ -203,6 +202,7 @@ function spec329EvidenceFixture(): array 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, 'summary' => [ + 'dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0, 'raw_payload' => 'raw payload should stay hidden', diff --git a/apps/platform/tests/Feature/Monitoring/Spec403EvidenceCurrentnessRuntimeClosureTest.php b/apps/platform/tests/Feature/Monitoring/Spec403EvidenceCurrentnessRuntimeClosureTest.php new file mode 100644 index 00000000..094d0555 --- /dev/null +++ b/apps/platform/tests/Feature/Monitoring/Spec403EvidenceCurrentnessRuntimeClosureTest.php @@ -0,0 +1,318 @@ +create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner'); + + spec403EvidenceSnapshot($environment, $attributes); + + setAdminPanelContext($environment); + session()->put(WorkspaceContext::SESSION_KEY, (int) $environment->workspace_id); + + $result = app(EvidenceAnchorResolver::class)->currentForScope( + $environment->workspace, + $environment, + $user, + ); + + expect($result->state)->toBe(EvidenceAnchorResult::STATE_NEEDS_ATTENTION) + ->and($result->canLink)->toBeFalse() + ->and($result->isCurrent)->toBeFalse() + ->and($result->primaryReason)->toContain('No complete active evidence snapshot'); + + EvidenceSnapshot::query() + ->where('workspace_id', (int) $environment->workspace_id) + ->where('managed_environment_id', (int) $environment->getKey()) + ->delete(); + + $currentSnapshot = spec403EvidenceSnapshot($environment, [ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'generated_at' => now(), + 'expires_at' => now()->addDay(), + ]); + + $currentResult = app(EvidenceAnchorResolver::class)->currentForScope( + $environment->workspace, + $environment, + $user, + ); + + expect($currentResult->state)->toBe(EvidenceAnchorResult::STATE_READY) + ->and($currentResult->evidenceSnapshotId)->toBe((int) $currentSnapshot->getKey()) + ->and($currentResult->canLink)->toBeTrue() + ->and($currentResult->isCurrent)->toBeTrue(); +})->with([ + 'queued evidence' => [[ + 'status' => EvidenceSnapshotStatus::Queued->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + ]], + 'generating evidence' => [[ + 'status' => EvidenceSnapshotStatus::Generating->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + ]], + 'failed evidence' => [[ + 'status' => EvidenceSnapshotStatus::Failed->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + ]], + 'partial evidence' => [[ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Partial->value, + ]], + 'complete evidence with missing dimensions' => [[ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 1, + 'stale_dimensions' => 0, + ], + ]], + 'complete evidence with no usable captured dimensions' => [[ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 0, + 'missing_dimensions' => 0, + 'stale_dimensions' => 0, + ], + ]], + 'complete evidence with stale dimensions' => [[ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 0, + 'stale_dimensions' => 1, + ], + ]], + 'expired evidence' => [[ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'expires_at' => now()->subMinute(), + ]], + 'superseded evidence' => [[ + 'status' => EvidenceSnapshotStatus::Superseded->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + ]], +]); + +it('Spec403 evidence overview exposes canonical proof states without overclaiming operation proof', function ( + string $status, + string $outcome, + string $expectedState, +): void { + $environment = ManagedEnvironment::factory()->create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); + + $run = OperationRun::factory()->forTenant($environment)->create([ + 'status' => $status, + 'outcome' => $outcome, + 'started_at' => now()->subMinutes(5), + 'completed_at' => $status === OperationRunStatus::Completed->value ? now()->subMinute() : null, + 'initiator_name' => 'Spec403 Operator', + ]); + + spec403EvidenceSnapshot($environment, [ + 'operation_run_id' => (int) $run->getKey(), + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'generated_at' => now()->subMinutes(2), + 'expires_at' => now()->addDay(), + ]); + + $payload = spec403EvidenceOverviewPayload($user, $environment); + $operationProof = collect($payload['proof_items'])->firstWhere('label', 'Operation proof'); + $operationCard = collect($payload['cards'])->firstWhere('label', 'Operation proof'); + $allowedStates = [ + 'Ready', + 'Not configured', + 'Running', + 'Failed', + 'Blocked', + 'Expired', + 'Needs attention', + 'Historical', + ]; + + expect($operationProof)->toBeArray() + ->and($operationProof['state'])->toBe($expectedState) + ->and($operationProof['url'])->toBeNull() + ->and($operationProof['actionLabel'])->toBeNull() + ->and($operationCard)->toBeArray() + ->and($operationCard['value'])->toBe($expectedState) + ->and($operationCard['url'])->toBeNull() + ->and($operationCard['description'])->not->toContain('Operation #') + ->and($payload['decision_card']['evidence'])->not->toContain('Operation #') + ->and($operationProof['description'])->toContain('Spec403 Operator') + ->and(array_values(array_diff(collect($payload['proof_items'])->pluck('state')->all(), $allowedStates)))->toBe([]) + ->and($operationProof['state'])->not->toBe('Available') + ->and($operationProof['state'])->not->toBe('Unknown'); +})->with([ + 'running operation' => [ + OperationRunStatus::Running->value, + OperationRunOutcome::Pending->value, + 'Running', + ], + 'succeeded operation' => [ + OperationRunStatus::Completed->value, + OperationRunOutcome::Succeeded->value, + 'Historical', + ], + 'partially succeeded operation' => [ + OperationRunStatus::Completed->value, + OperationRunOutcome::PartiallySucceeded->value, + 'Needs attention', + ], + 'blocked operation' => [ + OperationRunStatus::Completed->value, + OperationRunOutcome::Blocked->value, + 'Blocked', + ], + 'failed operation' => [ + OperationRunStatus::Completed->value, + OperationRunOutcome::Failed->value, + 'Failed', + ], + 'cancelled operation' => [ + OperationRunStatus::Completed->value, + OperationRunOutcome::Cancelled->value, + 'Failed', + ], + 'completed pending operation' => [ + OperationRunStatus::Completed->value, + OperationRunOutcome::Pending->value, + 'Needs attention', + ], +]); + +it('Spec403 evidence overview uses canonical states for missing proof flow steps', function (): void { + $environment = ManagedEnvironment::factory()->create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); + + $payload = spec403EvidenceOverviewPayload($user, $environment); + $states = collect($payload['readiness_flow'])->pluck('state')->all(); + $proofStates = collect($payload['proof_items'])->pluck('state')->all(); + $allowedStates = [ + 'Ready', + 'Not configured', + 'Running', + 'Failed', + 'Blocked', + 'Expired', + 'Needs attention', + 'Historical', + ]; + + expect($states)->toBe([ + 'Ready', + 'Not configured', + 'Blocked', + 'Blocked', + 'Not configured', + 'Not configured', + ]) + ->and(array_values(array_diff($proofStates, $allowedStates)))->toBe([]) + ->and($proofStates)->not->toContain('Available') + ->and($proofStates)->not->toContain('Unavailable') + ->and($proofStates)->not->toContain('Not generated') + ->and($proofStates)->not->toContain('Not applicable') + ->and($proofStates)->not->toContain('Proof incomplete') + ->and($proofStates)->not->toContain('Empty') + ->and($proofStates)->not->toContain('Collapsed') + ->and($proofStates)->not->toContain('Unknown'); +}); + +it('Spec403 evidence overview maps review pack proof lifecycle states canonically', function ( + string $status, + string $expectedState, +): void { + $environment = ManagedEnvironment::factory()->create(); + [$user, $environment] = createUserWithTenant(tenant: $environment, role: 'owner', workspaceRole: 'manager'); + + $snapshot = spec403EvidenceSnapshot($environment, [ + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'generated_at' => now()->subMinutes(2), + 'expires_at' => now()->addDay(), + ]); + + ReviewPack::factory()->create([ + 'managed_environment_id' => (int) $environment->getKey(), + 'workspace_id' => (int) $environment->workspace_id, + 'evidence_snapshot_id' => (int) $snapshot->getKey(), + 'status' => $status, + ]); + + $payload = spec403EvidenceOverviewPayload($user, $environment); + $reviewPackProof = collect($payload['proof_items'])->firstWhere('label', 'Review pack'); + $reviewPackCard = collect($payload['cards'])->firstWhere('label', 'Review pack'); + + expect($reviewPackProof)->toBeArray() + ->and($reviewPackProof['state'])->toBe($expectedState) + ->and($reviewPackCard)->toBeArray() + ->and($reviewPackCard['value'])->toBe($expectedState) + ->and($reviewPackProof['state'])->not->toBe('Queued') + ->and($reviewPackProof['state'])->not->toBe('Generating'); +})->with([ + 'queued review pack' => [ReviewPackStatus::Queued->value, 'Running'], + 'generating review pack' => [ReviewPackStatus::Generating->value, 'Running'], + 'failed review pack' => [ReviewPackStatus::Failed->value, 'Failed'], +]); + +/** + * @param array $attributes + */ +function spec403EvidenceSnapshot(ManagedEnvironment $environment, array $attributes = []): EvidenceSnapshot +{ + return EvidenceSnapshot::query()->create(array_replace([ + 'managed_environment_id' => (int) $environment->getKey(), + 'workspace_id' => (int) $environment->workspace_id, + 'status' => EvidenceSnapshotStatus::Active->value, + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => [ + 'dimension_count' => 2, + 'missing_dimensions' => 0, + 'stale_dimensions' => 0, + ], + 'generated_at' => now(), + 'expires_at' => now()->addDay(), + ], $attributes)); +} + +/** + * @return array + */ +function spec403EvidenceOverviewPayload(App\Models\User $user, ManagedEnvironment $environment): array +{ + setAdminPanelContext($environment); + session()->put(WorkspaceContext::SESSION_KEY, (int) $environment->workspace_id); + + return Livewire::withQueryParams([ + 'environment_id' => (int) $environment->getKey(), + ]) + ->actingAs($user) + ->test(EvidenceOverview::class) + ->instance() + ->evidenceDisclosurePayload(); +} diff --git a/apps/platform/tests/Feature/Navigation/WorkspaceHubClearFilterContractTest.php b/apps/platform/tests/Feature/Navigation/WorkspaceHubClearFilterContractTest.php index 529c08fc..ceeb8edf 100644 --- a/apps/platform/tests/Feature/Navigation/WorkspaceHubClearFilterContractTest.php +++ b/apps/platform/tests/Feature/Navigation/WorkspaceHubClearFilterContractTest.php @@ -20,6 +20,7 @@ use App\Models\ProviderConnection; use App\Models\User; use App\Support\EnvironmentReviewStatus; +use App\Support\Evidence\EvidenceCompletenessState; use App\Support\Evidence\EvidenceSnapshotStatus; use App\Support\Navigation\WorkspaceHubFilterStateResetter; use App\Support\Navigation\WorkspaceHubRegistry; @@ -303,7 +304,8 @@ function spec316ClearFilterEvidenceSnapshot(ManagedEnvironment $environment): Ev 'managed_environment_id' => (int) $environment->getKey(), 'workspace_id' => (int) $environment->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'completeness_state' => EvidenceCompletenessState::Complete->value, + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); } diff --git a/apps/platform/tests/Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php b/apps/platform/tests/Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php index af1585ee..447fbd9f 100644 --- a/apps/platform/tests/Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php +++ b/apps/platform/tests/Feature/Navigation/WorkspaceHubEnvironmentFilterContractTest.php @@ -301,7 +301,7 @@ function spec315SeedEnvironmentFilterWorkspace(): array 'workspace_id' => (int) $environmentA->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); $snapshotB = EvidenceSnapshot::query()->create([ @@ -309,7 +309,7 @@ function spec315SeedEnvironmentFilterWorkspace(): array 'workspace_id' => (int) $environmentB->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'generated_at' => now(), ]); diff --git a/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePackAccessTest.php b/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePackAccessTest.php index c4c2a1bf..bde28764 100644 --- a/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePackAccessTest.php +++ b/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePackAccessTest.php @@ -76,21 +76,23 @@ function suspendCustomerReviewWorkspacePackAccessWorkspace(ManagedEnvironment $t setAdminPanelContext(); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); - Livewire::actingAs($user) + $component = Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertSee(EnvironmentReviewResource::environmentScopedUrl('view', ['record' => $review->fresh()], $tenant), false) ->assertSee('Review pack') - ->assertSee('Available') + ->assertSee('Ready') ->assertSee('The current review package is available, meets the customer-safe output contract, and can be opened as a rendered report from the review detail.') - ->assertSee('Customer-safe review pack ready') ->assertSee('Download customer-safe review pack') ->assertSee('source_surface=customer_review_workspace', false) ->assertSee('tenant_filter_id', false) ->assertSee('Open review') + ->assertDontSee('Customer-safe review pack ready') ->assertDontSee('Generate pack') ->assertDontSee('Regenerate') ->assertDontSee('Expire snapshot') ->assertDontSee('Expire review pack'); + + expect($component->html())->toMatch('/]*>\s*Ready\s*<\/h2>/'); }); it('keeps the customer review workspace download action visible while suspended read-only', function (): void { @@ -165,7 +167,7 @@ function suspendCustomerReviewWorkspacePackAccessWorkspace(ManagedEnvironment $t Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertSee(EnvironmentReviewResource::environmentScopedUrl('view', ['record' => $review->fresh()], $tenant), false) - ->assertSee('Not available yet') + ->assertSee('Not configured') ->assertSee('Review Pack has not been generated for this released review yet.') ->assertDontSee('Download review pack') ->assertDontSee('Generate pack') @@ -207,13 +209,16 @@ function suspendCustomerReviewWorkspacePackAccessWorkspace(ManagedEnvironment $t setAdminPanelContext(); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); - Livewire::actingAs($user) + $component = Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertSee(EnvironmentReviewResource::environmentScopedUrl('view', ['record' => $review->fresh()], $tenant), false) - ->assertSee('Output not customer-ready') + ->assertSee('Needs attention') ->assertSee('Review blockers are still recorded for this output.') ->assertDontSee('Download internal preview') - ->assertSee('Available'); + ->assertDontSee('Output not customer-ready') + ->assertSee('Ready'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); }); it('shows preparing and unavailable review-pack states without download links', function (): void { @@ -255,9 +260,9 @@ function suspendCustomerReviewWorkspacePackAccessWorkspace(ManagedEnvironment $t Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertCanSeeTableRecords([$preparingTenant->fresh(), $failedTenant->fresh()]) - ->assertSee('Preparing') + ->assertSee('Running') ->assertSee('Review Pack is being prepared.') - ->assertSee('Unavailable') + ->assertSee('Failed') ->assertSee('Review Pack cannot be provided right now.') ->assertDontSee('Download review pack'); }); @@ -302,7 +307,7 @@ function suspendCustomerReviewWorkspacePackAccessWorkspace(ManagedEnvironment $t ->test(CustomerReviewWorkspace::class) ->assertCanSeeTableRecords([$expiredTenant->fresh(), $blockedTenant->fresh()]) ->assertSee('Expired') - ->assertSee('Unavailable') + ->assertSee('Blocked') ->assertDontSee('Download review pack'); }); diff --git a/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePageTest.php b/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePageTest.php index ed472c00..4d943855 100644 --- a/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePageTest.php +++ b/apps/platform/tests/Feature/Reviews/CustomerReviewWorkspacePageTest.php @@ -205,17 +205,17 @@ ->assertSee('Expiring soon') ->assertSee('Expired') ->assertSee('Pending approval') - ->assertSee('Needs review') + ->assertSee('Needs attention') ->assertDontSee('Operation proof') ->assertSee('Customer-safe follow-ups') ->assertSee('Review package index') ->assertSee('Disclosure rule') ->assertSee('Decision') - ->assertSee('Visible') + ->assertSee('Ready') ->assertSee('Diagnostics') - ->assertSee('Collapsed') + ->assertSee('Not configured') ->assertSee('Raw/support') - ->assertSee('Hidden') + ->assertSee('Blocked') ->assertSee('Support details stay on authorized diagnostic surfaces') ->assertSee('Customer acceptance checkpoint') ->assertSee('Open review') @@ -296,14 +296,14 @@ Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertSee('What is the current review pack output state?') - ->assertSee('Published with limitations') + ->assertSee('Needs attention') ->assertSee('Accepted-risk follow-up is recorded for this review') ->assertSee('The pack can be shared only with the accepted-risk context included in the customer handoff.') - ->assertSee('Needs review') + ->assertSee('Needs attention') ->assertSee('Follow-up required') ->assertSee('Accepted-risk follow-up is required.') ->assertSee('Open review') - ->assertSeeInOrder(['Published with limitations', 'Open review']) + ->assertSeeInOrder(['Needs attention', 'Open review']) ->assertDontSee('Download internal preview') ->assertDontSee('Ready to share'); }); @@ -365,15 +365,18 @@ setAdminPanelContext(); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); - Livewire::actingAs($user) + $component = Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertSee('What is the current review pack output state?') - ->assertSee('Output not customer-ready') + ->assertSee('Needs attention') ->assertSee('Review blockers are still recorded for this output.') ->assertDontSee('No operation proof linked') - ->assertSee('Available') + ->assertSee('Ready') + ->assertDontSee('Output not customer-ready') ->assertDontSee('Ready to share') ->assertDontSee('Download internal preview'); + + expect($component->html())->toMatch('/]*>\s*Needs attention\s*<\/h2>/'); }); it('shows the current released review using deterministic published review ordering', function (): void { @@ -570,7 +573,7 @@ ->assertSee('Accepted risks') ->assertSee('Accepted risk') ->assertSee('Included in the released review evidence basis.') - ->assertSee('Needs review') + ->assertSee('Needs attention') ->assertSee('Open review') ->assertDontSee('Ready for release') ->assertSee('Risk Owner') @@ -605,7 +608,7 @@ Livewire::actingAs($user) ->test(CustomerReviewWorkspace::class) ->assertSee('Decision trail') - ->assertSee('Unavailable') + ->assertSee('Not configured') ->assertSee('Customer-safe decision evidence is unavailable for this released review.') ->assertDontSee('raw evidence JSON') ->assertDontSee('legacy-fingerprint-abc123') diff --git a/apps/platform/tests/Unit/Evidence/Spec393EvidenceAnchorResolverTest.php b/apps/platform/tests/Unit/Evidence/Spec393EvidenceAnchorResolverTest.php index f88ed903..e2105d58 100644 --- a/apps/platform/tests/Unit/Evidence/Spec393EvidenceAnchorResolverTest.php +++ b/apps/platform/tests/Unit/Evidence/Spec393EvidenceAnchorResolverTest.php @@ -264,7 +264,7 @@ function spec393EvidenceSnapshot(ManagedEnvironment $tenant, array $attributes = 'workspace_id' => (int) $tenant->workspace_id, 'status' => EvidenceSnapshotStatus::Active->value, 'completeness_state' => EvidenceCompletenessState::Complete->value, - 'summary' => ['missing_dimensions' => 0, 'stale_dimensions' => 0], + 'summary' => ['dimension_count' => 5, 'missing_dimensions' => 0, 'stale_dimensions' => 0], 'fingerprint' => 'spec393-'.str()->uuid()->toString(), 'generated_at' => now(), ], $attributes)); diff --git a/specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/.gitkeep b/specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/.gitkeep new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/.gitkeep @@ -0,0 +1 @@ + diff --git a/specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/spec403-evidence-currentness-operation-proof-failed.png b/specs/403-evidence-anchor-currentness-runtime-closure/artifacts/screenshots/spec403-evidence-currentness-operation-proof-failed.png new file mode 100644 index 0000000000000000000000000000000000000000..1eff59c8c880c059abbb349150119e1f01327893 GIT binary patch literal 345604 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