Skip to content

Recipes, walkthroughs, disk reclaim, and a redesigned app shell - #116

Merged
jhd3197 merged 35 commits into
mainfrom
dev
Aug 22, 2026
Merged

Recipes, walkthroughs, disk reclaim, and a redesigned app shell#116
jhd3197 merged 35 commits into
mainfrom
dev

Conversation

@jhd3197

@jhd3197 jhd3197 commented Aug 22, 2026

Copy link
Copy Markdown
Owner

This PR is now the complete 1.9.5 operator-workflow release. What began as Recipes, walkthroughs, and safe disk reclaim grew into a broader pass over how an operator moves through ServerKit: discover a Recipe, install it, watch it run, provide a human-held secret when required, recover disk headroom, and reach the assistant, alerts, operations, walkthroughs, and server scope from one consistent shell.

The branch also includes the redesigned file manager, command palette, docked shell console, accessibility and SCSS cleanup, the locale-key consolidation across all 16 languages, and a CI promotion fix that prevents generated version commits from replacing a fully tested PR head with an unchecked one.

Highlights

  • Recipe catalog and one-call installs — browse the bundled serverkit-recipes registry, install a Recipe into a workspace, and reuse the workspace's Recipe project instead of creating duplicates.
  • Resumable Recipe executionserverkit.yaml configure and verify steps run on the existing deployment-job envelope, pause in waiting for a human handoff, and resume the same run without losing completed-step state.
  • Safe secret handoffs — submitted values are encrypted in the vault, TTL-bound, excluded from plans/results/logs, and removed when the run completes.
  • Panel-driven disk reclaim — preview a fresh measurement of safe cleanup candidates, confirm exactly what will run, and follow the background job in Operations.
  • Guided walkthroughs — per-user, persisted guidance for flows that still require intent, credentials, or two-step authentication.
  • One tabbed shell console — Operations, Walkthroughs, alerts, the assistant, workspace/server scope, setup health, and the command palette now share a consistent bottom-edge control surface.
  • Reworked command palette — tile-based navigation plus Recipe discovery, with the sidebar as an additional entry point.
  • Rebuilt file manager — list-first browsing, persistent volumes, active-mount context, safer failed-navigation recovery, and page-level actions in the shared topbar.
  • Accessibility and styling cleanup — JavaScript scrolling honors prefers-reduced-motion; touched UI uses the established SCSS system; disk reclaim now has one authoritative stylesheet owner.
  • i18n consolidation — repeated copy was folded into common.* keys across all 16 locales while preserving existing translations.
  • Green-head CI promotion — automated version bumps wait for all sibling workflows to finish successfully before advancing dev, then publish the required promotion status on the generated commit.

Technical changes

Recipes and execution

  • Added RecipeRegistryService and a bundled registry index for catalog listing, lookup, compatibility validation, and workspace installation.
  • Added RecipeExecutionService for server resolution, idempotent Recipe-project creation, plan construction, execution, handoff submission, retry/resume behavior, audit logging, and cleanup.
  • Added a closed RecipeStepRegistry keyed by type:kind; unsupported capabilities are rejected before a run is created or mutated.
  • Extended manifest validation with capabilities, requires, configure, and verify, including dependency ordering, unique step ids, declared-capability checks, handoff input requirements, and TTL validation.
  • Added Recipe run/start/status/handoff API surfaces with explicit admin authorization and typed API errors.
  • Kept Recipe controllers behind the service boundary: server lookup and project persistence live in the service layer, not Flask controllers.
  • Extended operation normalization and status rendering for waiting, requires_action, needs_attention, Recipe metadata, and handoff descriptors.
  • Added RecipeHandoffCard to Operations and API methods for submitting handoff values.
  • Updated docs/serverkit-yaml.schema.json for the expanded v1 manifest format.

Secret handling

  • Added an internal-secret upsert path to the existing vault service so encryption remains behind the vault's one-door boundary.
  • Stored handoff values under a dedicated recipe-runs vault namespace keyed by run and step.
  • Masked step outcomes and kept submitted values out of the deployment plan, result payload, and logs.
  • Honored per-step expiration and deleted handoff secrets after terminal completion.

Disk reclaim

  • Added report and execute API surfaces for the panel.
  • Accepted only keys reported as safe by a fresh server-side scan; request data is never trusted as the cleanup authority.
  • Required explicit confirmation and revalidated candidates again inside the queued job to cover queue delay and changing disk state.
  • Added the reclaim modal to failing disk-headroom checks and alerting monitoring tiles, with Operations tracking for background runs.

Walkthroughs

  • Added a bounded, self-scoped progress ledger using the existing system-settings store, so no database migration is required.
  • Added viewer-writable self-scoped state endpoints with strict id/status normalization.
  • Hydrated from local storage for immediate UI state, reconciled with the API, and debounced writes without discarding local progress on a request failure.
  • Added permission-aware walkthrough definitions and event-driven progress for the service-creation flow.

App shell, assistant, and palette

  • Added GlobalStatusBar and ShellDockTabs as the shared launcher and panel host.
  • Docked Operations, Walkthroughs, alerts, setup health, workspace/server scope, the assistant, and the command palette into the shell.
  • Removed duplicate launchers and Prompture-specific branding from the assistant surface.
  • Added a tile-grid command palette with Recipe discovery and simplified sidebar access.
  • Simplified the sidebar by moving workspace and notification controls into the shell and placing quick-create beside the ServerKit mark.

File manager and UI cleanup

  • Switched the file manager to list view by default and added responsive sidebar behavior.
  • Promoted disk mounts into a persistent Volumes section and resolved the active mount using the longest matching mountpoint.
  • Restored the last successfully loaded directory after a failed navigation.
  • Moved filter/sort/source controls into their proper toolbar/sidebar locations and published New folder, Upload, and Terminal through the shared topbar.
  • Replaced touched static inline styles with SCSS classes across server, settings, setup, dashboard, design-system, and monitoring surfaces.
  • Applied reduced-motion-aware scrolling to every touched JavaScript-driven scroll path.
  • Removed the duplicate standalone disk-reclaim stylesheet; the main.scss partial is now the single owner.

CI and release process

  • The Version Bump workflow now has read access to sibling workflow runs and waits for every applicable run on the triggering SHA.
  • Any failed, cancelled, or timed-out sibling workflow prevents the version commit from being pushed.
  • Three quiet polls prevent a just-created push/PR run from being missed.
  • After sibling CI passes, the workflow verifies the open same-repository devmain PR, pushes the generated version commit, and publishes Require dev source success on that exact head.
  • Scripts CI now watches the version workflow, and shell guards cover the promotion behavior.
  • Final version: 1.9.5.

Security and boundary guarantees

  • Unknown Recipe capabilities cannot become arbitrary commands.
  • Recipe and reclaim inputs are revalidated server-side against closed registries or fresh measurements.
  • Human-held secrets remain encrypted, masked, TTL-bound, and lifecycle-cleaned.
  • Mutating Recipe and reclaim operations carry explicit authorization decisions and audit events.
  • Walkthrough progress is always scoped to the authenticated user.
  • Recipe API error responses use the shared typed error envelope.
  • Deployment-job list serialization no longer parses unused plan JSON for non-Recipe jobs.

Final review follow-ups

  • Normalized handoff descriptors so a boolean handoff: true flag cannot leak into UI code expecting an object.
  • Avoided unnecessary deployment-plan parsing unless requested or required for a Recipe run.
  • Removed order-dependent duplicate disk-reclaim selectors and retained one SCSS source of truth.
  • Added regression coverage for each of these cases and resolved all review conversations.

Verification

  • Backend CI on both push and pull_request: all 8 pytest shard jobs passed.
  • Both backend test-count ratchets passed.
  • Frontend tests, lint ratchets, and production build passed locally; both Frontend CI runs passed.
  • Scripts CI passed, including distro provisioning, shell checks, and the real install/update job.
  • Security Scan passed, including Bandit and dependency scans.
  • Test System Utilities passed across Ubuntu, Debian, Fedora, and Rocky Linux.
  • Release tarball and Docker boot smoke tests passed.
  • Main Promotion and the guarded Version Bump workflow passed.
  • GitHub reports the PR as CLEAN and MERGEABLE, with zero unresolved review threads.

No database migration is required for this PR.

jhd3197 and others added 18 commits August 21, 2026 21:47
Expose disk_reclaim_service behind /api/v1/system/disk/reclaim: a
read-only report and a confirm-gated POST whose keys are re-validated
against a fresh scan server-side (safe candidates only — telemetry
stays CLI-only). ?wait=false runs it as a background job; both paths
are audit-logged.

The curated fix shows up where the problem is reported: a failing
disk.headroom doctor check and an alerting disk tile each offer
'Reclaim space', which previews measured candidates before handing
the run to Operations.
RecipeExecutionService encrypted handoff inputs with a direct
app.utils.crypto import, tripping the service-level crypto ratchet.
SecretService gains upsert_internal_secret — create-or-update without
the human display-name grammar, for machine-named secrets in a
dedicated vault slug — and the recipe service routes through it.
…migration inventory

The recipes Phase 0 commit moved all three measured counts without
regenerating their baselines. The new api/recipes.py persistence
crossings are owned and documented in the baseline; the hand-shaped
error census is unchanged by this branch.
…mespace

en.json drops from 8107 to 6624 keys: repeated UI copy (Cancel x95,
Status x67, Refresh x54, ...) now lives under common.actions /
common.labels / common.loading, and extractor-era suffix duplicates
(refresh2, status3) within a component collapse onto one key.
Trailing ... defaults are normalized to the ellipsis character.

Translations are preserved: all 16 locales were re-keyed, carrying
existing per-component translations onto their new common.* keys
(majority vote where sources disagreed), and stale keys were pruned.

Verified: npm run lint (0 errors), node --test (140 pass), vite build.

edit
Copilot AI lite review requested due to automatic review settings August 22, 2026 05:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

There is a confirmed frontend bug in normalizeDeploymentOperation where handoff can become a boolean instead of an object, plus a confirmed duplicate disk-reclaim stylesheet definition that makes styling order-dependent.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR delivers a large UX + operations-focused upgrade to ServerKit: it adds operator-driven “outcome” flows (Recipes + Walkthroughs) and introduces a safe, server-validated disk reclaim workflow, alongside a redesigned app shell/status bar and a broad i18n key consolidation / copy normalization across the frontend.

Changes:

  • Add disk reclaim report + confirm-gated reclaim execution (API + job handler + UI entry points).
  • Add guided walkthrough state storage + API and wire walkthrough signals into the new-service flow and shell.
  • Normalize UI shell + accessibility behavior (reduced-motion-aware scrolling) and consolidate many translation keys to common.*.
File summaries
File Description
VERSION Bump panel version to 1.9.1
frontend/src/utils/serviceTypes.js Move labels to consolidated common.* i18n keys
frontend/src/utils/reducedMotion.js Add reduced-motion helper for imperative scrolling
frontend/src/styles/pages/_setup-wizard.scss New utility classes to replace inline wizard styles
frontend/src/styles/pages/_settings.scss New settings-page helper classes replacing inline styles
frontend/src/styles/pages/_servers.scss Add pairing-related form styling classes
frontend/src/styles/pages/_git.scss Add Git page atom/layout styles
frontend/src/styles/pages/_app-map.scss Replace inline node styles; add ReactFlow minimap/node styling
frontend/src/styles/main.scss Import walkthrough/statusbar/disk-reclaim component styles
frontend/src/styles/layout/_main-content.scss Add statusbar height CSS var on layout root
frontend/src/styles/components/disk-reclaim.scss Standalone disk reclaim modal styles (CSS variables)
frontend/src/styles/components/_skeleton.scss Move tree skeleton padding logic into CSS selectors
frontend/src/styles/components/_disk-reclaim.scss Disk reclaim modal list styles (SCSS tokens)
frontend/src/styles/components/_design-system.scss Support hidden overflow tabs; fix header flex overflow
frontend/src/styles/components/_dashboard-widgets.scss Add reusable svg styling for widget charts/gauges
frontend/src/styles/_variables.scss Add shell z-index tokens
frontend/src/services/operations.js Treat waiting as active; surface recipe handoff details
frontend/src/services/api/walkthroughs.js Add API methods for walkthrough state GET/PUT
frontend/src/services/api/index.js Register walkthrough + disk API modules
frontend/src/services/api/disk.js Add disk reclaim report + run endpoints
frontend/src/services/api/deploymentJobs.js Add recipe handoff submission API method
frontend/src/services/tests/operations.test.mjs Add test coverage for handoff-waiting recipe handling
frontend/src/pages/WorkspaceDetail.jsx Consolidate workspace tab labels to common.*
frontend/src/pages/TestSandbox.jsx Normalize ellipsis, reuse stable i18n keys, move actions to common.*
frontend/src/pages/SSOCallback.jsx Normalize ellipsis copy
frontend/src/pages/SourceConnectionCallback.jsx Normalize ellipsis copy
frontend/src/pages/Settings.jsx Use consolidated common.* labels/keys
frontend/src/pages/Security.jsx Normalize ellipsis copy
frontend/src/pages/PublicStatusPage.jsx Deduplicate i18n keys
frontend/src/pages/Projects.jsx Consolidate table headers + modal actions to common.*
frontend/src/pages/Notifications.jsx Consolidate labels/loading to common.*
frontend/src/pages/NotFound.jsx Deduplicate i18n keys
frontend/src/pages/new-service/useNewServiceForm.js Emit walkthrough signals on source select + service creation
frontend/src/pages/new-service/SourceStep.jsx Add walkthrough target marker attribute
frontend/src/pages/new-service/ConnectStep.jsx Consolidate refresh/settings/branch labels to common.*
frontend/src/pages/Monitoring.jsx Consolidate refresh label to common.*
frontend/src/pages/FleetProxy.jsx Consolidate column headers + refresh/retry to common.*
frontend/src/pages/Downloads.jsx Reduced-motion-aware scrolling + i18n consolidation
frontend/src/pages/Deployments.jsx Consolidate table header labels to common.*
frontend/src/pages/DeployConsole.jsx Use common.state.failed; deduplicate tooltip key
frontend/src/pages/Coexistence.jsx Consolidate refresh to common.*
frontend/src/pages/CloudflareZoneSettings.jsx Consolidate retry/storage/actions labels to common.*
frontend/src/pages/AppMap.jsx Replace inline styles; remove inline minimap background
frontend/src/layouts/DashboardLayout.jsx Mount walkthrough + status bar; move launchers into status bar
frontend/src/hooks/useSettingFocus.js Reduced-motion-aware scrollIntoView
frontend/src/hooks/useConfirm.js Use consolidated cancel action key
frontend/src/contexts/walkthroughContextValue.js Add WalkthroughContext + hook guard
frontend/src/components/WorkspaceSwitcher.jsx Deduplicate i18n keys
frontend/src/components/workspaces/WorkspaceSitesTab.jsx Consolidate status/remove labels to common.*
frontend/src/components/workspaces/WorkspaceServicesTab.jsx Consolidate status/remove labels to common.*
frontend/src/components/workspaces/WorkspaceServersTab.jsx Consolidate status/remove labels to common.*
frontend/src/components/workspaces/WorkspaceOverviewTab.jsx Consolidate labels to common.*
frontend/src/components/workspaces/WorkspaceMembersTab.jsx Consolidate remove action to common.*
frontend/src/components/ui/sheet.jsx Consolidate sr-only close label to common.*
frontend/src/components/ui/dialog.jsx Consolidate sr-only close label to common.*
frontend/src/components/shared/TagsPanel.jsx Consolidate loading/add actions to common.*
frontend/src/components/shared/EnvironmentVariablesPanel.jsx Consolidate key/value/source headers to common.*
frontend/src/components/setup/SetupStepIntent.jsx Replace inline wizard styles; consolidate continue action
frontend/src/components/setup/SetupStepCapacity.jsx Replace inline wizard styles
frontend/src/components/setup/SetupStepAccount.jsx Replace inline styles; consolidate username/password labels
frontend/src/components/settings/WhiteLabelTab.jsx Consolidate remove/preview key; hide file input via class
frontend/src/components/settings/WebhookSubscriptionModal.jsx Consolidate name/cancel labels to common.*
frontend/src/components/settings/UsersTab.jsx Consolidate headers/cancel to common.*; normalize ellipsis
frontend/src/components/settings/UserModal.jsx Consolidate username/password/permissions/cancel to common.*
frontend/src/components/settings/TwoFactorPolicyCard.jsx Replace inline styles with classes; add grace input class
frontend/src/components/settings/ThemeStudioModal.jsx Consolidate name label
frontend/src/components/settings/ThemeGallery.jsx Consolidate remove action
frontend/src/components/settings/SSOConfigTab.jsx Normalize ellipsis; consolidate enable label
frontend/src/components/settings/RecycleBinTab.jsx Consolidate type/restore/refresh; deduplicate confirm key
frontend/src/components/settings/ProfileTab.jsx Consolidate username label
frontend/src/components/settings/PermissionEditor.jsx Consolidate “System” label
frontend/src/components/settings/ModulesTab.jsx Normalize ellipsis
frontend/src/components/settings/MemberActionsCard.jsx Replace inline styles with classes
frontend/src/components/settings/LoginLinksSection.jsx Consolidate user label
frontend/src/components/settings/InviteModal.jsx Replace inline styles; consolidate actions/permissions label
frontend/src/components/settings/InvitationsTab.jsx Consolidate status/created/actions headers; normalize ellipsis
frontend/src/components/settings/IconReferenceTab.jsx Replace inline styles; normalize ellipsis
frontend/src/components/settings/connections/DnsActivity.jsx Consolidate time/action headers
frontend/src/components/settings/AppearanceTab.jsx Consolidate system label; hide file input via class
frontend/src/components/settings/ApiKeyModal.jsx Consolidate done/name/cancel to common.*
frontend/src/components/settings/AISettingsTab.jsx Consolidate loading; replace inline layout styles
frontend/src/components/settings/AboutTab.jsx Consolidate product/version/checking/retry/dismiss labels
frontend/src/components/services/serviceTabs.jsx Consolidate services tab label
frontend/src/components/service-detail/ShellTab.jsx Normalize ellipsis copy
frontend/src/components/service-detail/PackagesTab.jsx Consolidate version header; normalize ellipsis copy
frontend/src/components/service-detail/MetricsTab.jsx Normalize ellipsis; consolidate memory/uptime labels
frontend/src/components/service-detail/LogsTab.jsx Normalize ellipsis; consolidate refresh label
frontend/src/components/service-detail/GunicornTab.jsx Normalize ellipsis copy
frontend/src/components/service-detail/CommandsTab.jsx Normalize ellipsis copy
frontend/src/components/servers/serverTabs.jsx Consolidate servers tab label
frontend/src/components/servers/LinkPanelForm.jsx Consolidate close/cancel labels; deduplicate confirm key
frontend/src/components/serverdetail/SurveyTab.jsx Consolidate services/databases/domain labels
frontend/src/components/serverdetail/ServerMetricsTab.jsx Consolidate memory/disk labels
frontend/src/components/serverdetail/PackagesTab.jsx Consolidate loading/remove labels; deduplicate install key
frontend/src/components/serverdetail/AlertsTab.jsx Consolidate system/security section titles
frontend/src/components/server/OnboardingWizard.jsx Consolidate Docker step label
frontend/src/components/security/VulnerabilityTab.jsx Normalize ellipsis; consolidate version label
frontend/src/components/security/securityTabs.jsx Consolidate overview/settings labels
frontend/src/components/security/SecurityConfigTab.jsx Normalize ellipsis copy
frontend/src/components/security/QuarantineTab.jsx Consolidate size/actions/restore/delete labels
frontend/src/components/security/IPListsTab.jsx Consolidate remove/cancel; normalize ellipsis
frontend/src/components/security/EventsTab.jsx Consolidate refresh/loading labels
frontend/src/components/security/AutoUpdatesTab.jsx Normalize ellipsis; consolidate refresh/status labels
frontend/src/components/security/AuditTab.jsx Normalize ellipsis copy
frontend/src/components/SchedulePicker.jsx Deduplicate i18n keys for frequency options
frontend/src/components/ScheduledTasksCard.jsx Consolidate loading labels
frontend/src/components/proxy/ProxyStackPanel.jsx Consolidate retry/status/all labels
frontend/src/components/PrivateURLSection.jsx Consolidate copy/save/cancel actions
frontend/src/components/previews/PreviewList.jsx Normalize ellipsis; consolidate save/open
frontend/src/components/PageSkeleton.jsx Remove inline padding; rely on skeleton SCSS
frontend/src/components/monitoring/monitorTabs.jsx Consolidate overview tab label
frontend/src/components/monitoring/MonitorsSummary.jsx Deduplicate monitors title key
frontend/src/components/monitoring/MonitoringOverview.jsx Add disk reclaim modal entry point; consolidate memory/disk labels
frontend/src/components/monitoring/FleetThresholdsPanel.jsx Consolidate warning/memory/disk labels; deduplicate keys
frontend/src/components/MetricsGraph.jsx Consolidate disk label
frontend/src/components/marketplace/marketTabs.jsx Consolidate extensions tab label
frontend/src/components/marketplace/ManualInstallModal.jsx Consolidate back/toast keys
frontend/src/components/marketplace/ExtensionPermissionsDialog.jsx Deduplicate keys; consolidate close/loading
frontend/src/components/LogViewer.jsx Normalize ellipsis; consolidate refresh/download/clear/loading
frontend/src/components/log-viewer/LogToolbar.jsx Consolidate clear/refresh/download labels
frontend/src/components/log-viewer/logHelpers.js Consolidate databases/system/security labels
frontend/src/components/LinkedAppsSection.jsx Deduplicate link label key
frontend/src/components/LinkAppModal.jsx Normalize ellipsis; consolidate close/cancel
frontend/src/components/JournalControls.jsx Consolidate all/warning/info chips
frontend/src/components/JobProgressModal.jsx Reduced-motion-aware autoscroll; consolidate failed label
frontend/src/components/git/RepoConnectForm.jsx Consolidate branch label; deduplicate “or paste a URL”
frontend/src/components/git/PathSelector.jsx Consolidate add action
frontend/src/components/git/GitProviders.jsx Deduplicate hint key
frontend/src/components/file-manager/FileRow.jsx Consolidate download/permissions/delete labels
frontend/src/components/file-manager/ContextMenu.jsx Consolidate download/permissions/delete labels
frontend/src/components/FavoriteStar.jsx Deduplicate aria-label i18n keys
frontend/src/components/ds/ViewMenu.jsx Deduplicate aria-label keys; consolidate save action
frontend/src/components/ds/status.js Treat waiting as amber status kind
frontend/src/components/ds/SortMenu.jsx Consolidate clear action
frontend/src/components/ds/PageTopbar.jsx Use is-hidden class instead of inline display:none
frontend/src/components/ds/grid/GridViewPicker.jsx Consolidate cancel/create actions
frontend/src/components/ds/grid/GridFooter.jsx Consolidate “All” option label
frontend/src/components/ds/grid/GridFilterDrawer.jsx Consolidate value aria-label and done action
frontend/src/components/ds/grid/ColumnMenu.jsx Deduplicate operator label key; consolidate done action
frontend/src/components/ds/Drawer.jsx Remove inline flex/minWidth styling (handled in SCSS)
frontend/src/components/ds/DataTableFooter.jsx Consolidate “All” option label
frontend/src/components/ds/DataTable.jsx Consolidate “Clear filters” action
frontend/src/components/domains/domainTabs.jsx Consolidate domains tab label
frontend/src/components/domains/DdnsTokenCallout.jsx Consolidate dismiss action
frontend/src/components/docker/VolumesTab.jsx Consolidate name/kind/cancel; normalize ellipsis; deduplicate keys
frontend/src/components/docker/PruneButton.jsx Deduplicate tooltip key
frontend/src/components/docker/ImagesTab.jsx Consolidate size/created/cancel; normalize ellipsis; deduplicate keys
frontend/src/components/deployments/DeploymentTimeline.jsx Consolidate “Current” label
frontend/src/components/deployments/ConfigDiffModal.jsx Consolidate domains/cancel/close labels
frontend/src/components/deploy-console/SuccessBanner.jsx Consolidate open action
frontend/src/components/deploy-console/LogPane.jsx Reduced-motion-aware scroll jumps
frontend/src/components/deploy-console/ConsoleToolbar.jsx Consolidate copy/download labels
frontend/src/components/databases/TableDataTab.jsx Consolidate type/key/default/refresh labels
frontend/src/components/databases/SourceTree.jsx Consolidate actions/loading labels
frontend/src/components/databases/ProcessListPanel.jsx Consolidate user/time headers
frontend/src/components/databases/ManagedDatabasesPanel.jsx Consolidate refresh; deduplicate untrack key
frontend/src/components/databases/ImportDumpModal.jsx Consolidate “Type” confirm label
frontend/src/components/databases/EngineCatalogDrawer.jsx Consolidate “All” label
frontend/src/components/databases/DbUsersPanel.jsx Consolidate copy/dismiss actions
frontend/src/components/databases/DbBlankStates.jsx Deduplicate open-sql-console key
frontend/src/components/databases/CreateTableModal.jsx Consolidate name/type/default/add labels
frontend/src/components/databases/ConsoleTab.jsx Consolidate clear action
frontend/src/components/databases/ConfigTunerPanel.jsx Consolidate refresh/current/all labels
frontend/src/components/databases/BackupsTab.jsx Fix confirm text key; consolidate size/created headers
frontend/src/components/dashboard/widgets/renderers.jsx Replace inline svg styles with SCSS classes; deduplicate empty key
frontend/src/components/dashboard/grid/WidgetLibrary.jsx Consolidate all/add labels
frontend/src/components/dashboard/grid/WidgetFullscreen.jsx Consolidate close title
frontend/src/components/dashboard/grid/WidgetFrame.jsx Deduplicate aria-label keys; consolidate remove action
frontend/src/components/dashboard/AccountSecurityNudge.jsx Consolidate dismiss action
frontend/src/components/cloudflare/WorkersPanel.jsx Consolidate name/serverKit/delete/remove labels
frontend/src/components/cloudflare/StoragePanel.jsx Consolidate add/delete; deduplicate deleted toast key
frontend/src/components/cloudflare/CloudflareWafPanel.jsx Consolidate description/action/delete/add/severity/time labels
frontend/src/components/buildpack/BuildpackPreview.jsx Consolidate port label
frontend/src/components/backups/ScheduleCard.jsx Consolidate schedule label; normalize ellipsis
frontend/src/components/backups/RestoreDrawer.jsx Consolidate restore action/confirm text
frontend/src/components/backups/ProtectionStatusCard.jsx Deduplicate protection key
frontend/src/components/backups/ProtectionPanel.jsx Consolidate delete/refresh labels
frontend/src/components/backups/backupTabs.jsx Consolidate overview/storage/settings labels
frontend/src/components/backups/BackupsOverview.jsx Consolidate size/status headers
frontend/src/components/backups/BackupHistoryList.jsx Consolidate size/status/storage/restore/delete labels
frontend/src/components/apps/VolumesPanel.jsx Consolidate cancel/size/status/name labels
frontend/src/components/apps/ResourceLimitsPanel.jsx Consolidate memory label
frontend/src/components/apps/MicroCachePanel.jsx Deduplicate aria-label key; consolidate saving label
frontend/src/components/apps/HtaccessConverter.jsx Consolidate close action
frontend/src/components/apps/ContainerOpsPanel.jsx Deduplicate error toast key
frontend/src/components/apps/AppWafPanel.jsx Deduplicate error toast keys; consolidate add/severity/time labels
frontend/src/components/appdetail/SettingsTab.jsx Consolidate saving label
frontend/src/components/appdetail/PackagesTab.jsx Normalize ellipsis copy
frontend/src/components/appdetail/OverviewTab.jsx Consolidate type/port/service/state/memory/domains labels
frontend/src/components/appdetail/LogsTab.jsx Consolidate refresh action
frontend/src/components/appdetail/GunicornTab.jsx Normalize ellipsis copy
frontend/src/components/appdetail/CommandsTab.jsx Normalize ellipsis copy
frontend/src/components/appdetail/BuildTab.jsx Normalize ellipsis; deduplicate found/rollback/build-config/cancel keys
frontend/src/components/ai/ConfirmActionCard.jsx Deduplicate confirm-action key
frontend/src/components/ai/Composer.jsx Consolidate stop action
frontend/src/components/ai/ChatBubble.jsx Deduplicate title key
frontend/src/components/ai/AIAssistant.jsx Support hideLauncher for statusbar-driven shell
docs/MIGRATION_INVENTORY.md Update ratchet/baseline counts
backend/tests/test_walkthroughs.py Add walkthrough self-scoping + validation tests
backend/tests/test_route_authz_sweep.py Allowlist walkthrough state PUT as viewer-writable self-scoped
backend/tests/test_manifest_spec.py Add recipe schema normalization/validation tests
backend/tests/test_core_blueprint_registry.py Update expected blueprint count + manifest hash
backend/tests/ERROR_SHAPE_CEILING Raise error-shape ceiling baseline
backend/tests/api_controller_boundary_baseline.json Add recipes controller baseline + updated persistence count
backend/app/services/secret_vault_service.py Add internal upsert method for service-owned secrets
backend/app/services/disk_reclaim_service.py Add safe-key validation + job handler registration for reclaim
backend/app/models/deployment_job.py Expose recipe title/fields + waiting attention flags in serialization
backend/app/core_blueprints.py Register recipes + walkthroughs blueprints
backend/app/api/walkthroughs.py Add walkthrough state API (self-scoped, viewer-writable)
backend/app/init.py Register recipe execution + disk reclaim jobs at startup
Review details
  • Files reviewed: 283/341 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread frontend/src/services/operations.js Outdated
Comment thread backend/app/models/deployment_job.py
Comment thread frontend/src/styles/main.scss
jhd3197 and others added 9 commits August 22, 2026 02:43
…chrome)

The bottom-edge surfaces (Operations, Alerts, Recipes, Assistant) now share
one console: every panel carries the same four-tab strip (ShellDockTabs) and
a ShellDockContext keeps exactly one open, so switching surfaces is a tab
click instead of hunting separate popovers. Recipes is rebuilt into the
prototype's split layout — step rail left, one step's story right, with a
deep-link action button, 'Done - next step', and Back.

The workspace/server switchers get real themed menus (dot - name - meta -
check) replacing the native <select> popup that ignored the theme, and the
sidebar keeps its full height again: it was shortened by the statusbar
height even though the bar only spans the content column, leaving a dead
30px hole under the user card.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…randing

The right-side chat drawer now carries the shared console tab strip, so the
assistant reads as the right-docked tab of the same console the bottom
panels belong to (its close moved into the strip). The 'powered by
Prompture' lines are gone from the header and empty state — the empty state
now tells the user what to ask instead.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lette

The palette's empty state now leads with a Create tile grid (shared list in
data/createItems.js) plus a '+ n more' shelf that folds in the less-common
targets and any extension-contributed 'New ...' commands, then a Recipes
group (picking one starts it and opens the recipes console). Create and
recipe entries also score into regular search results.

The sidebar '+' stops carrying its own little dropdown and opens this
palette instead — one door for every new-thing flow, like the prototype.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gradient fill (accent-bright to accent), accent glow, inner top highlight,
and a hover that lifts the gradient toward white — all from theme tokens so
runtime skins keep recoloring it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
en.json regenerated from inline defaults (new statusbar/console/palette/
recipes strings; Prompture and old walkthrough-hub strings gone). es picks
up translations for all 26 new keys; every locale drops the now-orphaned
keys so the parity gate stays green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The curated serverkit-recipes index is consumed like the themes registry
(cached remote index, bundled fallback, SERVERKIT_RECIPES_REGISTRY_URL
override). GET /recipes/registry[/<slug>] browses it; POST /recipes/runs
now accepts a registry_slug plus server_id — targeting a server finds or
creates the per-workspace Recipes project — and validated non-secret
params that pre-supply handoff inputs so only true secrets pause the run.

Frontend: Recipes catalog page (cards, category chips, install drawer
with running-server picker, preflight table, up-front inputs and an
asked-during-the-run secrets preview) under new Services and Marketplace
tabs; runs land in the deployment console.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reserve the word Recipes for installers. The status-bar segment, dock
tab, hub aria-label and command-palette category now read Walkthroughs
(new app.walkthroughs.title/all keys; stale es allRecipes dropped).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jhd3197
jhd3197 merged commit 15cce60 into main Aug 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants