diff --git a/.claude/skills/cctest-init-instance/SKILL.md b/.claude/skills/cctest-init-instance/SKILL.md new file mode 100644 index 0000000..e9e44e8 --- /dev/null +++ b/.claude/skills/cctest-init-instance/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-init-instance +description: "[recipe-maintainer/cctest] Deploy all maintained recipes to the active test instance from scratch (Wraps the autonomic-recipe-maintainer skill /init-instance; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-init-instance.)" +--- + +# cctest-init-instance (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-init-instance/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/init-instance/SKILL.md`. diff --git a/.claude/skills/cctest-intro/SKILL.md b/.claude/skills/cctest-intro/SKILL.md new file mode 100644 index 0000000..c68d30d --- /dev/null +++ b/.claude/skills/cctest-intro/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-intro +description: "[recipe-maintainer/cctest] Explain what this project is and how to get started (Wraps the autonomic-recipe-maintainer skill /intro; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-intro.)" +--- + +# cctest-intro (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-intro/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/intro/SKILL.md`. diff --git a/.claude/skills/cctest-new-recipe-guide/SKILL.md b/.claude/skills/cctest-new-recipe-guide/SKILL.md new file mode 100644 index 0000000..eb7844a --- /dev/null +++ b/.claude/skills/cctest-new-recipe-guide/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-new-recipe-guide +description: "[recipe-maintainer/cctest] Guide for developing a new Co-op Cloud recipe from scratch (Wraps the autonomic-recipe-maintainer skill /new-recipe-guide; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-new-recipe-guide.)" +--- + +# cctest-new-recipe-guide (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-new-recipe-guide/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/new-recipe-guide/SKILL.md`. diff --git a/.claude/skills/cctest-opencode-sync/SKILL.md b/.claude/skills/cctest-opencode-sync/SKILL.md new file mode 100644 index 0000000..50c6935 --- /dev/null +++ b/.claude/skills/cctest-opencode-sync/SKILL.md @@ -0,0 +1,13 @@ +--- +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 (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-opencode-sync/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/opencode-sync/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-check/SKILL.md b/.claude/skills/cctest-recipe-check/SKILL.md new file mode 100644 index 0000000..0890710 --- /dev/null +++ b/.claude/skills/cctest-recipe-check/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-check +description: "[recipe-maintainer/cctest] Fetch a Co-op Cloud recipe and check for available upgrades (Wraps the autonomic-recipe-maintainer skill /recipe-check; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-check.)" +--- + +# cctest-recipe-check (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-check/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-check/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-create-pr/SKILL.md b/.claude/skills/cctest-recipe-create-pr/SKILL.md new file mode 100644 index 0000000..0c8f0c6 --- /dev/null +++ b/.claude/skills/cctest-recipe-create-pr/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-create-pr +description: "[recipe-maintainer/cctest] Push local recipe commits to git.autonomic.zone and open a PR against an upstream-synced main branch (Wraps the autonomic-recipe-maintainer skill /recipe-create-pr; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-create-pr.)" +--- + +# cctest-recipe-create-pr (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-create-pr/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-create-pr/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-deploy/SKILL.md b/.claude/skills/cctest-recipe-deploy/SKILL.md new file mode 100644 index 0000000..a518363 --- /dev/null +++ b/.claude/skills/cctest-recipe-deploy/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-deploy +description: "[recipe-maintainer/cctest] Deploy the local recipe checkout to the test instance (Wraps the autonomic-recipe-maintainer skill /recipe-deploy; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-deploy.)" +--- + +# cctest-recipe-deploy (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-deploy/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-deploy/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-guidelines/SKILL.md b/.claude/skills/cctest-recipe-guidelines/SKILL.md new file mode 100644 index 0000000..8fb92e4 --- /dev/null +++ b/.claude/skills/cctest-recipe-guidelines/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-guidelines +description: "[recipe-maintainer/cctest] Guidelines for all recipe operations including local change preservation, version format, and secrets (Wraps the autonomic-recipe-maintainer skill /recipe-guidelines; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-guidelines.)" +--- + +# cctest-recipe-guidelines (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-guidelines/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-guidelines/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-init/SKILL.md b/.claude/skills/cctest-recipe-init/SKILL.md new file mode 100644 index 0000000..fae2b41 --- /dev/null +++ b/.claude/skills/cctest-recipe-init/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-init +description: "[recipe-maintainer/cctest] Create a new test instance and recipe-info for a recipe (Wraps the autonomic-recipe-maintainer skill /recipe-init; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-init.)" +--- + +# cctest-recipe-init (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-init/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-init/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-logging/SKILL.md b/.claude/skills/cctest-recipe-logging/SKILL.md new file mode 100644 index 0000000..91c4957 --- /dev/null +++ b/.claude/skills/cctest-recipe-logging/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-logging +description: "[recipe-maintainer/cctest] Logging instructions for maintaining detailed operation logs in the logs directory (Wraps the autonomic-recipe-maintainer skill /recipe-logging; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-logging.)" +--- + +# cctest-recipe-logging (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-logging/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-logging/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-new-tag/SKILL.md b/.claude/skills/cctest-recipe-new-tag/SKILL.md new file mode 100644 index 0000000..e5585fb --- /dev/null +++ b/.claude/skills/cctest-recipe-new-tag/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-new-tag +description: "[recipe-maintainer/cctest] Bump the recipe version and create an annotated git tag (Wraps the autonomic-recipe-maintainer skill /recipe-new-tag; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-new-tag.)" +--- + +# cctest-recipe-new-tag (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-new-tag/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-new-tag/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-overview/SKILL.md b/.claude/skills/cctest-recipe-overview/SKILL.md new file mode 100644 index 0000000..e859ac7 --- /dev/null +++ b/.claude/skills/cctest-recipe-overview/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-overview +description: "[recipe-maintainer/cctest] Check all maintained recipes and recommend what to upgrade (Wraps the autonomic-recipe-maintainer skill /recipe-overview; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-overview.)" +--- + +# cctest-recipe-overview (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-overview/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-overview/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-review/SKILL.md b/.claude/skills/cctest-recipe-review/SKILL.md new file mode 100644 index 0000000..b965d24 --- /dev/null +++ b/.claude/skills/cctest-recipe-review/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-review +description: "[recipe-maintainer/cctest] Review a recipe for Co-op Cloud best practices (Wraps the autonomic-recipe-maintainer skill /recipe-review; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-review.)" +--- + +# cctest-recipe-review (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-review/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-review/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-test-all/SKILL.md b/.claude/skills/cctest-recipe-test-all/SKILL.md new file mode 100644 index 0000000..766a4cb --- /dev/null +++ b/.claude/skills/cctest-recipe-test-all/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-test-all +description: "[recipe-maintainer/cctest] Run tests for all maintained recipes, deploying each one at a time (Wraps the autonomic-recipe-maintainer skill /recipe-test-all; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-all.)" +--- + +# cctest-recipe-test-all (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-test-all/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-all/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-test-backup/SKILL.md b/.claude/skills/cctest-recipe-test-backup/SKILL.md new file mode 100644 index 0000000..7a0a191 --- /dev/null +++ b/.claude/skills/cctest-recipe-test-backup/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-test-backup +description: "[recipe-maintainer/cctest] Test backing up and restoring a recipe's test instance (Wraps the autonomic-recipe-maintainer skill /recipe-test-backup; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-backup.)" +--- + +# cctest-recipe-test-backup (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-test-backup/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-backup/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-test-new/SKILL.md b/.claude/skills/cctest-recipe-test-new/SKILL.md new file mode 100644 index 0000000..a769c34 --- /dev/null +++ b/.claude/skills/cctest-recipe-test-new/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-test-new +description: "[recipe-maintainer/cctest] Test a recipe's first-time initialization from scratch (Wraps the autonomic-recipe-maintainer skill /recipe-test-new; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-new.)" +--- + +# cctest-recipe-test-new (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-test-new/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-new/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-test-update/SKILL.md b/.claude/skills/cctest-recipe-test-update/SKILL.md new file mode 100644 index 0000000..4e873d8 --- /dev/null +++ b/.claude/skills/cctest-recipe-test-update/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-test-update +description: "[recipe-maintainer/cctest] Test upgrading a recipe's test instance using abra app deploy (Wraps the autonomic-recipe-maintainer skill /recipe-test-update; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-update.)" +--- + +# cctest-recipe-test-update (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-test-update/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-update/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-test/SKILL.md b/.claude/skills/cctest-recipe-test/SKILL.md new file mode 100644 index 0000000..111abfc --- /dev/null +++ b/.claude/skills/cctest-recipe-test/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-test +description: "[recipe-maintainer/cctest] Run all tests for a Co-op Cloud recipe (Wraps the autonomic-recipe-maintainer skill /recipe-test; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test.)" +--- + +# cctest-recipe-test (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-test/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-upgrade-apply/SKILL.md b/.claude/skills/cctest-recipe-upgrade-apply/SKILL.md new file mode 100644 index 0000000..72d57e4 --- /dev/null +++ b/.claude/skills/cctest-recipe-upgrade-apply/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-upgrade-apply +description: "[recipe-maintainer/cctest] Execute a planned recipe upgrade — apply changes, deploy, test, commit/tag (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-apply; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-apply.)" +--- + +# cctest-recipe-upgrade-apply (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-upgrade-apply/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-apply/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-upgrade-cron-all/SKILL.md b/.claude/skills/cctest-recipe-upgrade-cron-all/SKILL.md new file mode 100644 index 0000000..827e5e9 --- /dev/null +++ b/.claude/skills/cctest-recipe-upgrade-cron-all/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-upgrade-cron-all +description: "[recipe-maintainer/cctest] Autonomous weekly upgrade run — overview all recipes, upgrade each end-to-end (sequentially by default, parallel with --parallel), open PRs (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-cron-all; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-cron-all.)" +--- + +# cctest-recipe-upgrade-cron-all (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-upgrade-cron-all/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-cron-all/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-upgrade-full/SKILL.md b/.claude/skills/cctest-recipe-upgrade-full/SKILL.md new file mode 100644 index 0000000..f65364f --- /dev/null +++ b/.claude/skills/cctest-recipe-upgrade-full/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-upgrade-full +description: "[recipe-maintainer/cctest] Plan and apply a recipe upgrade end-to-end, no human review in the middle (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-full; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-full.)" +--- + +# cctest-recipe-upgrade-full (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-upgrade-full/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-full/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-upgrade-plan/SKILL.md b/.claude/skills/cctest-recipe-upgrade-plan/SKILL.md new file mode 100644 index 0000000..026176b --- /dev/null +++ b/.claude/skills/cctest-recipe-upgrade-plan/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-upgrade-plan +description: "[recipe-maintainer/cctest] Create a detailed upgrade plan for a recipe (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-plan; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-plan.)" +--- + +# cctest-recipe-upgrade-plan (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-upgrade-plan/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-plan/SKILL.md`. diff --git a/.claude/skills/cctest-recipe-upstream/SKILL.md b/.claude/skills/cctest-recipe-upstream/SKILL.md new file mode 100644 index 0000000..e6ed75c --- /dev/null +++ b/.claude/skills/cctest-recipe-upstream/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-recipe-upstream +description: "[recipe-maintainer/cctest] From a git.autonomic.zone review-PR URL, fetch the branch + tag locally and emit the commands to open the upstream PR on git.coopcloud.tech (Wraps the autonomic-recipe-maintainer skill /recipe-upstream; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upstream.)" +--- + +# cctest-recipe-upstream (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-recipe-upstream/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upstream/SKILL.md`. diff --git a/.claude/skills/cctest-setup-sandbox/SKILL.md b/.claude/skills/cctest-setup-sandbox/SKILL.md new file mode 100644 index 0000000..b06dd24 --- /dev/null +++ b/.claude/skills/cctest-setup-sandbox/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-setup-sandbox +description: "[recipe-maintainer/cctest] Guide for setting up a sandboxed environment to run the agent with recipe-maintainer (Wraps the autonomic-recipe-maintainer skill /setup-sandbox; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-setup-sandbox.)" +--- + +# cctest-setup-sandbox (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-setup-sandbox/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/setup-sandbox/SKILL.md`. diff --git a/.claude/skills/cctest-switch-default-instance/SKILL.md b/.claude/skills/cctest-switch-default-instance/SKILL.md new file mode 100644 index 0000000..1afd0f9 --- /dev/null +++ b/.claude/skills/cctest-switch-default-instance/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-switch-default-instance +description: "[recipe-maintainer/cctest] Switch the default test instance (b1cc or t1cc) for all recipe operations (Wraps the autonomic-recipe-maintainer skill /switch-default-instance; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-switch-default-instance.)" +--- + +# cctest-switch-default-instance (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-switch-default-instance/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/switch-default-instance/SKILL.md`. diff --git a/.claude/skills/cctest-sync-secrets/SKILL.md b/.claude/skills/cctest-sync-secrets/SKILL.md new file mode 100644 index 0000000..ce6e878 --- /dev/null +++ b/.claude/skills/cctest-sync-secrets/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-sync-secrets +description: "[recipe-maintainer/cctest] Sync Docker secrets from the test server into recipe-info/testsecrets/ (Wraps the autonomic-recipe-maintainer skill /sync-secrets; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-sync-secrets.)" +--- + +# cctest-sync-secrets (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-sync-secrets/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/sync-secrets/SKILL.md`. diff --git a/.claude/skills/cctest-t1cc-start/SKILL.md b/.claude/skills/cctest-t1cc-start/SKILL.md new file mode 100644 index 0000000..d73bd51 --- /dev/null +++ b/.claude/skills/cctest-t1cc-start/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-t1cc-start +description: "[recipe-maintainer/cctest] Provision the t1cc DigitalOcean test server and deploy Traefik (Wraps the autonomic-recipe-maintainer skill /t1cc-start; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-t1cc-start.)" +--- + +# cctest-t1cc-start (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-t1cc-start/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/t1cc-start/SKILL.md`. diff --git a/.claude/skills/cctest-t1cc-stop/SKILL.md b/.claude/skills/cctest-t1cc-stop/SKILL.md new file mode 100644 index 0000000..8fe728d --- /dev/null +++ b/.claude/skills/cctest-t1cc-stop/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-t1cc-stop +description: "[recipe-maintainer/cctest] Destroy the t1cc DigitalOcean test server via terraform (Wraps the autonomic-recipe-maintainer skill /t1cc-stop; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-t1cc-stop.)" +--- + +# cctest-t1cc-stop (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-t1cc-stop/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/t1cc-stop/SKILL.md`. diff --git a/.claude/skills/cctest-test-context-reset/SKILL.md b/.claude/skills/cctest-test-context-reset/SKILL.md new file mode 100644 index 0000000..cfb3bda --- /dev/null +++ b/.claude/skills/cctest-test-context-reset/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-test-context-reset +description: "[recipe-maintainer/cctest] Undeploy all apps from the test server except traefik (Wraps the autonomic-recipe-maintainer skill /test-context-reset; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-test-context-reset.)" +--- + +# cctest-test-context-reset (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-test-context-reset/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/test-context-reset/SKILL.md`. diff --git a/.claude/skills/cctest-test-setup/SKILL.md b/.claude/skills/cctest-test-setup/SKILL.md new file mode 100644 index 0000000..025e9a7 --- /dev/null +++ b/.claude/skills/cctest-test-setup/SKILL.md @@ -0,0 +1,13 @@ +--- +name: cctest-test-setup +description: "[recipe-maintainer/cctest] Verify the test environment is configured correctly (Wraps the autonomic-recipe-maintainer skill /test-setup; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-test-setup.)" +--- + +# cctest-test-setup (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/cctest-test-setup/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/test-setup/SKILL.md`. diff --git a/.gitmodules b/.gitmodules index 2d13c2b..d852b82 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "references/recipe-maintainer"] path = references/recipe-maintainer url = https://git.autonomic.zone/recipe-maintainers/recipe-maintainer +[submodule "vendor/autonomic-recipe-maintainer"] + path = vendor/autonomic-recipe-maintainer + url = ssh://git@git.autonomic.zone:2222/recipe-maintainers/autonomic-recipe-maintainer.git diff --git a/.opencode/skills/cctest-init-instance/SKILL.md b/.opencode/skills/cctest-init-instance/SKILL.md new file mode 100644 index 0000000..e1d1f81 --- /dev/null +++ b/.opencode/skills/cctest-init-instance/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-init-instance +description: "[recipe-maintainer/cctest] Deploy all maintained recipes to the active test instance from scratch (Wraps the autonomic-recipe-maintainer skill /init-instance; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-init-instance.)" +--- + +# cctest-init-instance (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/init-instance/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. diff --git a/.opencode/skills/cctest-intro/SKILL.md b/.opencode/skills/cctest-intro/SKILL.md new file mode 100644 index 0000000..9d7ce40 --- /dev/null +++ b/.opencode/skills/cctest-intro/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-intro +description: "[recipe-maintainer/cctest] Explain what this project is and how to get started (Wraps the autonomic-recipe-maintainer skill /intro; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-intro.)" +--- + +# cctest-intro (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/intro/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. diff --git a/.opencode/skills/cctest-new-recipe-guide/SKILL.md b/.opencode/skills/cctest-new-recipe-guide/SKILL.md new file mode 100644 index 0000000..f37625a --- /dev/null +++ b/.opencode/skills/cctest-new-recipe-guide/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-new-recipe-guide +description: "[recipe-maintainer/cctest] Guide for developing a new Co-op Cloud recipe from scratch (Wraps the autonomic-recipe-maintainer skill /new-recipe-guide; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-new-recipe-guide.)" +--- + +# cctest-new-recipe-guide (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/new-recipe-guide/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. diff --git a/.opencode/skills/cctest-opencode-sync/SKILL.md b/.opencode/skills/cctest-opencode-sync/SKILL.md new file mode 100644 index 0000000..0bc74aa --- /dev/null +++ b/.opencode/skills/cctest-opencode-sync/SKILL.md @@ -0,0 +1,26 @@ +--- +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. diff --git a/.opencode/skills/cctest-recipe-check/SKILL.md b/.opencode/skills/cctest-recipe-check/SKILL.md new file mode 100644 index 0000000..dfa0144 --- /dev/null +++ b/.opencode/skills/cctest-recipe-check/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-check +description: "[recipe-maintainer/cctest] Fetch a Co-op Cloud recipe and check for available upgrades (Wraps the autonomic-recipe-maintainer skill /recipe-check; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-check.)" +--- + +# cctest-recipe-check (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-check/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. diff --git a/.opencode/skills/cctest-recipe-create-pr/SKILL.md b/.opencode/skills/cctest-recipe-create-pr/SKILL.md new file mode 100644 index 0000000..b2d0ace --- /dev/null +++ b/.opencode/skills/cctest-recipe-create-pr/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-create-pr +description: "[recipe-maintainer/cctest] Push local recipe commits to git.autonomic.zone and open a PR against an upstream-synced main branch (Wraps the autonomic-recipe-maintainer skill /recipe-create-pr; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-create-pr.)" +--- + +# cctest-recipe-create-pr (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-create-pr/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. diff --git a/.opencode/skills/cctest-recipe-deploy/SKILL.md b/.opencode/skills/cctest-recipe-deploy/SKILL.md new file mode 100644 index 0000000..eaddc2e --- /dev/null +++ b/.opencode/skills/cctest-recipe-deploy/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-deploy +description: "[recipe-maintainer/cctest] Deploy the local recipe checkout to the test instance (Wraps the autonomic-recipe-maintainer skill /recipe-deploy; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-deploy.)" +--- + +# cctest-recipe-deploy (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-deploy/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. diff --git a/.opencode/skills/cctest-recipe-guidelines/SKILL.md b/.opencode/skills/cctest-recipe-guidelines/SKILL.md new file mode 100644 index 0000000..77d5c7b --- /dev/null +++ b/.opencode/skills/cctest-recipe-guidelines/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-guidelines +description: "[recipe-maintainer/cctest] Guidelines for all recipe operations including local change preservation, version format, and secrets (Wraps the autonomic-recipe-maintainer skill /recipe-guidelines; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-guidelines.)" +--- + +# cctest-recipe-guidelines (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-guidelines/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. diff --git a/.opencode/skills/cctest-recipe-init/SKILL.md b/.opencode/skills/cctest-recipe-init/SKILL.md new file mode 100644 index 0000000..dda9422 --- /dev/null +++ b/.opencode/skills/cctest-recipe-init/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-init +description: "[recipe-maintainer/cctest] Create a new test instance and recipe-info for a recipe (Wraps the autonomic-recipe-maintainer skill /recipe-init; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-init.)" +--- + +# cctest-recipe-init (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-init/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. diff --git a/.opencode/skills/cctest-recipe-logging/SKILL.md b/.opencode/skills/cctest-recipe-logging/SKILL.md new file mode 100644 index 0000000..0763344 --- /dev/null +++ b/.opencode/skills/cctest-recipe-logging/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-logging +description: "[recipe-maintainer/cctest] Logging instructions for maintaining detailed operation logs in the logs directory (Wraps the autonomic-recipe-maintainer skill /recipe-logging; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-logging.)" +--- + +# cctest-recipe-logging (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-logging/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. diff --git a/.opencode/skills/cctest-recipe-new-tag/SKILL.md b/.opencode/skills/cctest-recipe-new-tag/SKILL.md new file mode 100644 index 0000000..b77ffc9 --- /dev/null +++ b/.opencode/skills/cctest-recipe-new-tag/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-new-tag +description: "[recipe-maintainer/cctest] Bump the recipe version and create an annotated git tag (Wraps the autonomic-recipe-maintainer skill /recipe-new-tag; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-new-tag.)" +--- + +# cctest-recipe-new-tag (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-new-tag/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. diff --git a/.opencode/skills/cctest-recipe-overview/SKILL.md b/.opencode/skills/cctest-recipe-overview/SKILL.md new file mode 100644 index 0000000..6985222 --- /dev/null +++ b/.opencode/skills/cctest-recipe-overview/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-overview +description: "[recipe-maintainer/cctest] Check all maintained recipes and recommend what to upgrade (Wraps the autonomic-recipe-maintainer skill /recipe-overview; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-overview.)" +--- + +# cctest-recipe-overview (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-overview/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. diff --git a/.opencode/skills/cctest-recipe-review/SKILL.md b/.opencode/skills/cctest-recipe-review/SKILL.md new file mode 100644 index 0000000..f4719c9 --- /dev/null +++ b/.opencode/skills/cctest-recipe-review/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-review +description: "[recipe-maintainer/cctest] Review a recipe for Co-op Cloud best practices (Wraps the autonomic-recipe-maintainer skill /recipe-review; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-review.)" +--- + +# cctest-recipe-review (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-review/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. diff --git a/.opencode/skills/cctest-recipe-test-all/SKILL.md b/.opencode/skills/cctest-recipe-test-all/SKILL.md new file mode 100644 index 0000000..bc37441 --- /dev/null +++ b/.opencode/skills/cctest-recipe-test-all/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-test-all +description: "[recipe-maintainer/cctest] Run tests for all maintained recipes, deploying each one at a time (Wraps the autonomic-recipe-maintainer skill /recipe-test-all; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-all.)" +--- + +# cctest-recipe-test-all (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-all/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. diff --git a/.opencode/skills/cctest-recipe-test-backup/SKILL.md b/.opencode/skills/cctest-recipe-test-backup/SKILL.md new file mode 100644 index 0000000..a3c1040 --- /dev/null +++ b/.opencode/skills/cctest-recipe-test-backup/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-test-backup +description: "[recipe-maintainer/cctest] Test backing up and restoring a recipe's test instance (Wraps the autonomic-recipe-maintainer skill /recipe-test-backup; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-backup.)" +--- + +# cctest-recipe-test-backup (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-backup/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. diff --git a/.opencode/skills/cctest-recipe-test-new/SKILL.md b/.opencode/skills/cctest-recipe-test-new/SKILL.md new file mode 100644 index 0000000..c65a839 --- /dev/null +++ b/.opencode/skills/cctest-recipe-test-new/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-test-new +description: "[recipe-maintainer/cctest] Test a recipe's first-time initialization from scratch (Wraps the autonomic-recipe-maintainer skill /recipe-test-new; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-new.)" +--- + +# cctest-recipe-test-new (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-new/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. diff --git a/.opencode/skills/cctest-recipe-test-update/SKILL.md b/.opencode/skills/cctest-recipe-test-update/SKILL.md new file mode 100644 index 0000000..3ac44b4 --- /dev/null +++ b/.opencode/skills/cctest-recipe-test-update/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-test-update +description: "[recipe-maintainer/cctest] Test upgrading a recipe's test instance using abra app deploy (Wraps the autonomic-recipe-maintainer skill /recipe-test-update; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test-update.)" +--- + +# cctest-recipe-test-update (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test-update/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. diff --git a/.opencode/skills/cctest-recipe-test/SKILL.md b/.opencode/skills/cctest-recipe-test/SKILL.md new file mode 100644 index 0000000..c2fd5c7 --- /dev/null +++ b/.opencode/skills/cctest-recipe-test/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-test +description: "[recipe-maintainer/cctest] Run all tests for a Co-op Cloud recipe (Wraps the autonomic-recipe-maintainer skill /recipe-test; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-test.)" +--- + +# cctest-recipe-test (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-test/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. diff --git a/.opencode/skills/cctest-recipe-upgrade-apply/SKILL.md b/.opencode/skills/cctest-recipe-upgrade-apply/SKILL.md new file mode 100644 index 0000000..4948af8 --- /dev/null +++ b/.opencode/skills/cctest-recipe-upgrade-apply/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-upgrade-apply +description: "[recipe-maintainer/cctest] Execute a planned recipe upgrade — apply changes, deploy, test, commit/tag (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-apply; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-apply.)" +--- + +# cctest-recipe-upgrade-apply (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-apply/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. diff --git a/.opencode/skills/cctest-recipe-upgrade-cron-all/SKILL.md b/.opencode/skills/cctest-recipe-upgrade-cron-all/SKILL.md new file mode 100644 index 0000000..03870bf --- /dev/null +++ b/.opencode/skills/cctest-recipe-upgrade-cron-all/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-upgrade-cron-all +description: "[recipe-maintainer/cctest] Autonomous weekly upgrade run — overview all recipes, upgrade each end-to-end (sequentially by default, parallel with --parallel), open PRs (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-cron-all; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-cron-all.)" +--- + +# cctest-recipe-upgrade-cron-all (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-cron-all/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. diff --git a/.opencode/skills/cctest-recipe-upgrade-full/SKILL.md b/.opencode/skills/cctest-recipe-upgrade-full/SKILL.md new file mode 100644 index 0000000..1d8024a --- /dev/null +++ b/.opencode/skills/cctest-recipe-upgrade-full/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-upgrade-full +description: "[recipe-maintainer/cctest] Plan and apply a recipe upgrade end-to-end, no human review in the middle (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-full; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-full.)" +--- + +# cctest-recipe-upgrade-full (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-full/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. diff --git a/.opencode/skills/cctest-recipe-upgrade-plan/SKILL.md b/.opencode/skills/cctest-recipe-upgrade-plan/SKILL.md new file mode 100644 index 0000000..d6de66e --- /dev/null +++ b/.opencode/skills/cctest-recipe-upgrade-plan/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-upgrade-plan +description: "[recipe-maintainer/cctest] Create a detailed upgrade plan for a recipe (Wraps the autonomic-recipe-maintainer skill /recipe-upgrade-plan; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upgrade-plan.)" +--- + +# cctest-recipe-upgrade-plan (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upgrade-plan/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. diff --git a/.opencode/skills/cctest-recipe-upstream/SKILL.md b/.opencode/skills/cctest-recipe-upstream/SKILL.md new file mode 100644 index 0000000..bea4cf1 --- /dev/null +++ b/.opencode/skills/cctest-recipe-upstream/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-recipe-upstream +description: "[recipe-maintainer/cctest] From a git.autonomic.zone review-PR URL, fetch the branch + tag locally and emit the commands to open the upstream PR on git.coopcloud.tech (Wraps the autonomic-recipe-maintainer skill /recipe-upstream; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-recipe-upstream.)" +--- + +# cctest-recipe-upstream (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/recipe-upstream/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. diff --git a/.opencode/skills/cctest-setup-sandbox/SKILL.md b/.opencode/skills/cctest-setup-sandbox/SKILL.md new file mode 100644 index 0000000..c8e1115 --- /dev/null +++ b/.opencode/skills/cctest-setup-sandbox/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-setup-sandbox +description: "[recipe-maintainer/cctest] Guide for setting up a sandboxed environment to run the agent with recipe-maintainer (Wraps the autonomic-recipe-maintainer skill /setup-sandbox; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-setup-sandbox.)" +--- + +# cctest-setup-sandbox (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/setup-sandbox/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. diff --git a/.opencode/skills/cctest-switch-default-instance/SKILL.md b/.opencode/skills/cctest-switch-default-instance/SKILL.md new file mode 100644 index 0000000..9bbd980 --- /dev/null +++ b/.opencode/skills/cctest-switch-default-instance/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-switch-default-instance +description: "[recipe-maintainer/cctest] Switch the default test instance (b1cc or t1cc) for all recipe operations (Wraps the autonomic-recipe-maintainer skill /switch-default-instance; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-switch-default-instance.)" +--- + +# cctest-switch-default-instance (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/switch-default-instance/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. diff --git a/.opencode/skills/cctest-sync-secrets/SKILL.md b/.opencode/skills/cctest-sync-secrets/SKILL.md new file mode 100644 index 0000000..9fb6723 --- /dev/null +++ b/.opencode/skills/cctest-sync-secrets/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-sync-secrets +description: "[recipe-maintainer/cctest] Sync Docker secrets from the test server into recipe-info/testsecrets/ (Wraps the autonomic-recipe-maintainer skill /sync-secrets; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-sync-secrets.)" +--- + +# cctest-sync-secrets (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/sync-secrets/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. diff --git a/.opencode/skills/cctest-t1cc-start/SKILL.md b/.opencode/skills/cctest-t1cc-start/SKILL.md new file mode 100644 index 0000000..01112cf --- /dev/null +++ b/.opencode/skills/cctest-t1cc-start/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-t1cc-start +description: "[recipe-maintainer/cctest] Provision the t1cc DigitalOcean test server and deploy Traefik (Wraps the autonomic-recipe-maintainer skill /t1cc-start; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-t1cc-start.)" +--- + +# cctest-t1cc-start (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/t1cc-start/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. diff --git a/.opencode/skills/cctest-t1cc-stop/SKILL.md b/.opencode/skills/cctest-t1cc-stop/SKILL.md new file mode 100644 index 0000000..72ba99c --- /dev/null +++ b/.opencode/skills/cctest-t1cc-stop/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-t1cc-stop +description: "[recipe-maintainer/cctest] Destroy the t1cc DigitalOcean test server via terraform (Wraps the autonomic-recipe-maintainer skill /t1cc-stop; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-t1cc-stop.)" +--- + +# cctest-t1cc-stop (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/t1cc-stop/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. diff --git a/.opencode/skills/cctest-test-context-reset/SKILL.md b/.opencode/skills/cctest-test-context-reset/SKILL.md new file mode 100644 index 0000000..8a92b8b --- /dev/null +++ b/.opencode/skills/cctest-test-context-reset/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-test-context-reset +description: "[recipe-maintainer/cctest] Undeploy all apps from the test server except traefik (Wraps the autonomic-recipe-maintainer skill /test-context-reset; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-test-context-reset.)" +--- + +# cctest-test-context-reset (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/test-context-reset/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. diff --git a/.opencode/skills/cctest-test-setup/SKILL.md b/.opencode/skills/cctest-test-setup/SKILL.md new file mode 100644 index 0000000..a9300d2 --- /dev/null +++ b/.opencode/skills/cctest-test-setup/SKILL.md @@ -0,0 +1,26 @@ +--- +name: cctest-test-setup +description: "[recipe-maintainer/cctest] Verify the test environment is configured correctly (Wraps the autonomic-recipe-maintainer skill /test-setup; runs against the cctest test server + ARM sandbox, not cc-ci. Invoke as /cctest-test-setup.)" +--- + +# cctest-test-setup (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/test-setup/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. diff --git a/.opencode/skills/help/SKILL.md b/.opencode/skills/help/SKILL.md index dc2cd9a..fc0810e 100644 --- a/.opencode/skills/help/SKILL.md +++ b/.opencode/skills/help/SKILL.md @@ -52,6 +52,19 @@ Then present the roster grouped as follows, and close with the situation guide. - **hetzner-server-recovery** — when a Hetzner host is unreachable over SSH/tailscale: API reboot, rescue mode, GRUB generation selection (submenu ids are `1>N`), console access. +**Recipe-maintainer toolkit (`/cctest-*` — the ARM sandbox + cctest test server, NOT cc-ci)** +The full autonomic-recipe-maintainer skill set, vendored as a pinned submodule +(`vendor/autonomic-recipe-maintainer`) and exposed with the `cctest-` prefix — ~30 skills for +hands-on recipe work against the recipe-maintainer **cctest** test server and local abra +sandbox: `/cctest-intro` (start here), `/cctest-recipe-overview`, `/cctest-recipe-init`, +`/cctest-recipe-deploy`, `/cctest-recipe-test*`, `/cctest-recipe-upgrade-plan|apply|full`, +`/cctest-new-recipe-guide`, sandbox/instance management (`/cctest-setup-sandbox`, +`/cctest-t1cc-start|stop`), and more — enumerate with `ls .opencode/skills | grep ^cctest-`. +**Rule of thumb:** verifying/shipping against the CI pipeline → the cc-ci skills above; +exploratory or hands-on recipe development on a test instance → `/cctest-*`. cc-ci policy +overrides apply (auto-merge-style ARM flows need per-run operator opt-in; never touch cc-ci +infra from an ARM skill). After a submodule bump run `scripts/gen-cctest-skills.py`. + ## "What do you want to do?" | Situation | Do this | @@ -66,6 +79,8 @@ Then present the roster grouped as follows, and close with the situation guide. | "Update this orchestrator's OS/deps" | `/cc-ci-orchestrator-update` | | "Add to what we maintain" | `/recipe-enroll ` | | "A host is unreachable" | `hetzner-server-recovery` | +| "Hack on / bootstrap a recipe in a sandbox" | `/cctest-recipe-init`, `/cctest-recipe-deploy`, `/cctest-recipe-test` | +| "New to recipe work, where do I start?" | `/cctest-intro` | | "What needs my review?" | `/cc-ci-status` → its open-PR section lists CVE-urgent + ready-to-merge PRs | **Standing conventions** (all skills follow these): PRs are opened for visibility and merged diff --git a/scripts/gen-cctest-skills.py b/scripts/gen-cctest-skills.py new file mode 100644 index 0000000..09968e8 --- /dev/null +++ b/scripts/gen-cctest-skills.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +"""Generate /cctest-* wrapper skills from the autonomic-recipe-maintainer submodule. + +The ARM toolkit (vendor/autonomic-recipe-maintainer) carries ~30 recipe-maintenance skills +that operate against the recipe-maintainer TEST server ("cctest") + local abra sandbox — a +different substrate than the cc-ci skills in this repo. To give the operator ONE interface, +every ARM skill is exposed here as `cctest-`: a thin wrapper whose frontmatter carries +ARM's own description (so discovery works) and whose body points at the canonical SKILL.md in +the submodule, sets the execution context, and states the policy overrides. + +Run after every submodule bump: + python3 scripts/gen-cctest-skills.py +It removes cctest-* skills whose ARM source disappeared and (re)writes the rest, in BOTH +.opencode/skills/ (canonical) and .claude/skills/ (thin pointer), then prints a summary. +Commit the result. +""" + +from __future__ import annotations + +import re +import shutil +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parent.parent +VENDOR = ROOT / "vendor/autonomic-recipe-maintainer" +ARM_SKILLS = VENDOR / ".opencode/skills" +PREFIX = "cctest-" + +BODY_TEMPLATE = """# {wrapped} (cctest wrapper) + +**Canonical procedure:** `vendor/autonomic-recipe-maintainer/.opencode/skills/{name}/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. +""" + +WRAPPER_TEMPLATE = """# {wrapped} (thin wrapper) + +The canonical definition of this skill lives in the **opencode** position: + +**`.opencode/skills/{wrapped}/SKILL.md`** + +Read that file. It in turn wraps the ARM submodule skill +`vendor/autonomic-recipe-maintainer/.opencode/skills/{name}/SKILL.md`. +""" + + +def parse_frontmatter(text: str) -> dict[str, str]: + m = re.match(r"\A---\n(.*?)\n---\n", text, re.S) + fields: dict[str, str] = {} + if m: + for line in m.group(1).splitlines(): + if ":" in line: + k, v = line.split(":", 1) + fields[k.strip()] = v.strip() + return fields + + +def main() -> int: + if not ARM_SKILLS.is_dir(): + print(f"ERROR: {ARM_SKILLS} missing — init the submodule first", file=sys.stderr) + return 1 + + arm_names = sorted(p.parent.name for p in ARM_SKILLS.glob("*/SKILL.md")) + written, removed = [], [] + + for pos in (ROOT / ".opencode/skills", ROOT / ".claude/skills"): + for stale in pos.glob(f"{PREFIX}*"): + if stale.name[len(PREFIX) :] not in arm_names: + shutil.rmtree(stale) + removed.append(str(stale.relative_to(ROOT))) + + for name in arm_names: + src = ARM_SKILLS / name / "SKILL.md" + fm = parse_frontmatter(src.read_text()) + desc = fm.get("description", f"ARM skill {name} (no description)") + wrapped = PREFIX + name + frontmatter = ( + f"---\nname: {wrapped}\n" + f"description: \"[recipe-maintainer/cctest] {desc} (Wraps the autonomic-recipe-" + f"maintainer skill /{name}; runs against the cctest test server + ARM sandbox, " + f"not cc-ci. Invoke as /{wrapped}.)\"\n---\n\n" + ) + canon = ROOT / ".opencode/skills" / wrapped / "SKILL.md" + canon.parent.mkdir(parents=True, exist_ok=True) + canon.write_text(frontmatter + BODY_TEMPLATE.format(name=name, wrapped=wrapped)) + thin = ROOT / ".claude/skills" / wrapped / "SKILL.md" + thin.parent.mkdir(parents=True, exist_ok=True) + thin.write_text(frontmatter + WRAPPER_TEMPLATE.format(name=name, wrapped=wrapped)) + written.append(wrapped) + + print(f"generated {len(written)} cctest skills: {', '.join(written)}") + if removed: + print(f"removed stale: {', '.join(removed)}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/vendor/autonomic-recipe-maintainer b/vendor/autonomic-recipe-maintainer new file mode 160000 index 0000000..acd5cfb --- /dev/null +++ b/vendor/autonomic-recipe-maintainer @@ -0,0 +1 @@ +Subproject commit acd5cfbd9581ea096382aaff38859aed4d4ba0c9