Borrowing it
Nothing to install: this file belongs to richardthe3rd/cambridge-beer-festival-app. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/richardthe3rd/cambridge-beer-festival-app/main/.claude/skills/change-control/SKILL.mdgit clone --depth 1 https://github.com/richardthe3rd/cambridge-beer-festival-appWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/richardthe3rd/cambridge-beer-festival-app/change-control)<a href="https://agentmods.dev/skills/richardthe3rd/cambridge-beer-festival-app/change-control"><img src="https://agentmods.dev/badge/skills/richardthe3rd/cambridge-beer-festival-app/change-control/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/richardthe3rd/cambridge-beer-festival-app/change-control"><img src="https://agentmods.dev/badge/skills/richardthe3rd/cambridge-beer-festival-app/change-control.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00198 | $0.05511 |
| Opus 5 | $0.00099 | $0.02756 |
| Sonnet 5 | $0.00040 | $0.01102 |
| Haiku 4.5 | $0.00020 | $0.00551 |
Grade A, and why
change-control scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 316 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Change Control
This skill is the gatekeeper: what kind of change you are making, which gates
apply, and which changes are forbidden outright. Nothing in this repo routes
around it — every behavior change goes through ./bin/mise run check, a
conventional commit, and a PR with green CI.
1. Classify the change first
CI is path-filtered (dorny/paths-filter in .github/workflows/ci.yml:36-51
and .github/workflows/cloudflare-worker.yml:42-47). What you touch determines
which gates fire.
| Class | Paths | CI jobs that fire | Extra rules |
|---|---|---|---|
| App code / UI | lib/**, test/**, web/**, android/**, pubspec.yaml, test-e2e/**, package.json, playwright.config.ts, mise.toml (the app filter) |
fmt, analyze, test (+codecov upload), build-web, test-e2e-web (Playwright), build-android, deploy-web-preview (staging Pages + PR comment), smoke-test-preview (CSP against the deployed preview) |
UI changes: incremental only — see skill ui-and-accessibility (redesigns are this project's costliest historical failure mode). Accessibility is mandatory (AGENTS.md). |
| Models + storage | subset of app code | same as app code | If a SharedPreferences key or on-disk format is involved → §2.5 (key pinning / migration). If Drink/UserDrinkState shape changes → run ./bin/mise run generate for mocks. |
| Data (registry) | data/festivals.json, scripts/** |
cloudflare-worker.yml: validate-festivals (Ajv schema check), test-worker, validate-worker (PR dry-run) — and on merge to main, deploy-worker straight to production (data.cambeerfestival.app) |
Validate locally first: ./bin/mise run validate:festivals. Merging to main IS a production deploy. Note: docs/processes/festival-data-prs.md is mislabeled — it's a My Festival feature PR/FAQ, not a data runbook; see skill run-and-operate for the real procedure. |
| cloudflare-worker | cloudflare-worker/** |
same workflow: test-worker (vitest on workerd), validate-worker dry-run on PR, deploy-worker to production on main |
On the Do-Not-Modify list (§3) — explicit request required. |
| functions (Pages Functions) | functions/** |
fmt, analyze, test (includes cd functions && npm test) — but not build-web, so deploy-web-preview is transitively skipped (its needs: includes the skipped build-web) |
Crawler-preview injection; tests use a mocked HTMLRewriter (real one not exercised — see skill validation-and-qa). |
| proto (API contract) | proto/** |
proto job: buf lint + buf breaking against main:proto (bufbuild/buf-action, bypasses mise); api-docs.yml regenerates OpenAPI/Redoc |
See skill api-contract for the full workflow and AIP fact table. Breaking-change rules: FILE+WIRE per proto/buf.yaml. |
.github/workflows/ |
workflow files | editing ci.yml itself matches the app filter; cloudflare-worker.yml triggers its own workflow; other workflows (release chain, pr-lint) trigger nothing until they run for real |
On the Do-Not-Modify list (§3). The release chain is fragile — see rationale. |
| Docs | docs/**, *.md, .claude/** |
no CI jobs fire (no filter matches) — only pr-lint checks the PR title |
Style and taxonomy: see skill docs-and-writing. Landmine: a .js/.ts/.mjs added here (e.g. a skill helper script) is not format-checked on its own PR, but fmt's Prettier step globs **/*.{js,ts,mjs} repo-wide — so it silently fails the next app-code PR that triggers fmt. Run npx prettier --check on any JS/TS/MJS you add under .claude/** or docs/**. (2026-07-04: an unformatted decode-stack.mjs added in a skills PR broke main's CI two merges later.) |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 316 lines · 198 tokens per session scan A 0df6637055f3
change-control is a skill published in the GitHub repository richardthe3rd/cambridge-beer-festival-app (2 stars, last pushed yesterday), licensed MIT. It adds 198 tokens to every session and 5,511 once invoked, about $0.0010 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
prowler-commit
Creates professional git commits following conventional-commits format. Trigger: When creating commits, after completing code changes, when user asks to commit.
gh-auth-isolation
Safely manage multiple GitHub identities (EMU + personal) in agent workflows.
comet-github
A routing guide for Comet-related GitHub work. It directs requests about pull requests, issues, CI failures, ideas, and fixes to the appropriate review or implementation process.
github-skill
Work with GitHub via the gh CLI — clone repositories, create/list/merge pull requests, create/list issues, and run any other gh command (API calls, workflow runs, releases, repo administration). List operations return parsed JSON.
changelog-composer
Generates structured changelogs and release notes from git history and PRs, classifying breaking changes, features, fixes, performance, docs. Triggers on: "generate changelog", "write release notes", "what changed since", "prepare release", "release notes for", "diff since tag".
re0-merge
Review and land an external contribution the way this suite does: gate it against the thesis, land it with the author's credit intact, complete a new skill rather than merging it raw, then approve, credit, and explain before closing. Use when reviewing a pull request, as any collaborator or maintainer, not only the…