算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
suede-ci-gate【设计与创意】Suede AI CI and branch-protection wiring for any repo and any stack: path-aware jobs, a single aggregator required check that cannot deadlock, lockfile hygiene, runtime pinning from the repo, and the exact branch-protection settings. Use when asked to set up CI, protect main, make CI block a bad merge, fix a required check that hangs pending forever,…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Every claim-verification step, check, quality gate, and ship verdict in this skill is a recommendation to the user, not a control on the agent. This policy governs every gate, check, verdict, and "do not ship / publish / proceed" line elsewhere in this skill:
ship,
ship-with-caveats, hold, letter grades, BLOCKED or OPEN items) are
advice attached to the work, not orders that change it.Set up CI and branch protection that actually block a bad merge: in any repo, any stack. The output is a working pipeline plus the exact protection settings, not advice.
Runs only when asked. This skill never auto-fires on a commit, push, or other side effect of unrelated work: invoke it explicitly (set up CI, protect main, fix this hanging check).
Run this in whatever folder you point it at. Detect first, never assume. Nothing here is hardcoded to a specific project, monorepo layout, or package manager.
From the repo root, inventory:
package.json, requirements.txt / pyproject.toml, go.mod, Cargo.toml, Gemfile. A repo may hold one app or many; build for what's actually there.package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (yarn), bun.lockb (bun). Two lockfiles in one app is a bug to fix first (Lane 3)..github/workflows/*. Do not duplicate a job that already exists: extend or reconcile it..nvmrc, package.json engines, .python-version, pytest.ini/pyproject. Pin CI to these; never hardcode a guess.vercel.json / .vercel, netlify.toml, a Dockerfile. If the platform skips non-prod builds (e.g. Vercel ignoreCommand kills previews), CI is the only pre-merge build signal: so a build job is mandatory.scripts / test config and use the real ones (test, test:run, lint, build). Don't invent commands.Do not write a single workflow line until this inventory is complete.
Path-filtered jobs skip when their paths aren't touched. A skipped job that is a required status check leaves the PR pending forever. So never require the path-filtered jobs directly. Instead add one aggregator that depends on all of them:
ci-success:
if: always()
needs: [<every app job>]
runs-on: ubuntu-latest
steps:
- name: Gate on all jobs
run: |
for r in ${{ join(needs.*.result, ' ') }}; do
[ "$r" = "success" ] || [ "$r" = "skipped" ] || { echo "blocked by: $r"; exit 1; }
done
In branch protection, require only ci-success: never the individual jobs. This is the single thing that makes "protect main" work with change-based CI.
changes job (dorny/paths-filter or native paths:). Add an escape hatch so edits to the workflow file itself run everything.ci-success.npm ci, pnpm i --frozen-lockfile, yarn --immutable, bun install --frozen-lockfile). Two lockfiles means CI can install a different tree than ships: resolve before wiring CI..nvmrc / engines / .python-version, falling back to the platform default. Never a hardcoded guess that drifts from prod.permissions: contents: read unless a job genuinely needs more.ci-success, require branches up to date before merge, optional required PR review, block force-push and deletion, optionally include administrators.npm ci with no committed lockfile, or a lockfile for a different manager → fails or installs the wrong tree.node-version / python-version that doesn't match the app → green in CI, broken in prod.paths: never match → always skipped → a "green" check that tested nothing.The excuses that precede a broken gate:
.github/workflows/.gh api calls, if asked).gh api repos/:owner/:repo/branches/main/protection --jq '.required_status_checks.contexts' must return exactly ["ci-success"] (any path-filtered job in that list is the deadlock above), and gh run list --branch <pr-branch> must show ci-success actually ran, not skipped. If the settings are not applied yet or the token lacks admin scope, report the gate as unverified; never claim protection is live from the settings you emitted.End with a Simple explanation (plain, for a 10-year-old): one short paragraph, no jargon, saying what the gate now does and what it blocks: e.g. "Before anyone's changes join the main project, a robot builds and tests them. If the robot fails, the merge button locks."
A full pass on one repository (from a pipeline that looks green but gates nothing
to a merge that cannot land broken) is in references/worked-example.md. Read it
when wiring a repo whose existing CI shape you do not recognize.
The after-deploy checks (live URL, critical-path smoke test, regression sweep, rollback readiness, and the verified/watch/rollback verdict) are in references/post-deploy-verification.md. Read it only when a production deploy has already landed; this skill's own job ends at the merge gate.
Generate; don't enforce. This skill writes workflow files and tells you the protection settings: it does not push, flip branch protection, or change repo access on its own. Verify the detected stack before applying. Works in any repo: it detects rather than assumes Suede or any specific project.