Shared Resource Model
SkillCloud & infraWork on Luxury Yacht canonical Kubernetes resource identity, status presentation, facts, ResourceLink relationships, DTO projection, table/detail/object-map parity, and shared resource model tests
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Shared Resource Model skill
What this skill tells your AI
The instructions your AI receives, as published by luxury-yacht/app in .agents/skills/shared-resource-model/SKILL.md and read by ahel’s review.
Use this when touching canonical object identity, resource status,
statusPresentation, lifecycle, facts, owner/relationship links,
ResourceLink, event involved-object identity, DTO projection, or parity across
refresh rows, streams, object panel details, and object map nodes/edges.
Read First
AGENTS.mdbackend/AGENTS.mdfrontend/AGENTS.mdfor frontend consumersdocs/architecture/shared-resource-model.mddocs/architecture/resource-kind-registry.mdfor the per-kind package + registry layout (where identity, model, facts, and DTO live)docs/architecture/catalog.mdwhen identity/existence is involveddocs/architecture/refresh-system.mdwhen rows, streams, events, or object details consume the model
Backend Entry Points
backend/resources/<kind>— per-kindidentity.go,descriptor.go,model.go,facts.go,dto.go(the single definition of a kind)backend/resourcemodel— shared status/facts/link primitives + relationship index that the per-kind models build onbackend/resourcekind,backend/resourcecontract,backend/kind/kindregistry— identity leaf, the built-in identity contract, and the kind registrybackend/refresh/snapshotbackend/resource_gateway.go— request-shaped detail/action ownerbackend/resources/types— shared cross-kind DTO field typesbackend/object_detail_provider.go— ResourceGateway detail dispatch (generated bindings)
Frontend Entry Points
frontend/src/shared/utils/backendStatusPresentation.tsfrontend/src/shared/utils/resourceLinkIdentity.tsfrontend/src/modules/object-panelfrontend/src/modules/object-map- Refresh/table consumers under
frontend/src/modules/*andfrontend/src/core/refresh/types.ts
Checklist
- Object refs crossing boundaries include
clusterId, group, version, kind, and namespace/name for concrete objects. - Backend GVK/GVR/scope lookups use the object catalog
ResourceResolver. Built-ins use their real group/version from the catalog seed; CRDs preserve group/version from discovery, catalog, owner refs, HPA targets, events, or manifests. - Primary status is computed once in backend model code and projected as
status,statusState,statusPresentation, and optionalstatusReason. - Frontend renders backend presentation fields instead of deriving primary status classes.
- Relationships use
ResourceLink; incomplete source refs become display-only refs rather than unsafe navigation links. - Facts stay semantic until the final DTO/table formatting boundary.
- Table rows, stream rows, object panel details, events, and object-map payloads stay consistent when they render the same resource family.
- Tests cover model status/facts/links and every changed projection.
Validation
Use focused checks while iterating:
mise exec -- go test ./backend/resourcemodel ./backend/refresh/snapshot ./backend/resources/... ./backend
mise exec -- npm run typecheck --prefix frontend
mise exec -- npm run test --prefix frontend -- backendStatusPresentation resourceLinkIdentity object-map object-panel
Then follow the root final validation gate.
Signals
- GitHub stars
- 435
- Forks
- 23
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
shared-resource-model- Source
- github.com/luxury-yacht/app