--- name: cctest-opencode-sync description: "[recipe-maintainer/cctest] Ensure every Claude skill has a corresponding OpenCode skill alias (Wraps the autonomic-recipe-maintainer skill /opencode-sync; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-opencode-sync.)" --- # cctest-opencode-sync (cctest wrapper) **Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/opencode-sync/SKILL.md` — read it and follow it. This wrapper only sets context + policy. **Context:** this is an **autonomic-recipe-maintainer (ARM)** skill. It operates on the recipe-maintainer **cctest** test server / local abra sandbox — NOT on the cc-ci CI server or its shared swarm. Execute with the submodule as your working directory: `cd /srv/cc-ci-orch/vendor/autonomic-recipe-maintainer`. If the ARM environment is not yet configured on this host (`settings.toml` from `settings.toml.example`, sandbox/test instances), run `/cctest-intro` / `/cctest-setup-sandbox` first. **Policy overrides (cc-ci-orchestrator conventions win):** - Anything that would **merge a recipe PR or push a recipe main without review** requires explicit operator opt-in per run — the cc-ci standing rule is recipe upgrade PRs are operator-merged, and ARM skills that say otherwise (e.g. full-auto upgrade flows) do NOT inherit blanket authorization here. - Never touch cc-ci infrastructure (the CI server, its swarm, `/root/*` clones, the weekly timers) from an ARM skill — cc-ci work goes through the cc-ci skills. - The submodule is **pinned**: don't commit into it from here; upstream ARM changes arrive via a deliberate submodule bump + `scripts/gen-cctest-skills.py` regeneration.