Skip to content

feat: support standalone panel/API without a local Kubernetes cluster - #630

Merged
ValgulNecron merged 40 commits into
GameplanePanel:masterfrom
Baylem:feat/standalone-panel
Oct 14, 2026
Merged

ValgulNecron merged 40 commits into
GameplanePanel:masterfrom
Baylem:feat/standalone-panel

Conversation

@Baylem

@Baylem Baylem commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

Summary

Gameplane can run its panel and API on a standalone Docker host without Kubernetes credentials, a central operator, agents, or an automatically registered local cluster. Remote Kubernetes clusters are registered explicitly and retain their own workload operators.

Closes #629.

Changes

  • Add database-backed management storage, empty-install enrollment, remote health monitoring, gateway configuration, and explicit remote routing for workloads and module management. Central administration and remote workload grants remain separate.
  • Protect credentials with authenticated encryption and durable, permission-checked keys. Compose and Helm separate key storage from database storage, support read-only provisioned keys, and reject unsafe ownership, modes, or extended access ACLs.
  • Add offline transactional master-key rotation with authenticated key identities, legacy compatibility, interrupted-command recovery, and stale-writer protection. Add in-place kubeconfig rotation preserving registration identity, gateway settings, and grants.
  • Make standalone registration atomic, recover matching API-owned legacy orphans, and guard credential/client publication against concurrent rotation or registration replacement.
  • Require verified HTTPS for standalone remotes; block unsafe destinations, proxy bypasses and redirects; pin DNS answers at dial time; support operator CIDR restrictions. Apply the policy to gateways and interactive stdin/PTY as well as REST, including system-root TLS verification. Bound responses, watch frames, notification snapshots, upgrade headers, and error-control streams.
  • Preserve dashboard drafts through background errors, clear a removed cluster selection without choosing another workload, show removal errors in the confirmation, and expose the panel build version.
  • Add standalone Compose and Helm profiles, operational key custody/recovery/rotation guidance, and API, PostgreSQL, chart, and container regression coverage.

Validation

  • API default and Linux/PostgreSQL builds and dashboard TypeScript checking passed locally. Tests and lint run in CI under repository policy.
  • All 40 commits in the PR are signed, and their signatures have been verified.
  • Validation for 117caf35: API tests on amd64 and arm64, PostgreSQL, API lint, dashboard tests/coverage, browser mock tests, standalone Compose smoke, and visual regression pass. The remaining integration jobs in CI are still running.

Installation notes

Run standalone key storage in Linux containers on a filesystem supporting POSIX ACL inspection. Move existing generated keys intact when adopting separate key volumes. Stop every API process for master-key rotation and retain separately protected historical keys for matching backups. Helm exposes api.panelKey.fileName to select a rotated generated key and existingSecret for externally provisioned keys.

Panel-only Helm installation requires --skip-crds. Existing Kubernetes-backed management configuration is not imported automatically. Remote workload grants and gateways require explicit setup. Standalone notifications use bounded five-second snapshots and may miss shorter transitions. See docs/standalone-panel.md.

Baylem added 7 commits October 7, 2026 23:45
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
@Baylem
Baylem marked this pull request as ready for review October 8, 2026 06:23
Signed-off-by: Baylem <zelathis@gmail.com>
@github-actions github-actions Bot added area: api REST/WebSocket gateway area: chart Helm chart and deployment area: e2e kind-based end-to-end suite area: shared netguard, gameaction, gameproto, svcutil and other shared packages area: specs spec-kit feature specs and design docs area: web React dashboard type: feature New capability or user-facing addition labels Oct 8, 2026
Baylem added 14 commits October 8, 2026 12:16
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Baylem added 3 commits October 8, 2026 12:49
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
@ValgulNecron ValgulNecron added the breaking Contains a breaking change to a CRD, API, or chart value label Oct 8, 2026
@ValgulNecron

Copy link
Copy Markdown
Collaborator

I can see edit to the website

web/src/components/RegisterClusterDialog.tsx
web/src/components/ModuleTarget.tsx, web/src/routes/Clusters.tsx
web/src/routes/AdminSettings.tsx, web/src/routes/AdminLogs.tsx

without any edit the design file can you confirm i did not miss the design file and if i did not miss it please do the required edit to the design

api/internal/auth/perms.go:131, api/internal/rbac/rbac.go:95 added the breaking tag

@ValgulNecron

Copy link
Copy Markdown
Collaborator

Did a quick check. and asked claude to do a review too. (if you thing claude is wrong on something it is possible please comment the reason and i will decide)

Signed-off-by: Baylem <zelathis@gmail.com>
@coderabbitai

coderabbitai Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 201 files, which is 101 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration
  • Configuration used: Repository: GameplanePanel/Gameplane/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 5540145d-8fad-4982-bba8-0bcdb8991b40
📥 Commits

Reviewing files that changed from the base of the PR and between 86cc48c and 117caf3.

⛔ Files ignored due to path filters: 30
  • assets/design-export/screenshots/Be7ZW.png is excluded by !**/*.png
  • assets/design-export/screenshots/BguST.png is excluded by !**/*.png
  • assets/design-export/screenshots/C9bR6.png is excluded by !**/*.png
  • assets/design-export/screenshots/D9QYZ.png is excluded by !**/*.png
  • assets/design-export/screenshots/EWrn0.png is excluded by !**/*.png
  • assets/design-export/screenshots/EkcbF.png is excluded by !**/*.png
  • assets/design-export/screenshots/FOVMf.png is excluded by !**/*.png
  • assets/design-export/screenshots/HVhmb.png is excluded by !**/*.png
  • assets/design-export/screenshots/OC804.png is excluded by !**/*.png
  • assets/design-export/screenshots/QFEg9.png is excluded by !**/*.png
  • assets/design-export/screenshots/RS0KZ.png is excluded by !**/*.png
  • assets/design-export/screenshots/RpHBg.png is excluded by !**/*.png
  • assets/design-export/screenshots/U9xSg.png is excluded by !**/*.png
  • assets/design-export/screenshots/Uzzje.png is excluded by !**/*.png
  • assets/design-export/screenshots/WrmU5.png is excluded by !**/*.png
  • assets/design-export/screenshots/YN8cE.png is excluded by !**/*.png
  • assets/design-export/screenshots/Z0oyh.png is excluded by !**/*.png
  • assets/design-export/screenshots/Z81TW.png is excluded by !**/*.png
  • assets/design-export/screenshots/ZlLf0.png is excluded by !**/*.png
  • assets/design-export/screenshots/aMU7O.png is excluded by !**/*.png
  • assets/design-export/screenshots/ffmEd.png is excluded by !**/*.png
  • assets/design-export/screenshots/h5clan.png is excluded by !**/*.png
  • assets/design-export/screenshots/kK8Ji.png is excluded by !**/*.png
  • assets/design-export/screenshots/l64bd.png is excluded by !**/*.png
  • assets/design-export/screenshots/n2qdi.png is excluded by !**/*.png
  • assets/design-export/screenshots/p8QSPq.png is excluded by !**/*.png
  • assets/design-export/screenshots/r139UP.png is excluded by !**/*.png
  • assets/design-export/screenshots/uMiwd.png is excluded by !**/*.png
  • assets/design-export/screenshots/w34N9.png is excluded by !**/*.png
  • design.pen is excluded by !**/*.pen
📒 Files selected for processing: 201
  • .github/workflows/ci.yaml
  • CHANGELOG.md
  • README.md
  • api/Dockerfile
  • api/cmd/main.go
  • api/cmd/management.go
  • api/cmd/management_test.go
  • api/cmd/mounts_test.go
  • api/cmd/panel_key.go
  • api/cmd/panel_key_test.go
  • api/go.mod
  • api/internal/auth/perms.go
  • api/internal/auth/perms_test.go
  • api/internal/auth/registry.go
  • api/internal/controlplane/credential_error.go
  • api/internal/controlplane/key_acl_linux.go
  • api/internal/controlplane/key_acl_linux_test.go
  • api/internal/controlplane/key_acl_unsupported.go
  • api/internal/controlplane/key_ciphertext.go
  • api/internal/controlplane/key_directory.go
  • api/internal/controlplane/key_durability_test.go
  • api/internal/controlplane/key_file_unix.go
  • api/internal/controlplane/key_file_unix_test.go
  • api/internal/controlplane/key_file_unsupported.go
  • api/internal/controlplane/key_file_unsupported_test.go
  • api/internal/controlplane/key_options.go
  • api/internal/controlplane/key_options_test.go
  • api/internal/controlplane/key_publication_unix.go
  • api/internal/controlplane/key_publication_unsupported.go
  • api/internal/controlplane/key_review_test.go
  • api/internal/controlplane/key_rotation.go
  • api/internal/controlplane/key_rotation_postgres_test.go
  • api/internal/controlplane/key_rotation_test.go
  • api/internal/controlplane/key_state.go
  • api/internal/controlplane/registrations.go
  • api/internal/controlplane/registrations_test.go
  • api/internal/controlplane/remote_health_fixture_test.go
  • api/internal/controlplane/resources.go
  • api/internal/controlplane/store.go
  • api/internal/controlplane/store_postgres_test.go
  • api/internal/controlplane/store_test.go
  • api/internal/db/migrations/common/016_standalone_management.sql
  • api/internal/db/migrations/common/017_standalone_key_state.sql
  • api/internal/handlers/binding_permissions.go
  • api/internal/handlers/cluster.go
  • api/internal/handlers/cluster_guard_test.go
  • api/internal/handlers/clusters.go
  • api/internal/handlers/clusters_gateway.go
  • api/internal/handlers/clusters_gateway_test.go
  • api/internal/handlers/clusters_kubeconfig.go
  • api/internal/handlers/clusters_kubeconfig_test.go
  • api/internal/handlers/clusters_registration_test.go
  • api/internal/handlers/clusters_remote_policy_test.go
  • api/internal/handlers/credential_review_test.go
  • api/internal/handlers/events_scope_test.go
  • api/internal/handlers/fleet.go
  • api/internal/handlers/fleet_test.go
  • api/internal/handlers/installation.go
  • api/internal/handlers/installation_test.go
  • api/internal/handlers/modules_cluster.go
  • api/internal/handlers/modules_cluster_test.go
  • api/internal/handlers/remote_bindings_test.go
  • api/internal/handlers/secrets_managed.go
  • api/internal/handlers/secrets_managed_test.go
  • api/internal/handlers/standalone_storage_test.go
  • api/internal/handlers/standalone_test.go
  • api/internal/handlers/systemlogs.go
  • api/internal/kube/client.go
  • api/internal/kube/loader.go
  • api/internal/kube/management.go
  • api/internal/kube/registry.go
  • api/internal/kube/remote_access.go
  • api/internal/kube/remote_access_test.go
  • api/internal/kube/remote_response.go
  • api/internal/kube/remote_response_test.go
  • api/internal/kube/remote_spdy.go
  • api/internal/kube/remote_spdy_test.go
  • api/internal/kube/stdin.go
  • api/internal/kube/watch.go
  • api/internal/kube/watch_rotation_test.go
  • api/internal/kube/watch_standalone.go
  • api/internal/kube/watch_standalone_test.go
  • api/internal/notify/format.go
  • api/internal/notify/format_test.go
  • api/internal/notify/notify.go
  • api/internal/notify/poll_standalone.go
  • api/internal/notify/poll_standalone_test.go
  • api/internal/notify/registry.go
  • api/internal/notify/registry_test.go
  • api/internal/notify/sinks.go
  • api/internal/notify/watch.go
  • api/internal/rbac/rbac.go
  • api/internal/registry/keys.go
  • api/internal/telemetry/collect.go
  • api/internal/ws/attach.go
  • api/internal/ws/gateway_capture_test.go
  • api/internal/ws/gateway_client.go
  • api/internal/ws/gateway_client_test.go
  • api/internal/ws/gateway_duration_test.go
  • api/internal/ws/gateway_private_fixture_test.go
  • api/specs.md
  • assets/design-export/MANIFEST.md
  • assets/design-export/json/Be7ZW.json
  • assets/design-export/json/BguST.json
  • assets/design-export/json/C9bR6.json
  • assets/design-export/json/D9QYZ.json
  • assets/design-export/json/EWrn0.json
  • assets/design-export/json/EkcbF.json
  • assets/design-export/json/FOVMf.json
  • assets/design-export/json/HVhmb.json
  • assets/design-export/json/OC804.json
  • assets/design-export/json/QFEg9.json
  • assets/design-export/json/RS0KZ.json
  • assets/design-export/json/RpHBg.json
  • assets/design-export/json/U9xSg.json
  • assets/design-export/json/Uzzje.json
  • assets/design-export/json/WrmU5.json
  • assets/design-export/json/YN8cE.json
  • assets/design-export/json/Z0oyh.json
  • assets/design-export/json/Z81TW.json
  • assets/design-export/json/ZlLf0.json
  • assets/design-export/json/aMU7O.json
  • assets/design-export/json/kK8Ji.json
  • assets/design-export/json/l64bd.json
  • assets/design-export/json/n2qdi.json
  • assets/design-export/json/p8QSPq.json
  • assets/design-export/json/r139UP.json
  • assets/design-export/json/uMiwd.json
  • assets/design-export/json/w34N9.json
  • charts/gameplane/examples/standalone-panel-values.yaml
  • charts/gameplane/templates/NOTES.txt
  • charts/gameplane/templates/_helpers.tpl
  • charts/gameplane/templates/api.yaml
  • charts/gameplane/templates/clusterops-rbac.yaml
  • charts/gameplane/templates/crd-apply-hook.yaml
  • charts/gameplane/templates/grafana-dashboard.yaml
  • charts/gameplane/templates/mcp-server.yaml
  • charts/gameplane/templates/module-cosign-key.yaml
  • charts/gameplane/templates/modulesource.yaml
  • charts/gameplane/templates/mtls.yaml
  • charts/gameplane/templates/namespaces.yaml
  • charts/gameplane/templates/networkpolicies.yaml
  • charts/gameplane/templates/operator.yaml
  • charts/gameplane/templates/panel-key.yaml
  • charts/gameplane/templates/prometheusrule.yaml
  • charts/gameplane/templates/servicemonitors.yaml
  • charts/gameplane/templates/validate.yaml
  • charts/gameplane/templates/web.yaml
  • charts/gameplane/values.yaml
  • charts/tests/check_standalone.py
  • deploy/standalone/README.md
  • deploy/standalone/compose.provisioned-key.yaml
  • deploy/standalone/compose.yaml
  • deploy/standalone/smoke.py
  • docs/architecture.md
  • docs/comparison-sources.md
  • docs/gateway-install.md
  • docs/install.md
  • docs/multicluster-agent-gateway.md
  • docs/multicluster-ui.md
  • docs/security.md
  • docs/standalone-panel.md
  • docs/unified-dashboard.md
  • specs/023-standalone-panel/spec.md
  • test/e2e/multicluster_e2e_test.go
  • web/e2e/screenshots/slice-gameconfig.spec.ts
  • web/e2e/specs/live/share-links.spec.ts
  • web/specs.md
  • web/src/components/AppLayout.test.tsx
  • web/src/components/AppLayout.tsx
  • web/src/components/ClusterSelector.test.tsx
  • web/src/components/ClusterSelector.tsx
  • web/src/components/ModuleTarget.tsx
  • web/src/components/RegisterClusterDialog.tsx
  • web/src/components/modules/BuildModuleDialog.tsx
  • web/src/components/modules/ModuleCard.test.tsx
  • web/src/components/modules/ModuleCard.tsx
  • web/src/components/modules/ModuleSourcesPanel.tsx
  • web/src/components/modules/UploadModuleDialog.tsx
  • web/src/components/ui/NotificationsPanel.test.tsx
  • web/src/components/ui/NotificationsPanel.tsx
  • web/src/lib/api.ts
  • web/src/lib/cluster.test.ts
  • web/src/lib/cluster.ts
  • web/src/lib/endpoints.ts
  • web/src/lib/moduleTargets.test.ts
  • web/src/lib/resourceClient.test.ts
  • web/src/lib/useInstallation.ts
  • web/src/routes/AdminLogs.test.tsx
  • web/src/routes/AdminLogs.tsx
  • web/src/routes/AdminSettings.tsx
  • web/src/routes/Cluster.tsx
  • web/src/routes/Clusters.tsx
  • web/src/routes/Modules.test.tsx
  • web/src/routes/Modules.tsx
  • web/src/routes/Standalone.test.tsx
  • web/src/routes/Users.test.tsx
  • web/src/routes/Users.tsx
  • web/src/routes/tabs/Settings.test.tsx
  • web/src/routes/tabs/Settings.tsx
  • web/src/test/handlers.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Comment thread api/internal/kube/watch.go Outdated
Comment thread charts/gameplane/templates/NOTES.txt
Comment thread deploy/standalone/README.md Outdated
Comment thread README.md Outdated
Comment thread docs/install.md Outdated
Comment thread web/src/routes/AdminSettings.tsx
<fieldset key={draftRevision} disabled={save.isPending} inert={save.isPending} className="min-w-0 flex-1 overflow-auto border-0 p-6 scrollbar-thin">
{/* Share dialogs own their state independently of the settings draft.
A status refresh must not discard a newly issued, one-time token. */}
<fieldset key={section === "sharelinks" ? "sharelinks" : draftRevision} disabled={save.isPending} inert={save.isPending} className="min-w-0 flex-1 overflow-auto border-0 p-6 scrollbar-thin">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Nit: this share-links fix (the fieldset key, its Settings.test.tsx test and the web/e2e/specs/live/share-links.spec.ts selector) is unrelated to standalone mode. Consider splitting it into its own fix: PR so it can be reviewed and reverted on its own.


Generated by Claude Code

@Baylem Baylem Oct 14, 2026 •

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This is separate from standalone mode, and it is isolated in fix commit 834c3ca7, so it can be reviewed or reverted independently. My preference is to retain that isolated fix here; if you prefer a separate PR, it can be extracted before merge.

Comment thread web/src/components/modules/ModuleCard.tsx Outdated
Comment thread web/src/components/ModuleTarget.tsx Outdated
Comment thread api/internal/telemetry/collect.go
@Baylem

Baylem commented Oct 14, 2026

Copy link
Copy Markdown
Member Author

I can see edit to the website

web/src/components/RegisterClusterDialog.tsx
web/src/components/ModuleTarget.tsx, web/src/routes/Clusters.tsx
web/src/routes/AdminSettings.tsx, web/src/routes/AdminLogs.tsx

without any edit the design file can you confirm i did not miss the design file and if i did not miss it please do the required edit to the design

api/internal/auth/perms.go:131, api/internal/rbac/rbac.go:95 added the breaking tag

@ValgulNecron the design updates were missing, I included them in cf0f64f8: design.pen

Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
@Baylem
Baylem force-pushed the feat/standalone-panel branch from b436545 to b73bbbc Compare October 14, 2026 18:32
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
Signed-off-by: Baylem <zelathis@gmail.com>
@Baylem

Baylem commented Oct 14, 2026 •

Copy link
Copy Markdown
Member Author
  1. Should standalone Helm installs require --skip-crds, or should we change the chart packaging?

    My recommendation: Keep the existing chart and documented flag for this PR.

    Alternatives: Ship a separate panel chart, or move CRDs into gated templates with upgrade/uninstall coverage for existing combined installs.

  2. Should we support encrypted databases created before this PR merges?

    My recommendation: Keep the authenticated legacy reader and rewrite credentials as gpk1 during key rotation.

    Alternative: Remove legacy format support and require users to recreate pre-merge standalone databases.

  3. Should key rotation require an explicit source key?

    My recommendation: Require --old-key-file or GAMEPLANE_PANEL_KEY_FILE, since the supplied deployments use /keys/panel.key.

    Alternative: Fall back to the server default, /data/panel.key, when neither is supplied, while retaining explicit overrides.

  4. Should this PR retain one API process and Recreate, or include support for overlapping processes?

    My recommendation: Keep both constraints because audit writes and user-management safeguards use process-local locks.

    Alternative: Provision a shared key, coordinate audit writes and user-management safeguards in the database, and verify concurrent operation before enabling rolling updates or multiple replicas.

  5. Should the share-link fix stay in this PR or move to its own PR?

    My recommendation: Keep the isolated fix in 834c3ca7.

    Alternative: Remove it from this branch and submit it as a separate PR.

  6. Should standalone telemetry retain local-only counts, identify its mode, or count remote workloads?

    My recommendation: Add a field such as mode: "standalone" with coordinated schema/receiver changes in this PR, or aggregate remote counts after defining how to handle unreachable clusters and duplicate registrations.

    Alternative: Keep local-only counts in this PR and add a standalone marker through a schema/receiver follow-up.

@ValgulNecron
ValgulNecron merged commit 6ed25c1 into GameplanePanel:master Oct 14, 2026
97 checks passed
ValgulNecron pushed a commit that referenced this pull request Oct 14, 2026
Brings in PRs #630, #690, #691 and #696. Conflicts resolved:
- api/internal/notify/format.go: master's remote-cluster headline is
  kept through a new notify.title.cluster message, so
  "[prod] server unhealthy: remote-1/games/mc" is unchanged in English;
  app.json regenerated with make i18n-sync.
- web/src/lib/endpoints.ts: master's cluster parameter on Modules,
  and Modules.locales takes the same parameter.
- web/src/components/ui/NotificationsPanel.tsx: both the formatter ref
  effect and master's enabled guard.
- docs/architecture.md: master's standalone-panel paragraph, then the
  Internationalization section.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claude <noreply@anthropic.com>
@ValgulNecron

Copy link
Copy Markdown
Collaborator

let go with a follow up for this.
if the flag is not set the crd are created like now. if the flag is set it does not create them based on the proposition claude code made.

Consider moving the CRDs out of crds/ into a template gated on operator.enabled / !api.standalone, or shipping the panel as a separate chart.
  1. yes legacy database should still be supported even after the merge. should not have trusted claude to remember basic rules.

  2. yes the key should be specified. (even if it should work just fine even if not. )

  3. for now we will remain on the small downtime during upgrade cause by the recreate. (but in the future a rewrite to make this work without one will be needed)

  4. yes it can remain in this pr

  5. not decided for now let stay on the current models i will see later how to take this into account

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: api REST/WebSocket gateway area: chart Helm chart and deployment area: e2e kind-based end-to-end suite area: shared netguard, gameaction, gameproto, svcutil and other shared packages area: specs spec-kit feature specs and design docs area: web React dashboard breaking Contains a breaking change to a CRD, API, or chart value type: feature New capability or user-facing addition

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support standalone panel/API installs without a local Kubernetes cluster

2 participants