build/skills/reconcile/SKILL.md
Use when @github layer/namespace pins drift across repos and the resolver emits "referenced at multiple versions" warnings — `charly box reconcile` aligns every pin of a repo to one version (clearing the warnings). Invoked as `charly box reconcile`.
npx skillsauth add overthinkos/overthink-plugins reconcileInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
@github version pinsInvoked as charly box reconcile. See /charly-image:image for the family overview.
The layer resolver compares each layer's PER-ENTITY version: (read after fetch),
not the repo git tag — so a repo re-tag of an UNCHANGED layer does NOT warn. When
a layer DOES resolve to two different per-entity versions (a family pinned to a
genuinely newer layer than the shared infra it composes), it warns once and uses
the newest (see /charly-internals:go "Remote-layer resolver", /charly-build:validate).
The git :vTAG is only the FETCH coordinate. charly box reconcile aligns the
on-disk git-tag pins — for each distinct repo referenced by the project's
versioned YAML, it rewrites EVERY pin of that repo to ONE target tag, so every
reference fetches one commit per repo and the next charly box generate emits
zero version warnings. Edits are comment-preserving (yaml.v3 node API) and idempotent.
The zero-warnings R10 gate (CLAUDE.md R1) makes this load-bearing: a change
that introduces a version mismatch is not landable until charly box reconcile
clears the warning.
| Action | Command | Description |
|---|---|---|
| Preview rewrites | charly box reconcile --dry-run | Print every pin it would change; touch nothing |
| Align to newest referenced | charly box reconcile | Rewrite each repo's pins to the newest version ALREADY referenced (offline) |
| Align to newest remote tag | charly box reconcile --remote | Query git ls-remote --tags per repo and bump to the newest tag |
charly box reconcile --dry-run # see the plan
charly box reconcile # align to newest referenced (no network)
charly -C box/cachyos box reconcile # reconcile a submodule's pins
@github.com/owner/repo[/path]:vTAG ref in the project's
versioned YAML files (charly.yml + discovered box/<name>/charly.yml /
candy/<name>/charly.yml, plus any flat-imported legacy per-kind files —
charly.yml / check.yml / local.yml / pod.yml / k8s.yml / vm.yml /
charly.yml). Refs appear in import: namespaces, image base: / builder: /
candy:, and kind:local candy: lists.compareSemver, orders CalVer correctly, no network) or, with --remote, the
newest tag on the remote (GitLatestTag).charly box reconcile operates on the CURRENT project (cwd; honors the top-level
-C / --dir / CHARLY_PROJECT_DIR). For a multi-repo tree (the main repo + its
box/<distro> submodules), run it per repo, or per submodule via -C image/<name>. This pairs with the cross-repo landing order in
/charly-internals:git-workflow B6: land + tag the producer FIRST, then
charly box reconcile repoints the consumer to the producer's fresh tag before the
consumer's authoritative R10.
charly/reconcile.go — ImageReconcileCmd (wired under charly box in charly/image.go).
Reuses ParseRemoteRef / IsRemoteCandyRef / StripVersion (charly/refs.go),
compareSemver / GitLatestTag / RepoGitURL (charly/refs_git.go), and the
comment-preserving load/yaml.Marshal pattern from charly/yaml_setter.go. Covered
by charly/reconcile_test.go (newest-referenced alignment, comment preservation,
idempotency, single-version-untouched, no-pins no-op).
/charly-internals:go "Remote-layer resolver" — the warn-and-newest-wins resolver this aligns to./charly-build:validate — surfaces the multi-version warning reconcile clears./charly-internals:git-workflow — cross-repo (B6) producer→consumer landing that calls reconcile./charly-build:migrate — per-push CalVer tags that reconcile pins point at./charly-image:image — import: / namespace authoring + the family overview.Invoke when the resolver warns that a layer is referenced at multiple versions,
when aligning a consumer's pins to a freshly-tagged producer, or whenever you need
the project's @github pins consistent for a zero-warnings R10.
tools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).