{ "schemaVersion": 3, "smokeGroup": "foundation-security", "specRoots": [ "cluster-mode", "specs", "specs-full" ], "commitBrowsers": [ "chromium" ], "nightlyBrowsers": [ "chromium", "firefox", "webkit" ], "commitBudgetMinutes": 130, "productionRoots": [ "*.go", "cmd/**", "deploy/**", "frontend/src/**", "internal/**", "packaging/**", "install.sh", "install.ps1" ], "unitOnlyPaths": [ "*_test.go", "cmd/**/*_test.go", "internal/**/*_test.go", "internal/**/testdata/**", "internal/testguard/**" ], "fullRunPaths": [ ".github/workflows/**", "Dockerfile", "assets_embed.go", "clusterflags.go", "e2e/harness/**", "e2e/package-lock.json", "e2e/package.json", "e2e/playwright.config.ts", "e2e/scripts/**", "e2e/suite.json", "flags.go", "frontend/package-lock.json", "frontend/src/App.tsx", "frontend/src/Root.tsx", "frontend/src/components/ActionGroup.tsx", "frontend/src/components/Announce.tsx", "frontend/src/components/CapabilityState.tsx", "frontend/src/components/DenseToolbar.tsx", "frontend/src/components/ErrorBoundary.tsx", "frontend/src/components/MovedToDesktop.tsx", "frontend/src/components/Toasts.tsx", "frontend/src/components/WorkspaceHeader.tsx", "frontend/src/components/icons.tsx", "frontend/src/lib/actions.ts", "frontend/src/lib/clipboard.ts", "frontend/src/lib/connection.ts", "frontend/src/lib/contexts.ts", "frontend/src/lib/controls.ts", "frontend/src/lib/feed.ts", "frontend/src/lib/http.ts", "frontend/src/lib/namespaceOffer.ts", "frontend/src/lib/object.ts", "frontend/src/lib/parse.ts", "frontend/src/lib/persist.ts", "frontend/src/lib/refs.ts", "frontend/src/lib/rows.ts", "frontend/src/lib/settings.ts", "frontend/src/lib/settingsSync.ts", "frontend/src/lib/tabs.ts", "frontend/src/lib/time.ts", "frontend/src/lib/types.ts", "frontend/src/lib/units.ts", "frontend/src/lib/unsaved.ts", "frontend/src/lib/update.ts", "frontend/src/lib/useNow.ts", "frontend/src/lib/usePoll.ts", "frontend/src/lib/view.ts", "frontend/src/lib/warningText.ts", "frontend/src/lib/wire.ts", "frontend/src/main.tsx", "frontend/src/store/access.ts", "frontend/src/store/catalog.ts", "frontend/src/store/cluster.ts", "frontend/src/store/clusters.ts", "frontend/src/store/contexts.ts", "frontend/src/store/filters.ts", "frontend/src/store/identity.ts", "frontend/src/store/namespace.ts", "frontend/src/store/panels.ts", "frontend/src/store/perCluster.ts", "frontend/src/store/recents.ts", "frontend/src/store/resources.ts", "frontend/src/store/session.ts", "frontend/src/store/settings.ts", "frontend/src/store/terminals.ts", "frontend/src/store/theme.ts", "frontend/src/store/toasts.ts", "frontend/src/vite-env.d.ts", "go.mod", "go.sum", "httpserver.go", "internal/api/**", "internal/atomicfile/**", "internal/cluster/**", "internal/commandbuffer/**", "internal/filetx/**", "internal/listerr/**", "internal/server/assets.go", "internal/server/auth.go", "internal/server/backend.go", "internal/server/guard.go", "internal/server/listen.go", "internal/server/policy.go", "internal/server/respond.go", "internal/server/routes.go", "internal/server/server.go", "internal/server/shutdown.go", "internal/server/update.go", "internal/server/view.go", "internal/server/ws.go", "internal/settings/**", "internal/toolpath/**", "internal/unstr/**", "internal/update/**", "internal/version/**", "justfile", "logging.go", "main.go", "main_desktop.go", "mise.lock", "mise.toml", "notices.go", "serve.go", "store.go", "update.go", "wails.json" ], "fullRunBudget": 96, "groups": [ { "id": "foundation-security", "label": "Foundation and security", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 45, "observedMinutes": 4, "specs": [ "specs/access.spec.ts", "specs/degrade.spec.ts", "specs/guard.spec.ts" ], "paths": [ "e2e/specs/access.spec.ts", "e2e/specs/degrade.spec.ts", "e2e/specs/guard.spec.ts", "frontend/src/components/ConnectionBanner.tsx", "frontend/src/components/KubeconfigBanner.tsx", "frontend/src/components/KubeconfigDialog.tsx", "frontend/src/components/SignIn.tsx", "frontend/src/components/SupportBundle.tsx", "frontend/src/components/Wordmark.tsx", "frontend/src/lib/access.ts", "frontend/src/lib/capabilities.ts", "frontend/src/lib/identity.ts", "frontend/src/lib/useAccess.ts", "frontend/src/lib/wsBase.ts", "frontend/src/store/clusterHealth.ts", "frontend/src/store/logs.ts", "internal/access/**", "internal/auth/**", "internal/kubeconfig/**", "internal/protect/**", "internal/server/access.go", "internal/server/capabilities.go", "internal/server/health.go", "internal/server/sinkwatch.go", "internal/server/support.go" ] }, { "id": "navigation-interaction", "label": "Navigation and interaction", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 8, "specs": [ "specs/navigation.spec.ts", "specs/palette.spec.ts", "specs/panels.spec.ts", "specs/settings.spec.ts", "specs/views.spec.ts" ], "paths": [ "e2e/specs/navigation.spec.ts", "e2e/specs/palette.spec.ts", "e2e/specs/panels.spec.ts", "e2e/specs/settings.spec.ts", "frontend/src/components/CommandPalette.tsx", "frontend/src/components/Notifications*.tsx", "frontend/src/components/Panel*.tsx", "frontend/src/components/ReadableNamespaces.tsx", "frontend/src/components/SaveViewButton.tsx", "frontend/src/components/SavedViewsList.tsx", "frontend/src/components/SettingsDialog.tsx", "frontend/src/components/Sidebar.tsx", "frontend/src/components/TopBar.tsx", "frontend/src/components/ViewSwitch.tsx", "frontend/src/components/Wordmark.tsx", "frontend/src/lib/containers.ts", "frontend/src/lib/customThemes.ts", "frontend/src/lib/defaultTheme.ts", "frontend/src/lib/hotkeys.ts", "frontend/src/lib/kindLabels.ts", "frontend/src/lib/namespaces.ts", "frontend/src/lib/palette.ts", "frontend/src/lib/panels.ts", "frontend/src/lib/platform.ts", "frontend/src/lib/pods.ts", "frontend/src/lib/router.ts", "frontend/src/lib/savedViews.ts", "frontend/src/lib/sidebar*.ts", "frontend/src/lib/theme*.ts", "frontend/src/lib/useAccess.ts", "frontend/src/lib/useDismissMenu.ts", "frontend/src/lib/useObjectDetail.ts", "frontend/src/lib/usePanelWidth.ts", "frontend/src/lib/useTrafficProbe.ts", "frontend/src/lib/version.ts", "frontend/src/lib/views.ts", "frontend/src/lib/wsBase.ts", "frontend/src/store/clusterHealth.ts", "frontend/src/store/forwards.ts", "frontend/src/store/logs.ts", "frontend/src/store/traffic.ts", "frontend/themes/**", "internal/server/savedviews.go", "internal/server/settings.go", "frontend/src/lib/openSaved.ts" ] }, { "id": "visual-accessibility", "label": "Visual and accessibility", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 16, "specs": [ "specs/zz-a11y.spec.ts", "specs-full/design-review.spec.ts", "specs-full/viewport.spec.ts" ], "paths": [ "frontend/src/index.css", "frontend/src/components/TooltipHost.tsx", "frontend/src/lib/contrast.ts", "frontend/src/lib/customThemes.ts", "frontend/src/lib/theme*.ts", "frontend/themes/**", "e2e/specs/zz-a11y.spec.ts", "e2e/specs-full/design-review.spec.ts", "frontend/src/lib/defaultTheme.ts", "frontend/src/lib/tooltip.ts", "e2e/specs-full/viewport.spec.ts", "frontend/src/lib/panels.ts", "frontend/src/store/panels.ts", "frontend/src/components/PanelHost.tsx", "frontend/src/components/PanelLayout.tsx" ] }, { "id": "resources-live-tables", "label": "Resources, live updates and tables", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 90, "observedMinutes": 7, "specs": [ "specs/crds.spec.ts", "specs/live.spec.ts", "specs/resources.spec.ts", "specs-full/scale.spec.ts" ], "paths": [ "internal/discovery/**", "internal/resources/**", "frontend/src/components/Column*.tsx", "frontend/src/components/FilterBar.tsx", "frontend/src/components/ResourceTable.tsx", "frontend/src/lib/catalog.ts", "frontend/src/lib/discovery.ts", "frontend/src/lib/filter*.ts", "frontend/src/lib/search.ts", "frontend/src/lib/tableState.ts", "e2e/specs/crds.spec.ts", "e2e/specs/live.spec.ts", "e2e/specs/resources.spec.ts", "e2e/specs-full/scale.spec.ts", "frontend/src/components/ContainerSquares.tsx", "frontend/src/components/CopyButton.tsx", "frontend/src/components/UsageBar.tsx", "frontend/src/lib/columnFit.ts", "frontend/src/lib/containers.ts", "frontend/src/lib/rowClick.ts", "frontend/src/lib/status.ts", "frontend/src/lib/useDismissMenu.ts", "frontend/src/lib/useElementWidth.ts", "internal/overview/**", "internal/podcount/**", "internal/server/catalog.go" ] }, { "id": "inspect-compare-rbac-topology", "label": "Inspect, compare, RBAC and topology", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 7, "specs": [ "specs/compare-rbac.spec.ts", "specs/inspect.spec.ts", "specs/secrets.spec.ts", "specs/topology.spec.ts" ], "paths": [ "internal/compare/**", "internal/inspect/**", "internal/jsonschema/**", "internal/rbac/**", "internal/topology/**", "frontend/src/components/ComparePanel.tsx", "frontend/src/components/Inspect*.tsx", "frontend/src/components/KindCompare.tsx", "frontend/src/components/Rbac.tsx", "frontend/src/components/TopologyGraph.tsx", "frontend/src/lib/compare.ts", "frontend/src/lib/rbac.ts", "frontend/src/lib/schema.ts", "frontend/src/lib/topology.ts", "e2e/specs/compare-rbac.spec.ts", "e2e/specs/inspect.spec.ts", "e2e/specs/secrets.spec.ts", "e2e/specs/topology.spec.ts", "frontend/src/components/CopyButton.tsx", "frontend/src/components/DataEntries.tsx", "frontend/src/components/DisabledActionReasons.tsx", "frontend/src/components/Graph*.tsx", "frontend/src/components/NodeShellButton.tsx", "frontend/src/components/Yaml*.tsx", "frontend/src/lib/actionAvailability.ts", "frontend/src/lib/entityLabel.ts", "frontend/src/lib/graph*.ts", "frontend/src/lib/logColor.ts", "frontend/src/lib/monaco.ts", "frontend/src/lib/openExternal.ts", "frontend/src/lib/scroll.ts", "frontend/src/lib/status.ts", "frontend/src/lib/useElementWidth.ts", "frontend/src/lib/useLogStream.ts", "frontend/src/lib/useObjectDetail.ts", "frontend/src/store/forwards.ts", "frontend/src/store/logs.ts", "internal/server/compare.go", "internal/server/objects.go", "internal/server/rbac.go", "internal/server/views.go" ] }, { "id": "mutations-protection-history", "label": "Mutations, protection and history", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 4, "specs": [ "specs/actions.spec.ts", "specs/guarded.spec.ts", "specs/history.spec.ts", "specs/recordings.spec.ts", "specs/rollout.spec.ts" ], "paths": [ "e2e/specs/actions.spec.ts", "e2e/specs/guarded.spec.ts", "e2e/specs/history.spec.ts", "e2e/specs/recordings.spec.ts", "frontend/src/components/BulkBar.tsx", "frontend/src/components/ConfirmByName.tsx", "frontend/src/components/DisabledActionReasons.tsx", "frontend/src/components/History.tsx", "frontend/src/components/InspectActions.tsx", "frontend/src/components/InspectObjectActions.tsx", "frontend/src/components/NodeShellButton.tsx", "frontend/src/components/Protection*.tsx", "frontend/src/components/RecordedSessions.tsx", "frontend/src/components/RolloutRevisions.tsx", "frontend/src/lib/actionAvailability.ts", "frontend/src/lib/history.ts", "frontend/src/lib/objectActions.ts", "frontend/src/lib/rollout.ts", "frontend/src/lib/transcripts.ts", "internal/actions/**", "internal/actions/rollout.go", "internal/rollout/**", "internal/server/history.go", "internal/server/historyexport.go", "internal/server/objects.go", "internal/server/rollout.go", "internal/server/transcript.go", "internal/store/**", "internal/store/mirror.go", "internal/transcript/**" ] }, { "id": "streams-terminals-forwards", "label": "Streams, terminals and forwards", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 5, "specs": [ "specs/exec.spec.ts", "specs/portforward.spec.ts", "specs/terminals.spec.ts" ], "paths": [ "internal/debugcontainer/**", "internal/exec/**", "internal/localshell/**", "internal/logs/**", "internal/nodeshell/**", "internal/portforward/**", "frontend/src/components/DebugPrompt.tsx", "frontend/src/components/ForwardsPanel.tsx", "frontend/src/components/Terminal*.tsx", "frontend/src/lib/exec.ts", "frontend/src/lib/portForward.ts", "frontend/src/lib/terminal.ts", "e2e/specs/exec.spec.ts", "e2e/specs/portforward.spec.ts", "e2e/specs/terminals.spec.ts", "frontend/src/components/CopyButton.tsx", "frontend/src/components/NodeShellButton.tsx", "frontend/src/lib/capabilities.ts", "frontend/src/lib/containers.ts", "frontend/src/lib/debugContainer.ts", "frontend/src/lib/logColor.ts", "frontend/src/lib/motion.ts", "frontend/src/lib/openExternal.ts", "frontend/src/lib/pods.ts", "frontend/src/lib/useLocalShell.ts", "frontend/src/lib/useLogStream.ts", "frontend/src/lib/useShellSupport.ts", "frontend/src/lib/wsBase.ts", "frontend/src/store/forwards.ts", "frontend/src/store/logs.ts", "internal/imagepin/**", "internal/server/exec.go", "internal/server/forwards.go", "internal/server/localshell.go" ] }, { "id": "checks-issues-worklist", "label": "Checks, issues and worklist", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 5, "specs": [ "specs/checks.spec.ts", "specs/audit-schedule.spec.ts", "specs/issues.spec.ts", "specs/posture.spec.ts", "specs/worklist.spec.ts" ], "paths": [ "e2e/specs/checks.spec.ts", "e2e/specs/audit-schedule.spec.ts", "e2e/specs/issues.spec.ts", "e2e/specs/worklist.spec.ts", "frontend/src/components/Checks.tsx", "frontend/src/components/FrameworkPosture.tsx", "frontend/src/components/IssueQueue.tsx", "frontend/src/lib/checks.ts", "frontend/src/lib/issues.ts", "frontend/src/store/issues.ts", "internal/baseline/**", "internal/checks/**", "internal/checks/cis.go", "internal/checks/sarif.go", "internal/faults/**", "internal/issues/**", "internal/server/auditschedule.go", "internal/server/baselines.go", "internal/server/export.go", "internal/server/exportformats.go", "internal/server/fleetchecks.go", "internal/server/frameworks.go", "internal/server/mutes.go", "internal/server/ready.go", "internal/server/rules.go", "internal/server/selfmetrics.go", "internal/server/settings.go", "internal/server/views.go", "internal/telemetry/**", "frontend/src/lib/severity.ts" ] }, { "id": "helm", "label": "Helm", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 90, "observedMinutes": 4, "specs": [ "specs/helm.spec.ts" ], "paths": [ "internal/charts/**", "internal/helm/**", "frontend/src/components/Helm*.tsx", "frontend/src/components/ReleasePanel.tsx", "frontend/src/lib/chart.ts", "frontend/src/lib/helm*.ts", "e2e/fixtures/chart/**", "e2e/specs/helm.spec.ts", "frontend/src/components/CopyButton.tsx", "frontend/src/components/DisabledActionReasons.tsx", "frontend/src/components/ManifestDiff.tsx", "frontend/src/components/YamlEditor.tsx", "frontend/src/lib/actionAvailability.ts", "frontend/src/lib/capabilities.ts", "frontend/src/lib/monaco.ts", "frontend/src/lib/useHelmAccess.ts", "frontend/src/store/helm*.ts", "internal/server/access.go", "internal/server/helm.go" ] }, { "id": "gitops", "label": "GitOps", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 120, "observedMinutes": 7, "specs": [ "specs-full/argo.spec.ts", "specs-full/flux.spec.ts", "specs-full/gitops.spec.ts" ], "paths": [ "internal/argocd/**", "internal/flux/**", "internal/gitops/**", "frontend/src/components/Argo*.tsx", "frontend/src/components/Flux*.tsx", "frontend/src/components/Gitops*.tsx", "frontend/src/lib/argo*.ts", "frontend/src/lib/flux*.ts", "frontend/src/lib/gitops*.ts", "e2e/fixtures/gitops.yaml", "e2e/specs-full/argo.spec.ts", "e2e/specs-full/flux.spec.ts", "e2e/specs-full/gitops.spec.ts", "frontend/src/components/Graph*.tsx", "frontend/src/lib/columnFit.ts", "frontend/src/lib/entityLabel.ts", "frontend/src/lib/graph*.ts", "frontend/src/lib/readiness.ts", "frontend/src/lib/useElementWidth.ts", "internal/server/fleetgitops.go", "internal/server/gitops.go" ] }, { "id": "observability-traffic", "label": "Observability and traffic", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 90, "observedMinutes": 3, "specs": [ "specs/metrics.spec.ts", "specs/traffic.spec.ts", "specs/waste.spec.ts" ], "paths": [ "e2e/fixtures/prometheus.yaml", "e2e/specs/metrics.spec.ts", "e2e/specs/traffic.spec.ts", "frontend/src/components/Graph*.tsx", "frontend/src/components/InspectMetrics.tsx", "frontend/src/components/Traffic.tsx", "frontend/src/components/Waste.tsx", "frontend/src/lib/capabilities.ts", "frontend/src/lib/graph*.ts", "frontend/src/lib/metrics*.ts", "frontend/src/lib/traffic*.ts", "frontend/src/lib/useTrafficProbe.ts", "frontend/src/lib/waste.ts", "frontend/src/store/traffic.ts", "internal/metrics/**", "internal/prom/**", "internal/samples/**", "internal/server/views.go", "internal/server/waste.go", "internal/traffic/**", "internal/waste/**" ] }, { "id": "multicluster-fleet", "label": "Multicluster and fleet", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 120, "observedMinutes": 7, "specs": [ "specs/clusters.spec.ts", "specs/fleet.spec.ts", "specs-full/twoclusters.spec.ts" ], "paths": [ "internal/clusterid/**", "internal/kube/**", "frontend/src/components/Cluster*.tsx", "frontend/src/components/ContextPicker.tsx", "frontend/src/components/Fleet.tsx", "frontend/src/lib/cluster*.ts", "frontend/src/lib/clusters.ts", "frontend/src/lib/fleet.ts", "e2e/specs/clusters.spec.ts", "e2e/specs/fleet.spec.ts", "e2e/specs-full/twoclusters.spec.ts", "frontend/src/components/EntityLabel.tsx", "frontend/src/components/KubeconfigDialog.tsx", "frontend/src/components/TabMenu.tsx", "frontend/src/components/UsageBar.tsx", "frontend/src/lib/entityLabel.ts", "frontend/src/lib/overview.ts", "frontend/src/lib/useDismissMenu.ts", "frontend/src/store/clusterHealth.ts", "frontend/src/store/forwards.ts", "internal/overview/**", "internal/server/clusters.go", "internal/server/contexts.go", "internal/server/fleet.go", "internal/server/fleetchecks.go", "internal/server/fleetgitops.go", "internal/server/fleetinventory.go", "internal/server/fleetlists.go", "internal/server/fleetoverview.go", "internal/server/timeline.go" ] }, { "id": "cluster-mode-auth", "label": "Cluster mode and authentication", "runner": "cluster-mode", "profile": "cluster-mode", "tier": "commit", "timeoutMinutes": 120, "observedMinutes": 10, "browserMinutes": 7, "specs": [ "cluster-mode/oidc.spec.ts", "cluster-mode/proxy.spec.ts", "cluster-mode/restart.spec.ts" ], "paths": [ "deploy/helm/spinoza/**", "docs/cluster-mode.md", "e2e/cluster-mode.config.ts", "e2e/cluster-mode/**", "flags.go", "frontend/src/components/UserMenu.tsx", "frontend/src/lib/identity.ts", "frontend/src/lib/useDismissMenu.ts", "internal/auth/**", "internal/server/auditstream.go", "internal/server/auth.go", "internal/server/drain.go", "internal/server/guard.go", "internal/server/measured.go", "internal/server/ready.go", "internal/server/requestid.go", "internal/server/support.go", "internal/store/mirror.go", "internal/telemetry/**", "logging.go", "main.go", "serve.go", "test/clustermode/**", "wiring.go" ] }, { "id": "outage", "label": "Cluster outage", "runner": "playwright", "profile": "core", "tier": "commit", "timeoutMinutes": 45, "observedMinutes": 4, "specs": [ "specs/outage.spec.ts" ], "paths": [ "frontend/src/components/ClusterBanner.tsx", "frontend/src/components/ConnectionBanner.tsx", "frontend/src/lib/feed.ts", "frontend/src/lib/health.ts", "frontend/src/store/clusterHealth.ts", "frontend/src/store/feed.ts", "internal/reach/**", "internal/server/health.go", "internal/server/ws.go", "e2e/specs/outage.spec.ts" ] }, { "id": "resilience-capacity-soak", "label": "Resilience, capacity and soak", "runner": "playwright", "profile": "full", "tier": "commit", "timeoutMinutes": 120, "observedMinutes": 6, "specs": [ "specs/resilience.spec.ts", "specs/capacity.spec.ts" ], "paths": [ "internal/reach/**", "internal/safe/**", "e2e/specs/resilience.spec.ts", "e2e/specs/capacity.spec.ts", "test/integration/faults_test.go", "internal/server/budget.go", "internal/server/health.go", "internal/server/memory.go", "internal/server/sinkwatch.go" ] }, { "id": "mcp-cli", "label": "MCP and CLI", "runner": "mcp-cli", "profile": "integration", "tier": "commit", "timeoutMinutes": 75, "observedMinutes": 4, "specs": [], "paths": [ "cmd/spinoza-mcp/**", "internal/mcp/**", "test/integration/mcp_test.go", "main.go" ] }, { "id": "distribution-desktop-install", "label": "Distribution, desktop and install", "runner": "distribution", "profile": "distribution", "tier": "nightly", "timeoutMinutes": 180, "observedMinutes": 1, "specs": [], "paths": [ ".github/workflows/install.yaml", ".github/workflows/release-artifacts.yaml", "Dockerfile", "install.ps1", "install.sh", "installer.go", "main_desktop.go", "packaging/**", "test/install/**", "test/packaging/**", "test/smoke.ps1", "wails.json" ] } ] }