feat(KLEF-204): User/Org Entity Unification And Project Flow Refactoring - #51
Merged
Merged
Conversation
…nt architecture Merged upstream plugin registry, metrics sink, usage tracking, and service instance page additions; retained our namespace/environment/permissions rewrite, Vercel-style routing, and sidebar redesign. Also fixes: - Namespace avatar upload sending Bearer token (was using raw fetch) - CreateOrgModal error handler reading .status not .response.status
- NodeDetailsPanel: remove duplicate imports that shadowed local LogViewer/WorkloadMetricsTab; drop stale projectID prop - PluginSlot: extend SlotRegistration locally with provides/capturesProviding/group fields missing from SDK v0.1.0 - ServerOverviewPage: add 'starting' to StatusChip state union - Add AccountSecurityPage/AccountSessionsPage stubs for [slug]/security and [slug]/sessions routes
…modding, node files Resolved conflicts across 10 files. Integrated: - Namespace-scoped workloads (namespace_id field, FindByNamespaceAndName, ListByNamespace) - Environments/variables/identity/namespaces domain modules - Node file API proxy (proxyFiles handler, fileClient, sharedSecret) - Modding foundations migrations (016-018 from remote, keyed independently) - Canvas groups backend module - Namespace/environment routing in workloads handler
Namespace-scoped workload listing and deletion, filter tabs, CreateServerPalette, KIND_META/inferKind, GroupNode canvas, and usage/logs wiring — merged with upstream catalog integration (blueprint backgrounds, crate logos) and 20-column workload schema.
…rrange stride fix Group nodes now render as dark glass panels (rgba(11,12,16,0.88) + backdrop-blur) with a 3px colored left border accent instead of nearly-invisible white overlay. Auto-arrange grid stride now uses actual rendered node dimensions instead of hardcoded 220x110, so nodes don't overlap and the group resizes correctly.
- identity: discard json.Encode error return - environments: remove unused const base and unused checkPerm method - workloads: remove unused orgSlugCleaner var, normalizeOrgSlug func, and regexp import - namespaces: remove empty if branch flagged by staticcheck
isaacwallace123
approved these changes
May 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Summary
SimpleServersPagethat works in both namespace mode (personal/shared namespaces) and project modeKIND_META+inferKindfor automatic server classification, and blueprint background images + crate logos sourced from the catalog APICreateServerModalwithCreateServerPalette— a full-screen palette with category browsingRelated Issues
Closes #
Changes
What's Included
API — Go
domain/workload.go—NamespaceIDfield onWorkloadports/repository.go—FindByNamespaceAndNameandListByNamespaceadded toRepositoryinterfaceports/spec.go—NamespaceSlugfield onWorkloadSpecfor container namingadapters/persistence/store.go—FindByNamespaceAndNameandListByNamespaceimplemented; 20-column schema withnamespace_id,game_version,modloader;ListByNamespaceexcludesdeletedstateadapters/http/handler.go— namespace-scoped routes (GET /namespaces/:ns/workloads,DELETE /namespaces/:ns/workloads/:name);ensureEnvironmentAccessreplacesensureProjectAccesson workload routesbootstrap/container.go+http.go— wires namespace workload handler, routes, usage handler, and plugin managerbootstrap/config.go— metrics sink and plugin registry URL configcore/users/— avatar upload, profile fields, user domain updatescore/logs/— log domain and handler updatescore/usage/— usage tracking handler and storeshared/middleware/auth.go,plugin_verifier.go— auth and plugin verification updatesWeb — Next.js / React
lib/api/projects.ts—listWorkloadsByNamespace,deleteWorkloadFromNamespace; updated workload DTOlib/api/— updatedlogs,usage,deployments,profiles,organizationsclientsfeatures/hosting/pages/SimpleServersPage.tsx— unified namespace + project mode, filter tabs,KIND_META/inferKind,CreateServerPalette, blueprint backgrounds and crate logos from catalogfeatures/hosting/ui/GroupNode.tsx— dark glass panel (rgba(11,12,16,0.88)+backdrop-blur(12px)), 3px colored left border accent, portal-based dropdown (position: fixed,zIndex: 9999) escaping ReactFlow stacking contextfeatures/hosting/ui/InfrastructureFlowCanvas.tsx— auto-arrange grid stride from actual rendered node dimensions; group drag-to-add with undo toastfeatures/hosting/model/useCanvasGroups.ts— full canvas group model: create, update, delete, fit-to-members, auto-arrange, persistent positionsfeatures/hosting/ui/GroupManagerModal.tsx— group create/edit modal with label, color picker, role, notesfeatures/hosting/ui/GroupEventContext.tsx— event context wiring GroupNode actions to canvas handlersfeatures/hosting/ui/NodeDetailsPanel.tsx— expanded node details panelfeatures/hosting/ui/NewServerSheet.tsx,CreateServerModal.tsx— updated server creation flowsfeatures/hosting/ui/InfrastructureNodeCard.tsx,LogViewer.tsx,RegionBadge.tsx,StatusBadge.tsx— updated node card and supporting componentslib/infrastructure-graph.ts— graph layout and group persistencecomponents/layout/PersonalHubSidebar.tsx— new Vercel-style namespace sidebar replacing project-tree sidebarcomponents/layout/AppShell.tsx,SidebarUserFooter.tsx,PersonalHubShell.tsx— shell and footer updatescomponents/layout/Sidebar.tsx— removed (replaced by PersonalHubSidebar)app/globals.css— global style refreshfeatures/dashboard/,features/auth/,features/settings/,features/plugins/,features/projects/— updated for new nav and namespace modelweb/package.json,pnpm-workspace.yaml,Dockerfile.dev— pnpm 10 pin,node-linker, build script allowlist for pnpm 11 compatWhat's Not Included
kleffio/daemon)Testing
How Was This Tested?
go build ./...after all persistence and domain changesinferKind; "All" shows full listmake dev-clean+make devfull stack verifiedTest Coverage
Breaking Changes
Does this PR introduce breaking changes?
If yes, describe the impact and any required migration steps:
The
Repositoryinterface gains two new methods (FindByNamespaceAndName,ListByNamespace) — any other implementations of this interface must add these methods. The workloads persistence schema requires thenamespace_id,game_version, andmodloadercolumns (migration 023 adds these). The old project-tree sidebar is removed and replaced; any route that relied on the old sidebar nav layout will need to be re-verified.Security Considerations
If any box is checked, describe the security impact and any mitigations applied:
Namespace-scoped workload routes use
ensureEnvironmentAccesswhich enforces that the caller has access to the namespace before listing or deleting workloads. No workload data is exposed without a valid authenticated session.Documentation
Does this PR require documentation updates?
If yes, check all that apply:
README.mdARCHITECTURE.md/docsUI/UX (If Applicable)
Screenshots or recordings:
Pre-Merge Checklist
feat:,fix:,chore:,docs:,refactor:,test:)Reviewer Notes