Prepare OCI Target, Space.ReleaseTargetID, and matching Unit.TargetID membership. Use for "set up a target", "publish this Space to OCI", "attach Units", or "do I need a worker?". Direct ConfigHub-provider delivery is historical and unsupported in the reviewed current profile.
Execution mode: follow references/execution-modes.md. This Skill grants no automatic tool permission. Standalone use previews the before/after EffectiveReleaseSet, then submits one requested worker, Target, Space, or Unit binding change at a time to the host permission system; an external overlay may stop it before Bash.
A Unit TargetID by itself is not enough for Space Releases.
Space.ReleaseTargetID identifies the one Target consumed by cub release publish <space>.Unit.TargetID exactly equals the ReleaseTargetID.Releases are published as OCI manifests. Argo CD or Flux consumes them outside ConfigHub, authenticating as a server worker entity whose bot user is granted View and ViewChildren on the Target. A Target names no worker and carries no provider or toolchain; access to it is only that grant. No external worker process is needed for this built-in delivery path.
cub variant create ... --target ... and cub variant upload ... --target ... can establish these relationships for new variants. This skill is the explicit repair/setup route for existing Spaces and for auditing ambiguous bindings.
Earlier surfaces taught a ProviderType ConfigHub Target for direct ConfigHub/YAML delivery. Preserve that fact only as historical context; do not present it as current Release delivery. Targets no longer carry a ProviderType, and the former per-Unit runtime apply path is retired. Explain that no current supported command provides that route. ProviderType survives only on the Unit, where only OCI or unset may have a Target: a Unit with ProviderType None (the default for AppConfig toolchains) is never in a Release, and a ConfigHub/YAML Unit defaults to ConfigHub, configuration ConfigHub applies to itself.
cub auth status
cub worker list --space <worker-space> -o json
cub target list --space <target-space> -o json
cub space get <app-space> -o json
cub unit list --space <app-space> --select "TargetID,HeadRevisionNum,ValidationErrors,ToolchainType" -o jsonBind the organization/context, SpaceID, existing ReleaseTargetID, every UnitID/TargetID, and the intended target owner/slug. If changing a current target would add or remove Units from the EffectiveReleaseSet, disclose the before/after set and require a fresh release proposal after binding.
Confirm every form with installed help immediately before submission. For a clear standalone setup request, submit the first missing step through the host permission system, verify it, then continue one requested step at a time.
cub worker create --space <worker-space> --allow-exists --is-server-worker server-workerAfter the scope preview remains unchanged, submit this one command to the host permission system. Do not combine it with Target creation.
Read the server worker's bot user (BridgeWorker.UserID) and grant it View and ViewChildren on the new Target: ViewChildren authorizes pulling the Releases published for the Target, and View lets the puller find it.
cub worker get --space <worker-space> server-worker -o json
cub target create <target-slug> --space <target-space> \
--permission View:<bot-user-id> --permission ViewChildren:<bot-user-id>A Target takes no parameters, provider, or worker. Cluster/controller configuration is a separate integration. For an existing Target, add the same grants with cub target update <target-slug> --space <target-space> --permission ....
cub space update <app-space> --release-target <target-space>/<target-slug>This --release-target step is load-bearing. It sets Space.ReleaseTargetID; a proposal that only calls cub unit set-target is incomplete.
For one intended Unit:
cub unit set-target <unit-slug> <target-space>/<target-slug> --space <app-space>For an exact reviewed set:
cub unit set-target <target-space>/<target-slug> --space <app-space> --unit <unit-1>,<unit-2>A metadata selector is supported, but resolve it to UnitIDs and show the exact count before submitting it:
cub unit set-target <target-space>/<target-slug> --space <app-space> --where "Labels.Tier = 'backend'"Do not claim “single-Unit delivery” after setting one Unit: a later release publish captures every Unit whose TargetID matches the Space's ReleaseTargetID. If other Units already match, show them. If the user's intent is truly isolated, propose a dedicated Variant Space rather than relying on a filter the Release command cannot accept.
The scope preview must bind:
ReleaseTargetID;Changing the Target, Space, Unit selector, resolved Unit membership, grant, or command creates a new scope. After a binding completes, rebuild the release-publish preview from fresh reads; permission for target binding is not permission for release publication.
cub target get <target-slug> --space <target-space> -o json
cub space get <app-space> -o json
cub unit list --space <app-space> --select "TargetID,HeadRevisionNum,ValidationErrors" -o jsonA successful binding requires:
Space.ReleaseTargetID equals that TargetID;OCI or unset can);ReleaseTargetID broadens release scope without explicit re-approval;cub space open <target-space> --print-urlcub space open <app-space> --print-urlcub unit open <unit> --space <app-space> --print-urlNavigation URLs do not replace ID/org verification.
compatibility/current-profile.v1.jsoncompatibility/no-loss-inventory.v1.jsonrelease-publish — computes the exact EffectiveReleaseSet and release approval subject.worker-bootstrap — external workers remain available for custom functions, not built-in OCI Release delivery.1429123
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.