Cluster config backup archives kubeconfig, talosconfig, config.yaml,
secrets.yaml, and Talos node configs for disaster recovery. Appears as
"Cluster Config" row on the backups page with its own detail page.
Backup schedules are now shown on each app's individual backup page
instead of the main backups overview, with active operations visible
per-app for real-time feedback during backup/restore.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RegisterClient was async (channel-based), so Broadcast could be processed
before the client was registered in the map, causing flaky test failures.
Register directly under the mutex instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrote backup/restore guides to document current system (native
pg_dump/Longhorn/tar.gz tools, blue-green restore, scheduling) and
remove outdated restic references. Rewrote monitoring guide to replace
K3s/Helm/Velero placeholders with actual capabilities. Filled in all
four upgrade guides (Talos, Kubernetes, applications, Wild Cloud) that
were previously TBD stubs. Expanded troubleshooting guides with correct
namespaces, Wild Cloud CLI commands, and Talos-specific diagnostics.
Added verification commands to cluster networking health checklist.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Handle unchecked errors (errcheck), fix nil-deref false positives (SA5011),
suppress deprecated-but-functional API warnings (SA1019), remove unused code,
and use fmt.Fprintf over WriteString(fmt.Sprintf(...)).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove unused imports (Clock, Database) and dead code (formatUptime),
replace `any` types with proper types (BackupResourceInfo, QueryClient,
Record<string, unknown>), fix DeployedApp/App type incompatibility, and
use const for module-level collections in SSE hook.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Updated `checkSourceDrift` to read version from app.yaml and corresponding slot manifest.
- Introduced `computeUpgradePlanFromMeta` to handle upgrade plans using centralized routing rules from app.yaml.
- Enhanced `ComputeUpgradePlan` to fallback to old-style manifest.yaml if app.yaml is not present.
- Added tests for both new and old upgrade plan computation methods, ensuring backward compatibility.
- Improved handling of upgrade paths, including waypoint resolution and circular dependency detection.
- Updated AppSidebar to rename "Available Apps" to "App Directory" for better user understanding.
- Refactored AppsComponent to streamline app data handling and improve loading states.
- Introduced AppDirectoryPage to provide a dedicated view for browsing available apps.
- Added AppInfoPage to display detailed information about individual apps, including README and configuration options.
- Implemented useCatalogReadme hook to fetch README content for apps.
- Enhanced API service to include a method for fetching app README files.
- Improved error handling and loading states across components for better user experience.
- Deleted ServiceLifecycleBadges, ServiceLogViewer, ServiceLogsDialog, ServiceStatusBadge, and ServiceStatusDialog components.
- Removed useServices and useServiceStatus hooks.
- Cleaned up services API by removing servicesApi and related types.
- Updated index files to reflect the removal of service components and hooks.
Config-only apps (e.g., SMTP) have no kustomization.yaml or install.sh — they only
provide configuration for other apps. Previously they showed a permanent yellow dot
because their status was always "added". Now the API detects config-only apps from
directory contents and the frontend suppresses status indicators for them.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Swap the tint colors for controlplane and worker nodes on the cluster page.
Replace the large NodeStatusBadge block with a compact inline badge as the
first row in the node info grid.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
SMTP is now managed as an infrastructure app (apps.smtp.*), not as a
cloud-level config (cloud.smtp.*). Remove the SMTP struct from the API
config, the SMTP card from the advanced config page, and update tests
and documentation to reference the new location.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added 'operation:cancelled' event handling in useGlobalSSE and useOperations hooks.
- Implemented useCancelOperation hook for cancelling operations with immediate UI feedback.
- Enhanced useSchedules hook to utilize SSE for schedule updates and improved schedule management.
- Updated BackupsPage to include schedule management UI and display active operations.
- Refactored operations handling to streamline fetching and filtering of operations.
- Improved backup and recovery plan handling with new health summary and recovery plan tracking.
- Updated API services for schedules and operations to align with new backend endpoints.
The Go structs used snake_case JSON tags (kubernetes_version, control_plane_nodes, etc.)
but the frontend expected camelCase, with no conversion layer. This broke the Kubernetes
version, node counts, and node status display on the dashboard and cluster pages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Continuation of blue-green backup work. Includes recovery plan
generation, active deployment tracking, and strategy updates for
postgres, mysql, longhorn, and config. Incomplete — branched to
make way for services/apps convergence.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>