From 831ad49ce1be6ff0bf81726b0a170250b56e5795 Mon Sep 17 00:00:00 2001 From: enyineer Date: Sat, 20 Jun 2026 11:08:30 +0200 Subject: [PATCH 01/23] feat: comprehensive review, hardening, and a platform-wide design-system rework A large, verified body of work bringing Checkstack up across six areas: correctness, security, testing, UX, docs, and AI - capped by a premium, consistent UI design language. Design system (premium UI rework) - New `@checkstack/ui` foundation: surface elevation tokens, aurora gradient, colorblind-safe status triad, density model (comfortable/compact) + provider and user toggle, polished skeleton/empty/error states, and honest token-driven chart primitives (time series, sparkline, radial gauge, request waterfall, uptime ribbon). - A signature aurora page-header + deeper cards, an elevated app shell, and reskinned dashboard / health-check / SLO views. - Every plugin frontend adopts the tokens, then its highest-impact surfaces are redesigned to a premium bar (depth, number-led hierarchy, multi-encoded status). Pure tone/format logic extracted into unit-tested modules. - All alerts unified onto one premium `Alert`; the duplicate `InfoBanner` is removed (BREAKING: use `Alert`). Security hardening - At-rest encryption with key rotation + fail-loud decryption, brute-force / token-timing fixes, HTTP-collector SSRF guard, fail-closed plugin supply-chain integrity pinning, SQL plugin-schema identifier hardening, notification email HTML sanitization, per-assignment satellite result authorization, and a first-run onboarding TOCTOU guard. Testing - A real end-to-end suite (Playwright + Testcontainers Postgres) covering the authenticated app, made a blocking CI job, plus extracted pure-logic unit tests throughout. UX & accessibility - All review-surfaced UX improvements: form quality across editors, mobile responsiveness and touch targets, accessible overlays/forms, list/loading/ empty/error state consistency, onboarding + point-of-use coaching, wider command-palette coverage, and sidebar IA. Refactors & docs - Typed router-factory args + structured logging, typed Drizzle JSON columns, shared formatting helpers, removal of boundary casts, and same-PR docs/AI updates. Reliability - Retune anomaly-detection defaults across every health-check strategy and the hardware collector for a low-noise posture: noisy or un-baselineable metrics (raw counts, config echoes, payload sizes, deterministic values) default to off, while latency, availability, and saturation-percent signals are kept and hardened with confirmation windows and practical-significance floors. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01XVkYp7R1AtNoBziSNUpTQE --- .../a11y-select-and-label-associations.md | 21 + .../ai-features-steering-and-conformance.md | 15 + .changeset/anomaly-default-posture-retune.md | 41 + .changeset/api-docs-muted-color-tokens.md | 11 + .changeset/auth-dialog-form-quality.md | 18 + .changeset/auth-rate-limit-prune-expired.md | 7 + .../automation-extract-error-message.md | 11 + .../command-palette-navigation-coverage.md | 30 + .changeset/confirmation-modal-typed-phrase.md | 21 + .changeset/consolidate-search-trigger-copy.md | 20 + .changeset/crypto-auth-depth-audit.md | 41 + .changeset/dependency-editor-form-quality.md | 13 + .changeset/design-system-rework.md | 68 + ...m-number-empty-and-array-remove-confirm.md | 5 + ...tion-key-rotation-and-fail-loud-decrypt.md | 38 + ...eedback-loading-empty-states-quick-wins.md | 31 + .changeset/fix-orphaned-modal-overlay.md | 23 + .../gate-feature-animations-low-power.md | 12 + .changeset/healthcheck-runs-kept-previous.md | 8 + .changeset/http-collector-ssrf-guard.md | 22 + .changeset/incident-editor-form-quality.md | 20 + .changeset/maintenance-editor-form-quality.md | 22 + .../mobile-anomaly-mute-touch-target.md | 6 + .changeset/mobile-cache-runtime-panel.md | 8 + .changeset/mobile-dependency-map-panels.md | 9 + .../mobile-healthcheck-tables-charts.md | 9 + .../mobile-integration-provider-docs.md | 8 + .../mobile-memory-delete-touch-target.md | 6 + ...bile-responsive-grids-and-touch-targets.md | 25 + .changeset/mobile-slo-trend-chart.md | 6 + ...tfound-recovery-and-infra-tab-deeplinks.md | 16 + .../notification-subject-render-helpers.md | 31 + .../notification-subject-render-html-label.md | 27 + .changeset/onboarding-help-affordances.md | 24 + .changeset/onboarding-toctou-guard.md | 13 + .../plugin-schema-identifier-hardening.md | 17 + .../plugin-supply-chain-integrity-pinning.md | 31 + .changeset/point-of-use-coaching.md | 34 + .changeset/remove-env-stash-casts.md | 18 + .changeset/responsive-data-tables.md | 17 + .changeset/responsive-tables-color-tokens.md | 23 + ...route-error-fallback-and-shell-boundary.md | 25 + .changeset/router-typed-args-and-logger.md | 21 + .../runtime-panel-formatting-and-states.md | 24 + .../sanitize-notification-email-html.md | 16 + .changeset/satellite-result-authorization.md | 17 + ...ave-blockers-and-unsaved-changes-guards.md | 22 + .../sidebar-navigation-ia-improvements.md | 31 + .changeset/slo-editor-form-quality.md | 27 + .../status-page-add-block-aria-label.md | 9 + .../status-page-overall-status-banner.md | 30 + .changeset/status-page-public-polish.md | 15 + .changeset/status-page-slugify-extract.md | 13 + .../test-and-tooling-only-no-release.md | 17 + .../toast-helper-adoption-plugin-frontends.md | 19 + .../toast-responsive-placement-stack-cap.md | 18 + .changeset/type-drizzle-json-columns.md | 17 + .changeset/ui-a11y-overlays-and-forms.md | 22 + .changeset/ui-shared-formatting-helpers.md | 24 + .changeset/ui-shared-ux-primitives.md | 18 + .../ui-token-and-focus-visible-polish.md | 13 + .changeset/ux-core-ui-consistency-sweep.md | 16 + .changeset/ux-list-states-and-polish.md | 24 + ...x-slo-healthcheck-formatting-and-states.md | 34 + .../ux-sweep-gitops-secrets-notification.md | 26 + .changeset/ux-tips-warning-token.md | 6 + .github/workflows/pr-checks.yml | 124 +- bun.lock | 295 +++- core/about-frontend/src/AboutHero.tsx | 80 + core/about-frontend/src/AboutPage.tsx | 247 +-- .../src/pluginTypeChip.logic.test.ts | 37 + .../src/pluginTypeChip.logic.ts | 59 + core/ai-backend/src/agent-runner.test.ts | 26 +- core/ai-backend/src/agent-runner.ts | 35 +- .../src/builtin-skills/builtin-skills.test.ts | 9 + core/ai-backend/src/builtin-skills/index.ts | 12 +- .../src/chat/chat-service.streamturn.test.ts | 52 +- core/ai-backend/src/chat/chat-service.ts | 72 +- core/ai-backend/src/chat/llm-provider.test.ts | 31 +- core/ai-backend/src/chat/llm-provider.ts | 37 +- .../src/chat/result-clamp.logic.test.ts | 40 + .../ai-backend/src/chat/result-clamp.logic.ts | 38 + core/ai-backend/src/chat/sdk-tools.test.ts | 152 ++ core/ai-backend/src/chat/sdk-tools.ts | 142 +- .../ai-backend/src/chat/system-prompt.test.ts | 80 +- core/ai-backend/src/chat/system-prompt.ts | 150 +- core/ai-backend/src/generated/docs-index.ts | 234 +-- .../src/mcp/mcp-conformance.it.test.ts | 132 +- core/ai-backend/src/mcp/server.test.ts | 280 +++- core/ai-backend/src/mcp/server.ts | 101 +- core/ai-backend/src/openai-provider.test.ts | 41 + core/ai-backend/src/openai-provider.ts | 19 +- core/ai-backend/src/tools/docs-tools.test.ts | 41 +- core/ai-backend/src/tools/docs-tools.ts | 12 +- core/ai-backend/src/tools/rank-docs.test.ts | 50 + core/ai-backend/src/tools/rank-docs.ts | 31 + core/ai-common/src/integration.ts | 39 + .../src/components/AppliedCardView.tsx | 69 +- .../src/components/ConfirmCardView.tsx | 111 +- .../ai-frontend/src/components/MemoryList.tsx | 6 +- .../src/components/SideBySideDiff.tsx | 2 +- .../src/components/tool-card-styles.ts | 52 + core/ai-frontend/src/pages/ChatPage.tsx | 133 +- core/ai-frontend/src/pages/SkillsPage.tsx | 89 +- .../src/components/AnnouncementBanner.tsx | 24 +- .../components/AnnouncementStatSummary.tsx | 51 + .../src/components/DashboardAnnouncements.tsx | 64 +- .../src/components/StatusPill.tsx | 63 + .../announcementStatus.logic.test.ts | 123 ++ .../components/announcementStatus.logic.ts | 101 ++ .../src/pages/AnnouncementManagePage.tsx | 278 ++-- .../src/components/AnomalyFieldMuteList.tsx | 13 +- .../AnomalyFieldOverridesEditor.tsx | 22 +- .../src/components/AnomalySettingsForm.tsx | 4 +- .../src/components/SystemAnomalyWidget.tsx | 151 +- .../src/components/anomalyTone.logic.test.ts | 44 + .../src/components/anomalyTone.logic.ts | 51 + core/api-docs-frontend/src/ApiDocsPage.tsx | 307 ++-- .../src/apiDocsStatus.logic.test.ts | 37 + .../src/apiDocsStatus.logic.ts | 46 + core/api-docs-frontend/src/apiDocsTone.ts | 31 + .../drizzle/0009_gifted_quasar.sql | 5 + .../drizzle/meta/0009_snapshot.json | 1424 +++++++++++++++++ core/auth-backend/drizzle/meta/_journal.json | 7 + .../better-auth-rate-limit-store.it.test.ts | 163 ++ .../src/better-auth-rate-limit-store.test.ts | 89 ++ .../src/better-auth-rate-limit-store.ts | 131 ++ core/auth-backend/src/config-schemas.test.ts | 86 + core/auth-backend/src/index.ts | 58 + core/auth-backend/src/router.test.ts | 67 +- core/auth-backend/src/router.ts | 40 +- core/auth-backend/src/schema.ts | 18 + .../src/utils/auth-error-redirect.test.ts | 60 + core/auth-common/src/schemas.test.ts | 60 + core/auth-common/src/schemas.ts | 47 + .../src/components/ApplicationsTab.tsx | 375 +++-- .../src/components/AuthLandingCard.tsx | 32 + .../src/components/LoginPage.tsx | 58 +- .../src/components/OnboardingPage.tsx | 85 +- .../src/components/ProfilePage.tsx | 30 +- .../src/components/RegisterPage.tsx | 75 +- .../src/components/ResourcePickerCombobox.tsx | 2 +- .../src/components/RoleDialog.tsx | 401 ++--- .../auth-frontend/src/components/RolesTab.tsx | 244 ++- .../src/components/ScopeToTeamDialog.tsx | 166 +- .../src/components/StrategiesTab.tsx | 20 +- .../src/components/TeamAccessEditor.tsx | 22 +- .../src/components/TeamCreateGrantsEditor.tsx | 5 +- .../src/components/TeamOwnershipPicker.tsx | 2 +- .../components/TeamResourceGrantsEditor.tsx | 12 +- .../auth-frontend/src/components/TeamsTab.tsx | 268 ++-- .../src/components/UserPickerCombobox.tsx | 2 +- .../auth-frontend/src/components/UsersTab.tsx | 236 ++- .../src/components/identity.logic.test.ts | 24 + .../src/components/identity.logic.ts | 25 + core/auth-frontend/src/index.tsx | 4 +- .../src/dispatch/dwell.test.ts | 36 +- core/automation-backend/src/dispatch/dwell.ts | 6 +- .../automation-backend/src/dispatch/engine.ts | 24 +- .../src/dispatch/stalled-sweeper.ts | 9 +- .../src/dispatch/state-scope.ts | 6 +- .../src/dispatch/trigger-subscriber.ts | 18 +- .../src/entity/on-entity-changed.ts | 3 +- core/automation-backend/src/index.ts | 158 +- .../components/RunAsServiceAccountPicker.tsx | 24 +- .../src/components/SaveBlockersSummary.tsx | 75 + .../src/editor/RunReplayPicker.tsx | 2 +- .../src/editor/blocking-issues.test.ts | 77 + .../src/editor/blocking-issues.ts | 68 + .../src/editor/condition-kind.ts | 2 +- .../src/pages/AutomationEditPage.tsx | 164 +- .../src/pages/AutomationListPage.tsx | 279 +++- .../pages/AutomationTemplatePickerPage.tsx | 58 +- .../src/pages/RunDetailPage.tsx | 121 +- .../src/pages/RunsPage.tsx | 172 +- .../src/pages/run-duration.test.ts | 36 + .../src/pages/run-duration.ts | 18 + .../src/pages/run-status-pill.tsx | 78 + core/backend-api/package.json | 2 + core/backend-api/src/bearer-token.test.ts | 58 + core/backend-api/src/encryption.test.ts | 210 +++ core/backend-api/src/encryption.ts | 263 ++- core/backend-api/src/index.ts | 1 + core/backend-api/src/markdown.test.ts | 38 + core/backend-api/src/markdown.ts | 56 +- core/backend-api/src/ssrf-guard.test.ts | 132 ++ core/backend-api/src/ssrf-guard.ts | 275 ++++ core/backend/drizzle/0002_cheerful_marvex.sql | 1 + core/backend/drizzle/meta/0002_snapshot.json | 450 ++++++ core/backend/drizzle/meta/_journal.json | 7 + core/backend/package.json | 1 + core/backend/scripts/reencrypt-secrets.ts | 159 ++ core/backend/src/index.ts | 6 +- core/backend/src/plugin-manager.ts | 27 +- .../src/plugin-manager/core-services.ts | 6 +- .../src/plugin-manager/plugin-loader.ts | 18 + core/backend/src/schema.ts | 14 +- .../src/services/config-service.test.ts | 127 +- core/backend/src/services/config-service.ts | 45 +- .../src/services/plugin-event-recorder.ts | 2 +- .../plugin-installers/github-installer.ts | 45 +- .../plugin-installers/integrity.test.ts | 199 +++ .../services/plugin-installers/integrity.ts | 255 +++ .../plugin-installers/npm-installer.ts | 33 +- .../reload-verification.test.ts | 73 + .../plugin-installers/reload-verification.ts | 51 + .../services/plugin-manager-orchestrator.ts | 7 +- .../src/services/queue-manager.test.ts | 342 ++++ .../src/services/reencrypt-secrets.test.ts | 176 ++ .../backend/src/services/reencrypt-secrets.ts | 199 +++ core/backend/src/utils/scoped-db.test.ts | 21 +- core/backend/src/utils/scoped-db.ts | 44 +- .../src/components/CacheConfigTab.tsx | 109 +- .../src/components/CacheEntriesTable.tsx | 209 +++ .../src/components/CacheRuntimePanel.tsx | 173 +- .../src/components/CacheRuntimeStats.tsx | 69 + .../src/components/cacheDisplay.logic.test.ts | 84 + .../src/components/cacheDisplay.logic.ts | 78 + core/catalog-backend/src/index.ts | 1 + core/catalog-backend/src/router.test.ts | 3 + core/catalog-backend/src/router.ts | 113 +- core/catalog-backend/src/schema.ts | 8 +- .../src/services/entity-service.it.test.ts | 131 ++ .../src/components/CatalogConfigPage.tsx | 94 +- .../src/components/CatalogPage.tsx | 27 +- .../src/components/ContactsEditor.tsx | 15 +- .../src/components/EnvironmentEditor.tsx | 4 +- .../src/components/GroupEditor.tsx | 6 +- .../src/components/SystemDetailPage.tsx | 257 ++- .../src/components/SystemEditor.tsx | 5 +- .../components/SystemEnvironmentsEditor.tsx | 6 +- .../src/components/SystemLinksEditor.tsx | 7 +- .../components/browse/CatalogGroupSection.tsx | 113 +- .../components/browse/CatalogSystemRow.tsx | 8 +- .../browse/healthRollup.logic.test.ts | 49 + .../components/browse/healthRollup.logic.ts | 26 + .../src/components/manage/EnvironmentsTab.tsx | 401 +++-- .../src/components/manage/GroupsTab.tsx | 402 +++-- .../src/components/manage/SystemsTab.tsx | 317 +++- core/command-backend/src/index.ts | 2 +- core/command-backend/src/router.ts | 18 +- .../src/components/NavbarSearch.tsx | 66 +- .../src/components/PaletteEmptyState.tsx | 35 + .../src/components/SearchDialog.tsx | 123 +- .../src/components/SearchResultRow.tsx | 88 + .../src/components/paletteChrome.ts | 19 + core/command-frontend/src/index.tsx | 28 + core/common/src/docs-links.ts | 4 + core/common/src/plugin-metadata.test.ts | 61 + core/common/src/plugin-metadata.ts | 35 +- core/dashboard-frontend/package.json | 1 + core/dashboard-frontend/src/Dashboard.tsx | 89 +- .../src/components/DashboardAllClear.tsx | 38 +- .../src/components/FleetHealthHeader.tsx | 227 ++- .../components/GettingStartedChecklist.tsx | 141 ++ .../src/components/ProblemSystemCard.tsx | 106 +- .../src/components/problemToneStyles.test.ts | 45 + .../src/components/problemToneStyles.ts | 58 + core/dashboard-frontend/tsconfig.json | 3 + core/dependency-backend/package.json | 1 + core/dependency-backend/src/index.ts | 20 + core/dependency-backend/tsconfig.json | 3 + .../src/components/DependencyAlert.tsx | 149 +- .../src/components/DependencyBadge.tsx | 40 +- .../src/components/DependencyEdgeForm.tsx | 16 +- .../src/components/DependencyEditor.tsx | 98 +- .../src/components/DependencyMapPage.tsx | 61 +- .../src/components/HealthCheckRulesEditor.tsx | 10 +- .../src/components/canvas/SystemNode.tsx | 189 +-- .../dependencyDisplay.logic.test.ts | 101 ++ .../src/components/dependencyDisplay.logic.ts | 126 ++ .../src/components/statusPill.logic.test.ts | 58 + .../src/components/statusPill.logic.ts | 107 ++ core/drizzle-helper/src/index.test.ts | 33 + core/drizzle-helper/src/index.ts | 22 + core/e2e/package.json | 6 +- core/e2e/playwright.config.ts | 64 +- core/e2e/scripts/run-all.ts | 55 +- core/e2e/scripts/shard.test.ts | 63 + core/e2e/scripts/shard.ts | 41 + core/e2e/scripts/with-e2e-postgres.ts | 69 + core/e2e/tests/about.spec.ts | 106 ++ core/e2e/tests/ai.spec.ts | 80 + core/e2e/tests/auth.spec.ts | 317 ++++ core/e2e/tests/automation.spec.ts | 37 +- core/e2e/tests/cache.spec.ts | 132 ++ core/e2e/tests/catalog.spec.ts | 62 +- core/e2e/tests/command.spec.ts | 140 ++ core/e2e/tests/dashboard.spec.ts | 148 ++ core/e2e/tests/dependency.spec.ts | 8 +- core/e2e/tests/healthcheck.spec.ts | 6 +- core/e2e/tests/incident.spec.ts | 19 +- core/e2e/tests/maintenance.spec.ts | 21 +- core/e2e/tests/member.setup.ts | 37 + core/e2e/tests/navigation.spec.ts | 7 +- core/e2e/tests/permissions.spec.ts | 59 + core/e2e/tests/queue.spec.ts | 154 ++ core/e2e/tests/script-packages.spec.ts | 204 +++ core/e2e/tests/slo.spec.ts | 49 +- core/e2e/tests/status-page.spec.ts | 108 ++ core/e2e/tests/support/auth.ts | 39 +- core/e2e/tests/theme.spec.ts | 165 ++ .../src/components/LazyContribution.tsx | 39 +- core/frontend/package.json | 1 + core/frontend/src/App.tsx | 105 +- core/frontend/src/components/HelpMenu.tsx | 168 ++ .../src/components/Sidebar.logic.test.ts | 15 + core/frontend/src/components/Sidebar.logic.ts | 16 +- core/frontend/src/components/Sidebar.tsx | 196 ++- core/frontend/src/main.tsx | 10 +- core/frontend/tailwind-preset.js | 33 + core/frontend/tsconfig.json | 3 + core/gitops-backend/src/index.ts | 28 + .../src/components/GitOpsLockBanner.tsx | 2 +- .../src/components/ProvenanceStatus.tsx | 214 ++- .../src/components/ProviderEditor.tsx | 2 +- .../src/components/ProviderList.tsx | 63 +- .../src/components/SecretList.tsx | 60 +- .../providerSyncHealth.logic.test.ts | 34 + .../components/providerSyncHealth.logic.ts | 36 + .../src/components/statusTone.ts | 51 + core/gitops-frontend/src/index.tsx | 2 +- .../src/pages/KindRegistryPage.tsx | 399 +---- .../src/pages/kindRegistryYaml.logic.test.ts | 237 +++ .../src/pages/kindRegistryYaml.logic.ts | 421 +++++ .../src/health-entity-id.test.ts | 73 + .../src/auto-charts/AutoChartGrid.tsx | 23 +- .../src/auto-charts/SingleRunChartGrid.tsx | 73 +- .../src/components/AggregatedDataBanner.tsx | 6 +- .../src/components/ExpandedResultView.tsx | 108 +- .../src/components/HealthCheckDiagram.tsx | 6 +- .../src/components/HealthCheckDrawer.tsx | 201 ++- .../src/components/HealthCheckHistory.tsx | 73 +- .../components/HealthCheckLatencyChart.tsx | 231 ++- .../src/components/HealthCheckList.tsx | 52 +- .../src/components/HealthCheckRunsTable.tsx | 178 ++- .../src/components/HealthCheckSparkline.tsx | 69 +- .../components/HealthCheckSystemOverview.tsx | 110 +- .../src/components/HealthStatusPill.tsx | 35 + .../components/assignments/ExecutionPanel.tsx | 4 +- .../components/assignments/GeneralPanel.tsx | 4 +- .../assignments/NotificationsPanel.tsx | 6 +- .../assignments/PlatformDefaultsDialog.tsx | 8 +- .../components/assignments/RetentionPanel.tsx | 4 +- .../assignments/ThresholdsPanel.tsx | 4 +- .../src/components/editor/GeneralSection.tsx | 6 +- .../components/editor/SaveBlockersSummary.tsx | 72 + .../src/components/editor/SystemsSection.tsx | 12 +- .../healthcheckDisplay.logic.test.ts | 114 ++ .../components/healthcheckDisplay.logic.ts | 163 ++ .../src/pages/AssignmentIDEPage.tsx | 33 +- .../src/pages/HealthCheckConfigPage.tsx | 52 +- .../src/pages/HealthCheckIDEPage.tsx | 101 +- core/incident-backend/src/cache.test.ts | 229 +++ core/incident-backend/src/index.ts | 6 +- core/incident-backend/src/router.ts | 31 +- .../src/components/IncidentEditor.tsx | 177 +- .../src/components/IncidentUpdateForm.tsx | 14 +- .../src/components/SystemIncidentPanel.tsx | 89 +- .../src/pages/IncidentConfigPage.tsx | 316 ++-- .../src/pages/IncidentDetailPage.tsx | 185 ++- .../src/pages/SystemIncidentHistoryPage.tsx | 166 +- .../src/utils/badges.logic.test.ts | 51 + .../src/utils/badges.logic.ts | 107 ++ core/incident-frontend/src/utils/badges.tsx | 88 +- .../src/utils/incident.logic.test.ts | 152 ++ .../src/utils/incident.logic.ts | 105 ++ .../src/components/AccessDeniedCard.tsx | 24 + .../src/components/InfrastructureTabRail.tsx | 68 + core/infrastructure-frontend/src/index.tsx | 2 +- .../src/pages/InfrastructureConfigPage.tsx | 62 +- core/integration-backend/src/index.ts | 13 +- .../src/with-timeout.test.ts | 43 +- .../src/components/ProviderCard.tsx | 84 + .../src/components/ProviderDocumentation.tsx | 89 +- .../components/connectionStatus.logic.test.ts | 41 + .../src/components/connectionStatus.logic.ts | 72 + core/integration-frontend/src/index.tsx | 2 +- .../src/pages/IntegrationsLandingPage.tsx | 57 +- .../src/pages/ProviderConnectionsPage.tsx | 232 ++- core/maintenance-backend/src/index.ts | 8 +- core/maintenance-backend/src/router.ts | 31 +- .../src/components/MaintenanceEditor.tsx | 625 +++++--- .../components/MaintenanceScheduleHero.tsx | 35 + .../src/components/MaintenanceUpdateForm.tsx | 8 +- .../src/components/MaintenanceWindowHero.tsx | 63 + .../src/components/SystemMaintenancePanel.tsx | 36 +- .../maintenanceEditor.logic.test.ts | 103 ++ .../src/components/maintenanceEditor.logic.ts | 69 + .../maintenanceWindowHero.logic.test.ts | 50 + .../src/pages/MaintenanceConfigPage.tsx | 208 ++- .../src/pages/MaintenanceDetailPage.tsx | 54 +- .../pages/SystemMaintenanceHistoryPage.tsx | 181 ++- .../src/pages/maintenanceConfig.logic.test.ts | 61 + .../src/pages/maintenanceConfig.logic.ts | 45 + .../maintenance-frontend/src/utils/badges.tsx | 106 +- .../src/utils/duration.test.ts | 75 + .../src/utils/duration.ts | 60 + core/notification-backend/package.json | 1 + .../src/delivery-attempts.test.ts | 18 +- core/notification-backend/src/index.ts | 64 +- .../src/oauth-callback-handler.ts | 9 +- core/notification-backend/src/render.ts | 22 +- core/notification-backend/src/router.test.ts | 56 +- core/notification-backend/src/router.ts | 33 +- core/notification-backend/tsconfig.json | 3 + core/notification-common/src/index.ts | 1 + .../src/subject-render.test.ts | 184 +++ .../notification-common/src/subject-render.ts | 200 +++ .../src/components/CollapsedGroupTimeline.tsx | 19 +- .../src/components/NotificationSubjects.tsx | 8 +- .../NotificationSubscriptionsManager.tsx | 13 +- .../src/components/StatusPill.tsx | 31 + .../components/SubjectKindRegistry.test.ts | 33 + .../src/components/SubscriptionRow.tsx | 17 +- .../src/components/UserChannelCard.tsx | 96 +- .../src/components/collapse.test.ts | 93 ++ .../notificationDisplay.logic.test.ts | 86 + .../components/notificationDisplay.logic.ts | 121 ++ core/notification-frontend/src/index.tsx | 2 +- .../src/pages/DeliveryAttemptsPage.tsx | 178 ++- .../src/pages/NotificationSettingsPage.tsx | 100 +- .../src/pages/NotificationsPage.tsx | 297 ++-- .../src/components/PluginStatusPill.tsx | 27 + .../src/components/TypedConfirmModal.tsx | 127 -- .../src/components/eventDisplay.logic.test.ts | 24 + .../src/components/eventDisplay.logic.ts | 55 + .../components/pluginDisplay.logic.test.ts | 49 + .../src/components/pluginDisplay.logic.ts | 59 + core/pluginmanager-frontend/src/index.tsx | 2 +- .../src/pages/InstallPluginPage.tsx | 61 +- .../src/pages/InstalledPluginsPage.tsx | 210 ++- .../src/pages/PluginEventsPage.tsx | 194 ++- .../src/components/CountTile.tsx | 56 + .../src/components/JobStatePill.tsx | 12 + .../src/components/QueueRuntimePanel.tsx | 307 ++-- .../src/components/jobDisplay.logic.test.ts | 37 + .../src/components/jobDisplay.logic.ts | 55 + core/satellite-backend/package.json | 1 + core/satellite-backend/src/index.ts | 21 + .../src/satellite-ws-handler.test.ts | 97 ++ .../src/satellite-ws-handler.ts | 67 +- core/satellite-backend/src/service.test.ts | 30 + core/satellite-backend/src/service.ts | 23 +- core/satellite-backend/tsconfig.json | 3 + .../src/components/CreateSatelliteDialog.tsx | 6 +- .../src/components/FleetSummaryStrip.tsx | 86 + .../components/RotateSatelliteTokenDialog.tsx | 8 +- .../src/components/SatelliteMobileCard.tsx | 98 ++ .../src/components/SatelliteStatusBadge.tsx | 36 +- .../src/components/fleetSummary.logic.test.ts | 34 + .../src/components/fleetSummary.logic.ts | 30 + .../src/pages/SatelliteListPage.tsx | 216 ++- core/script-packages-backend/package.json | 1 + core/script-packages-backend/src/index.ts | 112 +- core/script-packages-backend/tsconfig.json | 3 + .../src/components/PackageVersionCombobox.tsx | 2 +- .../src/components/StatusPill.tsx | 25 + .../src/components/SummaryPanel.tsx | 84 + .../src/components/SurfaceList.tsx | 40 + core/script-packages-frontend/src/index.tsx | 4 +- .../src/pages/ScriptPackagesSettingsPage.tsx | 272 ++-- .../src/pages/status-display.test.ts | 89 ++ .../src/pages/status-display.ts | 114 ++ core/secrets-backend/package.json | 1 + core/secrets-backend/src/index.ts | 58 +- core/secrets-backend/tsconfig.json | 3 + .../src/components/BackendConfigCard.tsx | 78 +- .../src/components/SecretRow.tsx | 95 ++ .../components/SecretsInventorySummary.tsx | 55 + .../src/components/secretToneStyles.ts | 32 + .../components/secretsDisplay.logic.test.ts | 125 ++ .../src/components/secretsDisplay.logic.ts | 68 + core/secrets-frontend/src/index.tsx | 2 +- .../src/pages/SecretsSettingsPage.tsx | 62 +- core/slo-backend/src/cache.test.ts | 131 ++ core/slo-backend/src/service.it.test.ts | 217 +++ .../slo-backend/src/streak-calculator.test.ts | 333 ++++ core/slo-backend/src/weekly-digest.test.ts | 225 +++ core/slo-backend/src/weekly-digest.ts | 2 +- .../src/components/AchievementBadge.tsx | 8 +- .../src/components/AttributionChart.tsx | 4 +- .../src/components/BurnRateIndicator.tsx | 15 +- .../components/DependencyExclusionConfig.tsx | 6 +- .../src/components/DowntimeTimeline.tsx | 19 +- .../src/components/ErrorBudgetBar.tsx | 48 +- .../slo-frontend/src/components/SloEditor.tsx | 669 +++++--- .../src/components/SloObjectiveCard.tsx | 133 ++ .../src/components/SloTrendChart.tsx | 21 +- .../src/components/StreakCounter.tsx | 24 +- .../src/components/SystemSloPanel.tsx | 8 +- .../src/components/sloDisplay.logic.test.ts | 181 +++ .../src/components/sloDisplay.logic.ts | 162 ++ .../src/components/sloEditor.logic.test.ts | 152 ++ .../src/components/sloEditor.logic.ts | 147 ++ core/slo-frontend/src/pages/SloConfigPage.tsx | 58 +- core/slo-frontend/src/pages/SloDetailPage.tsx | 8 +- .../src/pages/SloOverviewPage.tsx | 91 +- core/status-page-backend/package.json | 1 + .../src/content-widgets.test.ts | 117 ++ core/status-page-backend/src/index.ts | 20 + core/status-page-backend/src/service.test.ts | 61 + core/status-page-backend/src/service.ts | 5 + .../src/widget-registry.test.ts | 92 ++ core/status-page-backend/tsconfig.json | 3 + core/status-page-common/src/index.ts | 1 + .../src/overall-status.test.ts | 222 +++ core/status-page-common/src/overall-status.ts | 128 ++ core/status-page-common/src/schemas.ts | 6 + .../src/pages/PublicStatusPage.tsx | 149 +- .../src/pages/StatusPageBuilderPage.tsx | 178 ++- .../src/pages/StatusPagesListPage.tsx | 71 +- core/status-page-frontend/src/renderers.tsx | 201 ++- .../src/utils/slugify.test.ts | 34 + .../status-page-frontend/src/utils/slugify.ts | 12 + core/test-utils-backend/package.json | 7 +- core/test-utils-backend/src/index.ts | 6 + core/test-utils-backend/src/with-test-db.ts | 130 ++ .../src/components/DensityToggleMenuItem.tsx | 41 + core/theme-frontend/src/index.tsx | 7 + core/tips-frontend/src/components/Tip.tsx | 18 +- .../src/components/TipBanner.tsx | 32 +- .../src/hooks/useResetAllTips.ts | 64 + core/tips-frontend/src/index.tsx | 2 + core/ui/package.json | 1 + core/ui/src/components/Alert.tsx | 140 +- core/ui/src/components/Breadcrumb.tsx | 86 + core/ui/src/components/Card.tsx | 4 +- core/ui/src/components/CommandPalette.tsx | 27 +- .../ConfirmationModal.logic.test.ts | 95 ++ core/ui/src/components/ConfirmationModal.tsx | 239 +-- core/ui/src/components/CopyableValue.tsx | 100 ++ .../components/DensityProvider.logic.test.ts | 63 + .../src/components/DensityProvider.logic.ts | 49 + core/ui/src/components/DensityProvider.tsx | 109 ++ core/ui/src/components/Dialog.tsx | 7 +- .../components/DynamicForm/DynamicForm.tsx | 10 +- .../src/components/DynamicForm/FormField.tsx | 198 ++- .../DynamicForm/MultiTypeEditorField.tsx | 2 +- .../DynamicForm/SecretEnvEditor.tsx | 2 +- core/ui/src/components/DynamicForm/types.ts | 11 + .../src/components/DynamicForm/utils.test.ts | 92 ++ core/ui/src/components/DynamicForm/utils.ts | 46 + core/ui/src/components/EditableText.tsx | 2 +- core/ui/src/components/EmptyState.tsx | 17 +- core/ui/src/components/ErrorState.tsx | 78 + core/ui/src/components/FormError.tsx | 35 + core/ui/src/components/IDELayout/index.tsx | 8 +- core/ui/src/components/InfoBanner.tsx | 97 -- core/ui/src/components/Input.tsx | 46 +- .../ui/src/components/InstanceScopeBanner.tsx | 30 +- core/ui/src/components/Label.tsx | 46 +- core/ui/src/components/LinksEditor.tsx | 2 +- core/ui/src/components/LoadingSpinner.tsx | 2 +- core/ui/src/components/NavItem.tsx | 14 +- core/ui/src/components/NotFound.tsx | 112 +- core/ui/src/components/Page.tsx | 100 +- core/ui/src/components/PageLayout.tsx | 16 + core/ui/src/components/ScriptTestPanel.tsx | 4 +- core/ui/src/components/SearchShortcutHint.tsx | 38 + core/ui/src/components/Sheet.tsx | 8 +- core/ui/src/components/Skeleton.tsx | 57 +- core/ui/src/components/StatusCard.tsx | 16 +- core/ui/src/components/TerminalFeed.tsx | 10 +- core/ui/src/components/Toast.tsx | 2 +- .../components/ToastProvider.logic.test.ts | 53 + core/ui/src/components/ToastProvider.tsx | 39 +- core/ui/src/components/Tooltip.tsx | 70 +- core/ui/src/components/charts/RadialGauge.tsx | 201 +++ .../components/charts/RequestWaterfall.tsx | 112 ++ core/ui/src/components/charts/Sparkline.tsx | 121 ++ .../src/components/charts/TimeSeriesChart.tsx | 324 ++++ .../ui/src/components/charts/UptimeRibbon.tsx | 93 ++ .../src/components/charts/chart-math.test.ts | 253 +++ core/ui/src/components/charts/chart-math.ts | 384 +++++ core/ui/src/components/charts/index.ts | 51 + .../src/components/overlayAnimation.test.ts | 29 + core/ui/src/components/overlayAnimation.ts | 26 + core/ui/src/components/searchTrigger.ts | 26 + core/ui/src/components/stateFootprint.test.ts | 25 + core/ui/src/components/stateFootprint.ts | 29 + core/ui/src/formatting/date.test.ts | 93 ++ core/ui/src/formatting/date.ts | 75 + core/ui/src/formatting/duration.test.ts | 56 + core/ui/src/formatting/duration.ts | 48 + core/ui/src/formatting/index.ts | 20 + core/ui/src/formatting/number.test.ts | 103 ++ core/ui/src/formatting/number.ts | 106 ++ core/ui/src/formatting/relativeTime.test.ts | 38 + core/ui/src/formatting/relativeTime.ts | 30 + core/ui/src/hooks/useKeptPrevious.test.ts | 36 + core/ui/src/hooks/useKeptPrevious.ts | 66 + core/ui/src/hooks/useUnsavedChanges.test.ts | 34 + core/ui/src/hooks/useUnsavedChanges.ts | 92 ++ core/ui/src/index.ts | 11 +- core/ui/src/themes.css | 125 +- core/ui/src/utils.ts | 18 + core/ui/stories/Breadcrumb.stories.tsx | 42 + core/ui/stories/ConfirmationModal.stories.tsx | 15 +- core/ui/stories/CopyableValue.stories.tsx | 45 + core/ui/stories/DensityProvider.stories.tsx | 81 + core/ui/stories/EmptyState.stories.tsx | 40 + core/ui/stories/ErrorState.stories.tsx | 39 + core/ui/stories/FormError.stories.tsx | 41 + core/ui/stories/InfoBanner.stories.tsx | 41 - core/ui/stories/Input.stories.tsx | 22 + core/ui/stories/Label.stories.tsx | 13 + core/ui/stories/Skeleton.stories.tsx | 31 +- core/ui/stories/Tooltip.stories.tsx | 28 +- .../ui/stories/charts/RadialGauge.stories.tsx | 97 ++ .../charts/RequestWaterfall.stories.tsx | 48 + core/ui/stories/charts/Sparkline.stories.tsx | 97 ++ .../charts/TimeSeriesChart.stories.tsx | 94 ++ .../stories/charts/UptimeRibbon.stories.tsx | 62 + core/ui/stories/charts/sample-data.ts | 107 ++ core/ui/tailwind.config.js | 33 + .../content/docs/developer-guide/ai/chat.md | 20 +- .../docs/developer-guide/ai/mcp-server.md | 29 +- .../content/docs/developer-guide/ai/memory.md | 2 +- .../developer-guide/ai/oauth-and-scopes.md | 2 +- .../docs/developer-guide/ai/propose-apply.md | 4 +- .../docs/developer-guide/ai/system-issues.md | 2 +- .../docs/developer-guide/ai/tool-registry.md | 6 + .../architecture/alert-silencing.md | 16 +- .../architecture/packages-vs-plugins.md | 2 +- .../architecture/plugin-distribution.md | 116 +- .../architecture/plugin-system.md | 12 +- .../developer-guide/architecture/satellite.md | 164 ++ .../architecture/status-pages.md | 31 +- .../architecture/users-and-teams.md | 172 +- .../developer-guide/backend/cache-system.md | 24 +- .../developer-guide/backend/config-service.md | 5 +- .../backend/gitops/entity-kinds.md | 10 +- .../backend/healthchecks/anomaly-detection.md | 111 +- .../backend/healthchecks/collectors.md | 2 +- .../backend/integrations/events.md | 2 +- .../backend/integrations/system.md | 2 +- .../backend/notifications/strategies.md | 68 +- .../backend/notifications/subscriptions.md | 24 +- .../developer-guide/backend/observability.md | 10 +- .../backend/plugin-hook-policy.md | 14 +- .../docs/developer-guide/backend/plugins.md | 6 +- .../developer-guide/backend/queue-system.md | 2 +- .../docs/developer-guide/backend/signals.md | 22 +- .../docs/developer-guide/backend/teams.md | 308 ++-- .../backend/versioned-configs.md | 2 +- .../docs/developer-guide/common/plugins.md | 4 +- .../frontend/extension-points.md | 18 +- .../frontend/infrastructure-config.md | 16 +- .../developer-guide/frontend/list-states.md | 40 +- .../frontend/optimistic-updates.md | 38 +- .../docs/developer-guide/frontend/plugins.md | 14 +- .../frontend/query-invalidation.md | 20 +- .../docs/developer-guide/frontend/routing.md | 2 +- .../docs/developer-guide/frontend/tips.md | 10 +- .../getting-started/contributing.md | 8 +- .../getting-started/plugin-development.md | 42 +- .../content/docs/developer-guide/index.mdx | 5 + .../testing/integration-lane.md | 65 +- .../developer-guide/tooling/changesets.md | 1 + .../tooling/dependency-linter.md | 8 +- .../docs/developer-guide/tooling/sdk.md | 4 +- .../tooling/security-maintenance.md | 170 ++ .../docs/user-guide/concepts/environments.md | 6 +- .../docs/user-guide/concepts/gitops.md | 2 +- .../docs/user-guide/concepts/health-checks.md | 8 +- .../docs/user-guide/concepts/incidents.md | 2 +- .../docs/user-guide/concepts/integrations.md | 2 +- .../docs/user-guide/concepts/maintenances.md | 2 +- .../docs/user-guide/concepts/notifications.md | 2 +- .../docs/user-guide/concepts/overview.md | 2 +- .../docs/user-guide/concepts/satellites.md | 6 +- .../user-guide/concepts/systems-and-groups.md | 4 +- .../user-guide/concepts/teams-and-access.md | 4 +- .../user-guide/installation/kubernetes.md | 2 +- .../docs/user-guide/reference/api-keys.md | 4 +- .../reference/authentication-strategies.md | 18 +- .../user-guide/reference/public-rest-api.md | 2 +- .../user-guide/reference/secret-encryption.md | 62 +- .../troubleshooting/installation.md | 2 +- eslint.config.mjs | 10 + .../src/memory-cache.test.ts | 38 +- .../src/collectors/cpu.ts | 48 +- .../src/collectors/disk.ts | 25 +- .../src/collectors/memory.ts | 38 +- .../src/lookup-collector.ts | 26 +- .../healthcheck-dns-backend/src/strategy.ts | 30 +- .../src/health-collector.ts | 20 +- .../healthcheck-grpc-backend/src/strategy.ts | 31 +- .../src/request-collector.ts | 20 +- .../src/strategy.test.ts | 123 +- .../healthcheck-http-backend/src/strategy.ts | 75 +- .../src/collectors/build-history.ts | 58 +- .../src/collectors/job-status.ts | 19 +- .../src/collectors/node-health.ts | 55 +- .../src/collectors/queue-info.ts | 36 +- .../src/collectors/server-info.ts | 29 +- .../src/strategy.ts | 13 +- .../src/query-collector.ts | 18 +- .../healthcheck-mysql-backend/src/strategy.ts | 23 +- .../src/ping-collector.ts | 46 +- .../healthcheck-ping-backend/src/strategy.ts | 57 +- .../src/query-collector.ts | 20 +- .../src/strategy.ts | 24 +- .../src/collectors/minecraft-players.ts | 21 +- .../src/collectors/minecraft-server.ts | 21 +- .../src/collectors/source-players.ts | 16 +- .../src/collectors/source-status.ts | 28 +- .../src/command-collector.ts | 8 + .../healthcheck-rcon-backend/src/strategy.ts | 20 +- .../src/command-collector.ts | 11 + .../healthcheck-redis-backend/src/strategy.ts | 23 +- .../src/execute-collector.ts | 25 +- .../src/inline-script-collector.ts | 21 +- .../src/strategy.ts | 29 +- .../src/command-collector.ts | 18 +- .../healthcheck-ssh-backend/src/strategy.ts | 24 +- .../src/banner-collector.ts | 20 +- .../healthcheck-tcp-backend/src/strategy.ts | 17 +- .../src/certificate-collector.ts | 25 +- .../healthcheck-tls-backend/src/strategy.ts | 39 +- .../src/index.ts | 18 +- .../notification-discord-backend/src/index.ts | 13 +- .../notification-gotify-backend/src/index.ts | 14 +- .../src/index.ts | 19 +- .../notification-slack-backend/src/index.ts | 19 +- .../notification-teams-backend/src/index.ts | 17 +- .../src/index.ts | 27 +- .../notification-webex-backend/src/index.ts | 15 +- plugins/queue-memory-backend/src/benchmark.ts | 7 + .../src/recurring-jobs.test.ts | 93 +- 731 files changed, 40147 insertions(+), 8654 deletions(-) create mode 100644 .changeset/a11y-select-and-label-associations.md create mode 100644 .changeset/ai-features-steering-and-conformance.md create mode 100644 .changeset/anomaly-default-posture-retune.md create mode 100644 .changeset/api-docs-muted-color-tokens.md create mode 100644 .changeset/auth-dialog-form-quality.md create mode 100644 .changeset/auth-rate-limit-prune-expired.md create mode 100644 .changeset/automation-extract-error-message.md create mode 100644 .changeset/command-palette-navigation-coverage.md create mode 100644 .changeset/confirmation-modal-typed-phrase.md create mode 100644 .changeset/consolidate-search-trigger-copy.md create mode 100644 .changeset/crypto-auth-depth-audit.md create mode 100644 .changeset/dependency-editor-form-quality.md create mode 100644 .changeset/design-system-rework.md create mode 100644 .changeset/dynamicform-number-empty-and-array-remove-confirm.md create mode 100644 .changeset/encryption-key-rotation-and-fail-loud-decrypt.md create mode 100644 .changeset/feedback-loading-empty-states-quick-wins.md create mode 100644 .changeset/fix-orphaned-modal-overlay.md create mode 100644 .changeset/gate-feature-animations-low-power.md create mode 100644 .changeset/healthcheck-runs-kept-previous.md create mode 100644 .changeset/http-collector-ssrf-guard.md create mode 100644 .changeset/incident-editor-form-quality.md create mode 100644 .changeset/maintenance-editor-form-quality.md create mode 100644 .changeset/mobile-anomaly-mute-touch-target.md create mode 100644 .changeset/mobile-cache-runtime-panel.md create mode 100644 .changeset/mobile-dependency-map-panels.md create mode 100644 .changeset/mobile-healthcheck-tables-charts.md create mode 100644 .changeset/mobile-integration-provider-docs.md create mode 100644 .changeset/mobile-memory-delete-touch-target.md create mode 100644 .changeset/mobile-responsive-grids-and-touch-targets.md create mode 100644 .changeset/mobile-slo-trend-chart.md create mode 100644 .changeset/notfound-recovery-and-infra-tab-deeplinks.md create mode 100644 .changeset/notification-subject-render-helpers.md create mode 100644 .changeset/notification-subject-render-html-label.md create mode 100644 .changeset/onboarding-help-affordances.md create mode 100644 .changeset/onboarding-toctou-guard.md create mode 100644 .changeset/plugin-schema-identifier-hardening.md create mode 100644 .changeset/plugin-supply-chain-integrity-pinning.md create mode 100644 .changeset/point-of-use-coaching.md create mode 100644 .changeset/remove-env-stash-casts.md create mode 100644 .changeset/responsive-data-tables.md create mode 100644 .changeset/responsive-tables-color-tokens.md create mode 100644 .changeset/route-error-fallback-and-shell-boundary.md create mode 100644 .changeset/router-typed-args-and-logger.md create mode 100644 .changeset/runtime-panel-formatting-and-states.md create mode 100644 .changeset/sanitize-notification-email-html.md create mode 100644 .changeset/satellite-result-authorization.md create mode 100644 .changeset/save-blockers-and-unsaved-changes-guards.md create mode 100644 .changeset/sidebar-navigation-ia-improvements.md create mode 100644 .changeset/slo-editor-form-quality.md create mode 100644 .changeset/status-page-add-block-aria-label.md create mode 100644 .changeset/status-page-overall-status-banner.md create mode 100644 .changeset/status-page-public-polish.md create mode 100644 .changeset/status-page-slugify-extract.md create mode 100644 .changeset/test-and-tooling-only-no-release.md create mode 100644 .changeset/toast-helper-adoption-plugin-frontends.md create mode 100644 .changeset/toast-responsive-placement-stack-cap.md create mode 100644 .changeset/type-drizzle-json-columns.md create mode 100644 .changeset/ui-a11y-overlays-and-forms.md create mode 100644 .changeset/ui-shared-formatting-helpers.md create mode 100644 .changeset/ui-shared-ux-primitives.md create mode 100644 .changeset/ui-token-and-focus-visible-polish.md create mode 100644 .changeset/ux-core-ui-consistency-sweep.md create mode 100644 .changeset/ux-list-states-and-polish.md create mode 100644 .changeset/ux-slo-healthcheck-formatting-and-states.md create mode 100644 .changeset/ux-sweep-gitops-secrets-notification.md create mode 100644 .changeset/ux-tips-warning-token.md create mode 100644 core/about-frontend/src/AboutHero.tsx create mode 100644 core/about-frontend/src/pluginTypeChip.logic.test.ts create mode 100644 core/about-frontend/src/pluginTypeChip.logic.ts create mode 100644 core/ai-frontend/src/components/tool-card-styles.ts create mode 100644 core/announcement-frontend/src/components/AnnouncementStatSummary.tsx create mode 100644 core/announcement-frontend/src/components/StatusPill.tsx create mode 100644 core/announcement-frontend/src/components/announcementStatus.logic.test.ts create mode 100644 core/announcement-frontend/src/components/announcementStatus.logic.ts create mode 100644 core/anomaly-frontend/src/components/anomalyTone.logic.test.ts create mode 100644 core/anomaly-frontend/src/components/anomalyTone.logic.ts create mode 100644 core/api-docs-frontend/src/apiDocsStatus.logic.test.ts create mode 100644 core/api-docs-frontend/src/apiDocsStatus.logic.ts create mode 100644 core/api-docs-frontend/src/apiDocsTone.ts create mode 100644 core/auth-backend/drizzle/0009_gifted_quasar.sql create mode 100644 core/auth-backend/drizzle/meta/0009_snapshot.json create mode 100644 core/auth-backend/src/better-auth-rate-limit-store.it.test.ts create mode 100644 core/auth-backend/src/better-auth-rate-limit-store.test.ts create mode 100644 core/auth-backend/src/better-auth-rate-limit-store.ts create mode 100644 core/auth-backend/src/config-schemas.test.ts create mode 100644 core/auth-backend/src/utils/auth-error-redirect.test.ts create mode 100644 core/auth-common/src/schemas.test.ts create mode 100644 core/auth-frontend/src/components/AuthLandingCard.tsx create mode 100644 core/auth-frontend/src/components/identity.logic.test.ts create mode 100644 core/auth-frontend/src/components/identity.logic.ts create mode 100644 core/automation-frontend/src/components/SaveBlockersSummary.tsx create mode 100644 core/automation-frontend/src/editor/blocking-issues.test.ts create mode 100644 core/automation-frontend/src/editor/blocking-issues.ts create mode 100644 core/automation-frontend/src/pages/run-duration.test.ts create mode 100644 core/automation-frontend/src/pages/run-duration.ts create mode 100644 core/automation-frontend/src/pages/run-status-pill.tsx create mode 100644 core/backend-api/src/bearer-token.test.ts create mode 100644 core/backend-api/src/encryption.test.ts create mode 100644 core/backend-api/src/ssrf-guard.test.ts create mode 100644 core/backend-api/src/ssrf-guard.ts create mode 100644 core/backend/drizzle/0002_cheerful_marvex.sql create mode 100644 core/backend/drizzle/meta/0002_snapshot.json create mode 100644 core/backend/scripts/reencrypt-secrets.ts create mode 100644 core/backend/src/services/plugin-installers/integrity.test.ts create mode 100644 core/backend/src/services/plugin-installers/integrity.ts create mode 100644 core/backend/src/services/plugin-installers/reload-verification.test.ts create mode 100644 core/backend/src/services/plugin-installers/reload-verification.ts create mode 100644 core/backend/src/services/queue-manager.test.ts create mode 100644 core/backend/src/services/reencrypt-secrets.test.ts create mode 100644 core/backend/src/services/reencrypt-secrets.ts create mode 100644 core/cache-frontend/src/components/CacheEntriesTable.tsx create mode 100644 core/cache-frontend/src/components/CacheRuntimeStats.tsx create mode 100644 core/cache-frontend/src/components/cacheDisplay.logic.test.ts create mode 100644 core/cache-frontend/src/components/cacheDisplay.logic.ts create mode 100644 core/catalog-backend/src/services/entity-service.it.test.ts create mode 100644 core/command-frontend/src/components/PaletteEmptyState.tsx create mode 100644 core/command-frontend/src/components/SearchResultRow.tsx create mode 100644 core/command-frontend/src/components/paletteChrome.ts create mode 100644 core/common/src/plugin-metadata.test.ts create mode 100644 core/dashboard-frontend/src/components/GettingStartedChecklist.tsx create mode 100644 core/dashboard-frontend/src/components/problemToneStyles.test.ts create mode 100644 core/dashboard-frontend/src/components/problemToneStyles.ts create mode 100644 core/dependency-frontend/src/components/dependencyDisplay.logic.test.ts create mode 100644 core/dependency-frontend/src/components/dependencyDisplay.logic.ts create mode 100644 core/dependency-frontend/src/components/statusPill.logic.test.ts create mode 100644 core/dependency-frontend/src/components/statusPill.logic.ts create mode 100644 core/drizzle-helper/src/index.test.ts create mode 100644 core/e2e/scripts/shard.test.ts create mode 100644 core/e2e/scripts/shard.ts create mode 100644 core/e2e/scripts/with-e2e-postgres.ts create mode 100644 core/e2e/tests/about.spec.ts create mode 100644 core/e2e/tests/ai.spec.ts create mode 100644 core/e2e/tests/auth.spec.ts create mode 100644 core/e2e/tests/cache.spec.ts create mode 100644 core/e2e/tests/command.spec.ts create mode 100644 core/e2e/tests/dashboard.spec.ts create mode 100644 core/e2e/tests/member.setup.ts create mode 100644 core/e2e/tests/permissions.spec.ts create mode 100644 core/e2e/tests/queue.spec.ts create mode 100644 core/e2e/tests/script-packages.spec.ts create mode 100644 core/e2e/tests/status-page.spec.ts create mode 100644 core/e2e/tests/theme.spec.ts create mode 100644 core/frontend/src/components/HelpMenu.tsx create mode 100644 core/gitops-frontend/src/components/providerSyncHealth.logic.test.ts create mode 100644 core/gitops-frontend/src/components/providerSyncHealth.logic.ts create mode 100644 core/gitops-frontend/src/components/statusTone.ts create mode 100644 core/gitops-frontend/src/pages/kindRegistryYaml.logic.test.ts create mode 100644 core/gitops-frontend/src/pages/kindRegistryYaml.logic.ts create mode 100644 core/healthcheck-backend/src/health-entity-id.test.ts create mode 100644 core/healthcheck-frontend/src/components/HealthStatusPill.tsx create mode 100644 core/healthcheck-frontend/src/components/editor/SaveBlockersSummary.tsx create mode 100644 core/healthcheck-frontend/src/components/healthcheckDisplay.logic.test.ts create mode 100644 core/healthcheck-frontend/src/components/healthcheckDisplay.logic.ts create mode 100644 core/incident-backend/src/cache.test.ts create mode 100644 core/incident-frontend/src/utils/badges.logic.test.ts create mode 100644 core/incident-frontend/src/utils/badges.logic.ts create mode 100644 core/incident-frontend/src/utils/incident.logic.test.ts create mode 100644 core/incident-frontend/src/utils/incident.logic.ts create mode 100644 core/infrastructure-frontend/src/components/AccessDeniedCard.tsx create mode 100644 core/infrastructure-frontend/src/components/InfrastructureTabRail.tsx create mode 100644 core/integration-frontend/src/components/ProviderCard.tsx create mode 100644 core/integration-frontend/src/components/connectionStatus.logic.test.ts create mode 100644 core/integration-frontend/src/components/connectionStatus.logic.ts create mode 100644 core/maintenance-frontend/src/components/MaintenanceScheduleHero.tsx create mode 100644 core/maintenance-frontend/src/components/MaintenanceWindowHero.tsx create mode 100644 core/maintenance-frontend/src/components/maintenanceEditor.logic.test.ts create mode 100644 core/maintenance-frontend/src/components/maintenanceEditor.logic.ts create mode 100644 core/maintenance-frontend/src/components/maintenanceWindowHero.logic.test.ts create mode 100644 core/maintenance-frontend/src/pages/maintenanceConfig.logic.test.ts create mode 100644 core/maintenance-frontend/src/pages/maintenanceConfig.logic.ts create mode 100644 core/maintenance-frontend/src/utils/duration.test.ts create mode 100644 core/maintenance-frontend/src/utils/duration.ts create mode 100644 core/notification-common/src/subject-render.test.ts create mode 100644 core/notification-common/src/subject-render.ts create mode 100644 core/notification-frontend/src/components/StatusPill.tsx create mode 100644 core/notification-frontend/src/components/SubjectKindRegistry.test.ts create mode 100644 core/notification-frontend/src/components/collapse.test.ts create mode 100644 core/notification-frontend/src/components/notificationDisplay.logic.test.ts create mode 100644 core/notification-frontend/src/components/notificationDisplay.logic.ts create mode 100644 core/pluginmanager-frontend/src/components/PluginStatusPill.tsx delete mode 100644 core/pluginmanager-frontend/src/components/TypedConfirmModal.tsx create mode 100644 core/pluginmanager-frontend/src/components/eventDisplay.logic.test.ts create mode 100644 core/pluginmanager-frontend/src/components/eventDisplay.logic.ts create mode 100644 core/pluginmanager-frontend/src/components/pluginDisplay.logic.test.ts create mode 100644 core/pluginmanager-frontend/src/components/pluginDisplay.logic.ts create mode 100644 core/queue-frontend/src/components/CountTile.tsx create mode 100644 core/queue-frontend/src/components/JobStatePill.tsx create mode 100644 core/queue-frontend/src/components/jobDisplay.logic.test.ts create mode 100644 core/queue-frontend/src/components/jobDisplay.logic.ts create mode 100644 core/satellite-frontend/src/components/FleetSummaryStrip.tsx create mode 100644 core/satellite-frontend/src/components/SatelliteMobileCard.tsx create mode 100644 core/satellite-frontend/src/components/fleetSummary.logic.test.ts create mode 100644 core/satellite-frontend/src/components/fleetSummary.logic.ts create mode 100644 core/script-packages-frontend/src/components/StatusPill.tsx create mode 100644 core/script-packages-frontend/src/components/SummaryPanel.tsx create mode 100644 core/script-packages-frontend/src/components/SurfaceList.tsx create mode 100644 core/script-packages-frontend/src/pages/status-display.test.ts create mode 100644 core/script-packages-frontend/src/pages/status-display.ts create mode 100644 core/secrets-frontend/src/components/SecretRow.tsx create mode 100644 core/secrets-frontend/src/components/SecretsInventorySummary.tsx create mode 100644 core/secrets-frontend/src/components/secretToneStyles.ts create mode 100644 core/secrets-frontend/src/components/secretsDisplay.logic.test.ts create mode 100644 core/secrets-frontend/src/components/secretsDisplay.logic.ts create mode 100644 core/slo-backend/src/cache.test.ts create mode 100644 core/slo-backend/src/service.it.test.ts create mode 100644 core/slo-backend/src/streak-calculator.test.ts create mode 100644 core/slo-backend/src/weekly-digest.test.ts create mode 100644 core/slo-frontend/src/components/SloObjectiveCard.tsx create mode 100644 core/slo-frontend/src/components/sloDisplay.logic.test.ts create mode 100644 core/slo-frontend/src/components/sloDisplay.logic.ts create mode 100644 core/slo-frontend/src/components/sloEditor.logic.test.ts create mode 100644 core/slo-frontend/src/components/sloEditor.logic.ts create mode 100644 core/status-page-backend/src/content-widgets.test.ts create mode 100644 core/status-page-backend/src/widget-registry.test.ts create mode 100644 core/status-page-common/src/overall-status.test.ts create mode 100644 core/status-page-common/src/overall-status.ts create mode 100644 core/status-page-frontend/src/utils/slugify.test.ts create mode 100644 core/status-page-frontend/src/utils/slugify.ts create mode 100644 core/test-utils-backend/src/with-test-db.ts create mode 100644 core/theme-frontend/src/components/DensityToggleMenuItem.tsx create mode 100644 core/tips-frontend/src/hooks/useResetAllTips.ts create mode 100644 core/ui/src/components/Breadcrumb.tsx create mode 100644 core/ui/src/components/ConfirmationModal.logic.test.ts create mode 100644 core/ui/src/components/CopyableValue.tsx create mode 100644 core/ui/src/components/DensityProvider.logic.test.ts create mode 100644 core/ui/src/components/DensityProvider.logic.ts create mode 100644 core/ui/src/components/DensityProvider.tsx create mode 100644 core/ui/src/components/ErrorState.tsx create mode 100644 core/ui/src/components/FormError.tsx delete mode 100644 core/ui/src/components/InfoBanner.tsx create mode 100644 core/ui/src/components/SearchShortcutHint.tsx create mode 100644 core/ui/src/components/ToastProvider.logic.test.ts create mode 100644 core/ui/src/components/charts/RadialGauge.tsx create mode 100644 core/ui/src/components/charts/RequestWaterfall.tsx create mode 100644 core/ui/src/components/charts/Sparkline.tsx create mode 100644 core/ui/src/components/charts/TimeSeriesChart.tsx create mode 100644 core/ui/src/components/charts/UptimeRibbon.tsx create mode 100644 core/ui/src/components/charts/chart-math.test.ts create mode 100644 core/ui/src/components/charts/chart-math.ts create mode 100644 core/ui/src/components/charts/index.ts create mode 100644 core/ui/src/components/overlayAnimation.test.ts create mode 100644 core/ui/src/components/overlayAnimation.ts create mode 100644 core/ui/src/components/searchTrigger.ts create mode 100644 core/ui/src/components/stateFootprint.test.ts create mode 100644 core/ui/src/components/stateFootprint.ts create mode 100644 core/ui/src/formatting/date.test.ts create mode 100644 core/ui/src/formatting/date.ts create mode 100644 core/ui/src/formatting/duration.test.ts create mode 100644 core/ui/src/formatting/duration.ts create mode 100644 core/ui/src/formatting/index.ts create mode 100644 core/ui/src/formatting/number.test.ts create mode 100644 core/ui/src/formatting/number.ts create mode 100644 core/ui/src/formatting/relativeTime.test.ts create mode 100644 core/ui/src/formatting/relativeTime.ts create mode 100644 core/ui/src/hooks/useKeptPrevious.test.ts create mode 100644 core/ui/src/hooks/useKeptPrevious.ts create mode 100644 core/ui/src/hooks/useUnsavedChanges.test.ts create mode 100644 core/ui/src/hooks/useUnsavedChanges.ts create mode 100644 core/ui/stories/Breadcrumb.stories.tsx create mode 100644 core/ui/stories/CopyableValue.stories.tsx create mode 100644 core/ui/stories/DensityProvider.stories.tsx create mode 100644 core/ui/stories/EmptyState.stories.tsx create mode 100644 core/ui/stories/ErrorState.stories.tsx create mode 100644 core/ui/stories/FormError.stories.tsx delete mode 100644 core/ui/stories/InfoBanner.stories.tsx create mode 100644 core/ui/stories/charts/RadialGauge.stories.tsx create mode 100644 core/ui/stories/charts/RequestWaterfall.stories.tsx create mode 100644 core/ui/stories/charts/Sparkline.stories.tsx create mode 100644 core/ui/stories/charts/TimeSeriesChart.stories.tsx create mode 100644 core/ui/stories/charts/UptimeRibbon.stories.tsx create mode 100644 core/ui/stories/charts/sample-data.ts create mode 100644 docs/src/content/docs/developer-guide/architecture/satellite.md create mode 100644 docs/src/content/docs/developer-guide/tooling/security-maintenance.md diff --git a/.changeset/a11y-select-and-label-associations.md b/.changeset/a11y-select-and-label-associations.md new file mode 100644 index 000000000..9fce9cc53 --- /dev/null +++ b/.changeset/a11y-select-and-label-associations.md @@ -0,0 +1,21 @@ +--- +"@checkstack/status-page-frontend": patch +"@checkstack/auth-frontend": patch +--- + +Fix accessibility labeling defects on status-page and auth forms. + +Radix `SelectTrigger` renders a `combobox` whose accessible name comes from +`aria-label`/`aria-labelledby`, not from its `SelectValue` placeholder child, so +screen readers previously announced several comboboxes as unnamed. Every such +trigger in the status-page builder (system, heading level, group, visibility) and +in the auth team/scope/ownership/resource-grant pickers now carries an +`aria-label` matching its visible intent. + +Form labels that were rendered as detached `