'tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php', 'seconds' => 22.4], ['file' => 'tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php', 'seconds' => 21.1], ['file' => 'tests/Feature/Filament/BaselineActionAuthorizationTest.php', 'seconds' => 19.5], ['file' => 'tests/Feature/Findings/FindingBulkActionsTest.php', 'seconds' => 18.2], ['file' => 'tests/Feature/Findings/FindingWorkflowRowActionsTest.php', 'seconds' => 14.8], ['file' => 'tests/Feature/Findings/FindingWorkflowViewActionsTest.php', 'seconds' => 13.6], ['file' => 'tests/Feature/SettingsFoundation/WorkspaceSettingsManageTest.php', 'seconds' => 12.7], ['file' => 'tests/Feature/Guards/ActionSurfaceContractTest.php', 'seconds' => 11.9], ['file' => 'tests/Feature/Guards/OperationLifecycleOpsUxGuardTest.php', 'seconds' => 10.4], ['file' => 'tests/Feature/Filament/PolicyResourceAdminSearchParityTest.php', 'seconds' => 4.2], ]; } it('keeps lane artifact paths app-root relative under storage/logs/test-lanes', function (): void { $artifacts = TestLaneReport::artifactPaths('fast-feedback'); expect($artifacts)->toHaveKeys(['junit', 'summary', 'budget', 'report', 'profile']); foreach (array_values($artifacts) as $relativePath) { expect($relativePath)->toStartWith('storage/logs/test-lanes/'); } }); it('keeps only the skeleton file checked into the lane artifact directory', function (): void { $gitignore = base_path('storage/logs/test-lanes/.gitignore'); expect(file_exists($gitignore))->toBeTrue() ->and((string) file_get_contents($gitignore))->toContain('*') ->and((string) file_get_contents($gitignore))->toContain('!.gitignore'); }); it('publishes heavy attribution, contract, and coverage payloads under the canonical artifact root', function (): void { $durationsByFile = collect(heavyGovernanceSyntheticHotspots()) ->mapWithKeys(static fn (array $entry): array => [$entry['file'] => $entry['seconds']]) ->all(); $slowestEntries = collect(heavyGovernanceSyntheticHotspots()) ->map(static fn (array $entry): array => [ 'label' => $entry['file'].'::synthetic', 'subject' => $entry['file'].'::synthetic', 'filePath' => $entry['file'], 'durationSeconds' => $entry['seconds'], 'wallClockSeconds' => $entry['seconds'], 'laneId' => 'heavy-governance', ]) ->values() ->all(); $report = TestLaneReport::buildReport( laneId: 'heavy-governance', wallClockSeconds: 118.4, slowestEntries: $slowestEntries, durationsByFile: $durationsByFile, ); expect($report['artifactDirectory'])->toBe('storage/logs/test-lanes') ->and($report['slowestEntries'])->toHaveCount(10) ->and($report)->toHaveKeys([ 'budgetContract', 'hotspotInventory', 'decompositionRecords', 'slimmingDecisions', 'authorGuidance', 'inventoryCoverage', 'budgetSnapshots', 'budgetOutcome', 'remainingOpenFamilies', 'stabilizedFamilies', ]) ->and(collect($report['classificationAttribution'])->pluck('classificationId')->all()) ->toContain('ui-workflow', 'surface-guard', 'discovery-heavy') ->and(collect($report['familyAttribution'])->pluck('familyId')->all()) ->toContain( 'baseline-profile-start-surfaces', 'findings-workflow-surfaces', 'finding-bulk-actions-workflow', 'workspace-settings-slice-management', 'action-surface-contract', 'ops-ux-governance', ) ->and(collect($report['budgetEvaluations'])->pluck('targetType')->unique()->values()->all()) ->toEqualCanonicalizing(['lane', 'classification', 'family']) ->and($report['familyBudgetEvaluations'])->not->toBeEmpty() ->and($report['inventoryCoverage']['meetsInclusionRule'])->toBeTrue() ->and($report['inventoryCoverage']['inventoryFamilyCount'])->toBe(6) ->and($report['budgetSnapshots'])->toHaveCount(2) ->and($report['budgetOutcome'])->toHaveKeys([ 'decisionStatus', 'finalThresholdSeconds', 'remainingOpenFamilies', 'followUpDebt', ]); }); it('publishes the shared fixture slimming comparison only for the governed standard lanes', function (): void { $fastFeedback = TestLaneReport::buildReport( laneId: 'fast-feedback', wallClockSeconds: 176.73623, slowestEntries: [], durationsByFile: [], comparisonProfile: 'shared-test-fixture-slimming', ); $heavyGovernance = TestLaneReport::buildReport( laneId: 'heavy-governance', wallClockSeconds: 83.66, slowestEntries: [], durationsByFile: [], comparisonProfile: 'shared-test-fixture-slimming', ); expect($fastFeedback)->toHaveKey('sharedFixtureSlimmingComparison') ->and($heavyGovernance)->not->toHaveKey('sharedFixtureSlimmingComparison'); });