

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456# Wire CI78> **HARD GATE (supported forges only)** — Do not ship a project without CI. Run this skill before first merge to main.9>10> On a forge bigpowers ships no templates for, this skill **is not a gate**: it reports the forge, explains what it cannot do, and exits 3. A gate that cannot run must not claim it did. See § Unsupported forges.11>12> **HARD GATE** — CI that is untestable locally will break every cycle. Always run `--validate` after generating workflows and `--dry-run` before pushing.1314Generate, validate, and test CI workflows. Detects the forge and project type, copies a **bundled** template, and verifies locally before anything reaches CI.1516## Forge resolution1718`scripts/lib/detect-forge.sh` resolves the forge, first match wins: `BIGPOWERS_FORGE` env var → `forge:` in `specs/forge.yaml` → the `origin` remote URL → `unknown`.1920```bash21bash scripts/wire-ci.sh --detect # report forge + stack, write nothing22bash scripts/wire-ci.sh --plan # show the template that would be used23bash scripts/wire-ci.sh --apply # write the workflow24```2526GitHub ships templates (`.github/workflows/`). GitLab, Bitbucket, Codeberg, and Gitea are detected but **unsupported** — `--apply` writes nothing and exits 3.2728## Template source — configurable, bundled by default2930Templates live in `docs/templates/ci/<forge>/` **inside the bigpowers package**, so there is no network dependency on any third party's repository. Override with `BIGPOWERS_CI_TEMPLATES=/path/to/your/templates`, laid out as `<root>/<forge>/test-build-release-<stack>.yml`.3132## What this sets up33341. **Test Build Release workflow** — lint → test → build → release in one `needs:` chain352. **`--validate` mode** — YAML syntax, workflow permissions, required secrets, common pitfalls363. **`--dry-run` mode** — runs workflows locally via `act` before push374. **Failure pattern documentation** — see the table below3839Deploy workflows are **not** bundled: they are platform-specific. See [REFERENCE.md](REFERENCE.md) for a worked example.4041## Process4243### 1. Detect forge and stack4445```bash46bash scripts/wire-ci.sh --detect47```4849Stack detection reads the project root:5051| Manifest | Stack | Bundled template |52|----------|-------|------------------|53| `Cargo.toml` | Rust | `test-build-release-rust.yml` |54| `package.json` | Node | `test-build-release-node.yml` |55| `pyproject.toml` / `setup.py` | Python | `test-build-release-python.yml` |56| `go.mod` | Go | `test-build-release-go.yml` |5758No recognized manifest → exit 3 with the list of manifests it looked for. Do not guess.5960### 2. Apply the template6162```bash63bash scripts/wire-ci.sh --apply64```6566**Do not rename the workflow `name:` field** — deploy listens for `"Test Build Release"`.6768Edit placeholders after copying: language versions, `APP_TYPE`, `SITE_URL`.6970### 3. Unsupported forges7172`--apply` writes nothing and exits 3. Your options, in the order the runner prints them:7374- point `BIGPOWERS_CI_TEMPLATES` at templates for your forge75- pin `forge: github` in `specs/forge.yaml` if the remote is misdetected76- write the CI config by hand7778Contributing a `docs/templates/ci/gitlab/` set and adding `gitlab` to `FORGE_SUPPORTED_LIST` is the natural next slice — per-forge command mapping (`gh pr checks` → `glab ci status`) is not implemented yet.7980### 4. Validate workflows (`--validate`)8182See [REFERENCE.md](REFERENCE.md). Exit codes: `0` clean, `1` YAML syntax errors, `2` warnings only.8384### 5. Dry-run workflows (`--dry-run`)8586See [REFERENCE.md](REFERENCE.md).8788> **act** runs workflows in a local Docker environment — the most accurate pre-push validation.89> **gh workflow run** sends the workflow to GitHub but does not execute locally.9091### 6. Document common CI failure patterns9293| Failure | Cause | Fix |94|---------|-------|-----|95| `npm publish` fails | `NPM_TOKEN` not set as repo secret | Add `NPM_TOKEN` to repo secrets |96| `semantic-release` fails on push | Missing `permissions: contents: write` | Add it to the release job |97| `cargo publish` auth fail | `CARGO_REGISTRY_TOKEN` not set | Add token to env or `~/.cargo/config.toml` |98| `go vet` fails | Go version mismatch | Use `go-version-file: go.mod` |99| `cargo clippy` errors | New nightly lints | Pin the toolchain; `cargo clippy --fix` |100| `act` not found | Docker not running or act missing | `brew install act`; `docker ps` |101| Hardcoded Node version stale | `.nvmrc` exists but workflow hardcodes | Use `node-version-file: .nvmrc` |102| Deploy never runs | TBR workflow renamed | Keep `name: Test Build Release` |103| Release rebuilds binary | Artifact not downloaded | `release` must `download-artifact` from `build` |104105## Verify106107→ verify: `bash scripts/wire-ci.sh --self-test`108→ verify: `test -f docs/templates/ci/github/test-build-release-node.yml && test -f scripts/lib/detect-forge.sh`109→ verify: `grep -q wire-ci SKILL-INDEX.md`110111---112113# Wire Ci — Reference114115## Navigation116117| Lines | Section |118|-------|---------|119| 1 | Title |120| 3–20 | Navigation |121| 21–22 | Examples |122| 23–39 | Create CI for a Go project (TBR + optional deploy) |123| 40–49 | Create CI for a CLI tool (TBR only, no deploy) |124| 50–57 | Validate existing workflows (no generation) |125| 58–70 | Options |126| 71–79 | Integration with build-epic |127| 80–154 | Reference block 1 — test-build-release.yml (Go, excerpt) |128| 155–204 | Reference block 2 — deploy.yml (generic web app, excerpt) |129| 205–232 | Reference block 3 — CLI dogfood (big-release pattern) |130| 233–257 | Reference block 4 — validate script |131| 258–268 | Reference block 5 — dry-run |132133## Examples134135### Create CI for a Go project (TBR + optional deploy)136137```bash138# Resolve forge + stack, then apply the bundled template139bash scripts/wire-ci.sh --detect140bash scripts/wire-ci.sh --apply141142wire-ci --validate143wire-ci --dry-run144```145146To use your own org templates instead of the bundled ones:147148```bash149BIGPOWERS_CI_TEMPLATES=/path/to/your/templates bash scripts/wire-ci.sh --apply150```151152### Create CI for a CLI tool (TBR only, no deploy)153154```bash155bash scripts/wire-ci.sh --apply156# Edit release job to download build artifact — see big-release dogfood157# CLI/library repos: delete deploy.yml; the release job is terminal.158159wire-ci --validate160```161162### Validate existing workflows (no generation)163164```bash165wire-ci --validate --check-only166```167168---169170## Options171172| Flag | Description |173|------|-------------|174| `--validate` | Check YAML syntax, permissions, secrets, common pitfalls |175| `--dry-run` | Run workflows locally via `act` or dispatch via `gh` |176| `--check-only` | Only validate, do not generate new files |177| `--type <type>` | Force project type (skip auto-detection) |178| `--force` | Overwrite existing workflow files |179| `--no-deploy` | Skip deploy.yml even for hosted stacks |180181---182183## Integration with build-epic184185When `wire-ci` is used as part of `build-epic`:1861871. **During develop-tdd**: If the task modifies `.github/workflows/`, run `wire-ci --validate` as a CI dry-run sub-step1882. **During release-branch**: After push, run `gh run list --limit 1 --branch main --json status,conclusion` to verify CI passes189190---191192## Reference block 1 — test-build-release.yml (Go, excerpt)193194```yaml195name: Test Build Release196on:197 push:198 branches: [main]199 pull_request:200 branches: [main]201202permissions:203 contents: read204205concurrency:206 group: pipeline-${{ github.workflow }}-${{ github.ref }}207 cancel-in-progress: true208209jobs:210 lint:211 runs-on: ubuntu-22.04212 timeout-minutes: 10213 steps:214 - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0215 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0216 with:217 go-version: '1.22'218 cache: true219 - uses: golangci/golangci-lint-action@55c2c1448f86e01eaae002a5a3a9624417608d84 # v6.5.2220 with:221 version: v1.64.8222223 test:224 needs: [lint]225 runs-on: ubuntu-22.04226 steps:227 - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0228 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0229 with:230 go-version: '1.22'231 cache: true232 - run: go vet ./...233 - run: go test ./... -count=1234235 build:236 needs: [test]237 runs-on: ubuntu-22.04238 steps:239 - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0240 - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0241 with:242 go-version: '1.22'243 cache: true244 - run: go build ./...245 - run: jq -n --arg sha "${{ github.sha }}" '{sha: $sha}' > deploy-meta.json246 - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1247 with:248 name: deploy-meta249 path: deploy-meta.json250251 release:252 if: github.ref == 'refs/heads/main' && github.event_name == 'push'253 needs: [build]254 permissions:255 contents: write256 steps:257 - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0258 with:259 fetch-depth: 0260 - run: npx semantic-release261 env:262 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}263```264265---266267## Reference block 2 — deploy.yml (generic web app, excerpt)268269```yaml270name: Deploy271on:272 workflow_run:273 workflows: ["Test Build Release"]274 types: [completed]275276permissions:277 contents: read278 actions: read279280concurrency:281 group: deploy-production282 cancel-in-progress: false283284env:285 SITE_URL: "https://CHANGE-ME.example.com"286287jobs:288 deploy:289 if: >290 github.event.workflow_run.conclusion == 'success' &&291 github.event.workflow_run.head_branch == 'main'292 runs-on: ubuntu-22.04293 environment: production294 steps:295 - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1296 with:297 name: deploy-meta298 github-token: ${{ secrets.GITHUB_TOKEN }}299 run-id: ${{ github.event.workflow_run.id }}300 path: deploy-meta301 # Placeholder deploy step — bigpowers ships no deploy templates and pins302 # no third-party action. Substitute your platform's own step here, or drop303 # the deploy job entirely for CLI and library repos. Pin whatever action304 # you choose to a full commit SHA rather than a tag. (GH #104)305 - name: Deploy306 run: |307 echo "Replace this step with your platform's deploy command."308 echo "commit=$(jq -r .sha deploy-meta/deploy-meta.json)"309 exit 1310 - name: Health check311 run: |312 curl -sf "${{ env.SITE_URL }}" || exit 1313```314315---316317## Reference block 3 — CLI dogfood (big-release pattern)318319```yaml320 build:321 needs: [test]322 steps:323 - run: make build324 - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1325 with:326 name: big-release-${{ github.sha }}327 path: bin/big-release328329 release:330 needs: [build]331 if: github.ref == 'refs/heads/main' && github.event_name == 'push'332 steps:333 - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1334 with:335 name: big-release-${{ github.sha }}336 path: bin337 - run: make release # cross-compile assets only; host binary from artifact338 - run: big-release release --verbose339```340341No `deploy.yml` — CLI publishes via the release job.342343---344345## Reference block 4 — validate script346347```bash348for f in .github/workflows/*.yml .github/workflows/*.yaml; do349 [ -f "$f" ] || continue350 python3 -c "import yaml; yaml.safe_load(open('$f'))" || echo "FAIL: $f has YAML syntax errors"351done352353for f in .github/workflows/test-build-release.yml; do354 if grep -q "permissions:" "$f"; then355 echo "OK: $f has permissions block"356 else357 echo "WARNING: $f missing permissions block"358 fi359done360361if grep -q 'workflows: \["Test Build Release"\]' .github/workflows/deploy.yml 2>/dev/null; then362 if ! grep -q 'name: Test Build Release' .github/workflows/test-build-release.yml; then363 echo "WARNING: deploy.yml listens for Test Build Release but TBR name may differ"364 fi365fi366```367368---369370## Reference block 5 — dry-run371372```bash373if command -v act &>/dev/null; then374 act push --dry-run -W .github/workflows/test-build-release.yml375elif command -v gh &>/dev/null; then376 gh workflow run test-build-release.yml --ref "$(git branch --show-current)"377else378 echo "Install act or gh for dry-run"379fi380```381
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| danielvm-git/bigpowers.cursor/rules/simple-english.mdc · 139 | Cursor rules | styletypesgitdatabase+6 | 47/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/assess-impact.mdc · 139 | Cursor rules | testtesting-strategydeployment | 66/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/audit-plan.mdc · 139 | Cursor rules | buildteststylegit | 74/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/build-epic.mdc · 139 | Cursor rules | buildgit | 58/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/change-request.mdc · 139 | Cursor rules | no sections | 48/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/commit-message.mdc · 139 | Cursor rules | lint-formatstyletypesgit+3 | 82/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/compose-workflow.mdc · 139 | Cursor rules | styledo-notagent-behaviour | 65/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/context7-mcp.mdc · 139 | Cursor rules | style | 54/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/deepen-architecture.mdc · 139 | Cursor rules | testtesting-strategydo-not | 57/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/define-language.mdc · 139 | Cursor rules | lint-formatdo-not | 65/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/define-success.mdc · 139 | Cursor rules | no sections | 4/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/delegate-task.mdc · 139 | Cursor rules | git | 62/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/deploy.mdc · 139 | Cursor rules | setupbuildtestdeployment | 77/100 | 14 days ago | |
| danielvm-git/bigpowers.windsurf/rules/verify-work.md · 139 | Windsurf rules | buildtestlint-formatagent-behaviour | 74/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/develop-tdd.mdc · 139 | Cursor rules | teststylearchtesting-strategy+5 | 85/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/diagnose-root.mdc · 139 | Cursor rules | no sections | 39/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/diagnose-stall.mdc · 139 | Cursor rules | no sections | 44/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/dispatch-agents.mdc · 139 | Cursor rules | git | 54/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/edit-document.mdc · 139 | Cursor rules | no sections | 39/100 | 14 days ago | |
| danielvm-git/bigpowers.cursor/rules/elaborate-spec.mdc · 139 | Cursor rules | test | 58/100 | 14 days ago |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| hiromaily/go-crypto-wallet.cursor/rules/typescript.mdc · 126 | Cursor rules | setupbuildtestlint-format+6 | 100/100 | 14 days ago | |
| TechSquidTV/Hermes.cursor/rules/10-hermes-api.mdc · 46 | Cursor rules | testlint-formatstylearch+5 | 100/100 | 14 days ago | |
| dodgecfr/combatfilms-webapp.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| deifos/clipmira-subtitles.cursor/rules/frontend.mdc · 1 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| markstev/mark-starter.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+6 | 99/100 | 14 days ago | |
| Allymahmoud/case-intake-platform.cursor/rules/frontend.mdc · 0 | Cursor rules | setuptestlint-formatstyle+7 | 99/100 | 14 days ago | |
| langflow-ai/langflow.cursor/rules/docs_development.mdc · 153k | Cursor rules | setupbuildtestlint-format+7 | 97/100 | 14 days ago | |
| bybren-llc/safe-agentic-workflow.cursor/rules/10-backend-python.mdc · 399 | Cursor rules | testlint-formatstylegit+4 | 97/100 | today |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/danielvm-git-bigpowers-cursor-rules-wire-ci)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.