name: object-panel description: Work on Luxury Yacht object-panel details, YAML, actions, logs, shell/debug tabs, docked panels, related objects, and tests
Object Panel
Use this when touching object detail panels, overview/detail tabs, YAML read/apply/edit flows, related objects, logs, shell/debug tabs, Helm content, object actions, panel docking, or object-panel tests.
Core Contracts
Read:
AGENTS.mdbackend/AGENTS.mdfor backend detail/action changesfrontend/AGENTS.mdfor frontend panel changesdocs/frontend/dockable-panels.mddocs/frontend/yaml-editor.mdfor YAML editor surfacesdocs/architecture/shared-resource-model.mdfor identity, status, links, facts, or lifecycledocs/architecture/data-access.mdfor frontend reads- Workflow docs for the specific tab:
docs/workflows/logs/overview.md,docs/workflows/shell-debug.md, ordocs/workflows/object-map.md
Backend Entry Points
backend/object_detail_provider.gobackend/resourcesbackend/resources/typesbackend/object_yaml*.gobackend/resources/pods/logs.gobackend/resources/nodes/logs.gobackend/resources/pods/debug.gobackend/shell_sessions.go
Backend object-panel work must keep requests cluster-scoped and use complete
GVK/object identity. Rich detail and imperative operations belong in
backend/resources; list/table snapshot payloads belong in
backend/refresh/snapshot.
When adding a typed detail fetcher in backend/object_detail_provider.go, also
add exact-GVK capability metadata in objectDetailFetcherGVKs. That map
declares which concrete built-in GVK the typed fetcher can serve; it is not a
resource identity source and must not be used as a catalog replacement.
Frontend Entry Points
frontend/src/modules/object-panelfrontend/src/modules/object-panel/components/ObjectPanelfrontend/src/modules/object-panel/components/ObjectPanel/Logsfrontend/src/modules/object-panel/components/ObjectPanel/NodeLogsfrontend/src/modules/object-panel/hooksfrontend/src/shared/components/yamlfor shared YAML editor mechanicsfrontend/src/ui/dockablefrontend/src/shared/components/modalsfrontend/wailsjs/go/models.tswhen Go DTOs change
Frontend object-panel work must use backend-provided statusPresentation and
ResourceLink.ref where available. Do not reconstruct object identity from kind
and name when a full backend reference should be carried.
Log viewer presentation shared by container logs and node logs lives under
frontend/src/modules/object-panel/components/ObjectPanel/Logs. Keep
transport-specific wiring in the container or node shell, and put shared search,
CSV export, parsed JSON, ANSI rendering, scroll restoration, and terminal theme
behavior in the shared log viewer utilities/components.
YAML editor mechanics live in frontend/src/shared/components/yaml/YamlEditor.
Use that shared component for single-document YAML viewing/editing instead of
adding new CodeMirror/search/context-menu stacks inside object-panel tabs. Keep
workflow state such as refresh, object identity, permissions, save/cancel,
reload/merge, drift, managedFields policy, and post-save notices in the
object-panel wrapper.
Object actions (delete, restart, scale, rollback, trigger, suspend,
port-forward) run through the shared useObjectActionController
(frontend/src/shared/hooks) rendered by ActionsMenu — the same controller
the cluster/namespace tables and object map use. It owns action execution,
permission gating, and every action modal (confirm/scale/scale-to-zero/rollback/
port-forward). The object-panel wrapper supplies only lifecycle callbacks
(onAfterDelete to close the panel, onAfterAction to refetch) plus the Node
cordon/drain openers. Do not reintroduce a panel-local action reducer, per-action
prop drilling through DetailsTab, or bespoke action modals.
Checklist
- Object references include
clusterId,group,version,kind, and namespace/name for concrete objects. - Backend DTO changes are reflected in frontend bindings/types.
- Status rendering uses backend presentation fields.
- Actions and tabs respect permissions/capabilities and surface denial reasons where applicable.
- Object actions go through the shared
useObjectActionController(no panel-local action reducer, prop-drilled handlers, or duplicate modals). - Docked panel state, refresh behavior, and cluster/namespace changes remain consistent.
- YAML surfaces use
YamlEditorfor editor mechanics and keep workflow state in the caller. - Tests cover the changed tab, action, or identity flow.
- Non-doc changes pass
mage qc:prerelease.
Validation
Use focused checks while iterating:
go test ./backend ./backend/resources/...
npm run typecheck --prefix frontend
npm run test --prefix frontend -- object-panel
Then run mage qc:prerelease for non-documentation changes.