cw-gates
Use before claiming any Codewhale change is done, green, or ready to land: the focused-to-broad verification ladder, the budget checks CI enforces, and the rules for what counts as a passing test.
- License 许可
- MIT
- 最近更新
- 2026-11-12
- Stars
- ★ 4.1w
- Forks
- 3.6k
01 前言 Front Matter
- name
- cw-gates
- description
- Use before claiming any Codewhale change is done, green, or ready to land: the focused-to-broad verification ladder, the budget checks CI enforces, and the rules for what counts as a passing test.
02 资源文件 18
- 参考文档bashjails.md15.7 KB
- 参考文档ctfd-navigation.md14.4 KB
- 参考文档cyberchef-cheatsheet.md2.4 KB
- 参考文档dns.md9.5 KB
- 参考文档encodings-advanced.md23.0 KB
- 参考文档encodings.md18.8 KB
- 参考文档games-and-vms-2.md10.2 KB
- 参考文档games-and-vms-3.md31.7 KB
- 参考文档games-and-vms-4.md11.3 KB
- 参考文档games-and-vms.md20.7 KB
- 许可证LICENSE1.1 KB
- 参考文档linux-privesc.md18.0 KB
- 参考文档pyjails.md42.5 KB
- 参考文档quick-reference.md26.1 KB
- 参考文档references/platform-decisions.md855 B
- 参考文档rf-sdr.md3.9 KB
- 参考文档SOURCE.md358 B
- 参考文档TRUST.auto.yaml2.1 KB
03 SKILL.md 正文
cw-gates
Pick the smallest evidence that answers the actual risk, then quote the real output. This repo has been burned twice by the alternative: an exit code mistaken for a pass, and a harness whose scoring line silently reported unevaluated rows as green. Assertions without command output are not evidence.
Stage 3 of the loop: cw-orient → cw-slice → gates → cw-dogfood → cw-land → cw-handoff.
When to use
- Before saying "done", "green", "passing", "fixed", or "ready to land".
- Before a dogfood build — never install an ungated binary.
- When asked to "run the gates" or to prove a change is safe.
For release work, follow docs/RELEASE_CHECKLIST.md; it adds the
version-drift gate and the exhaustive release validation on top of this ladder,
and cw-dogfood owns the manual TUI QA targets.
Workflow
Climb only as far as the risk requires. Say where you stopped and what you skipped.
Native Rust builds go through scripts/dev-test.sh or scripts/dev-cargo.sh,
which take the machine's build slot (scripts/build-lock.py; at most two
native builds per machine). Raw cargo bypasses the lock.
Rung 1 — always, and cheap
cargo fmt --all -- --check
git diff --check
Rung 2 — the area that owns the change
scripts/dev-test.sh maps an area or a source path to the fastest correct
invocation, and applies the isolated build-dir topology
(docs/BUILD_PERFORMANCE.md):
scripts/dev-test.sh --list
scripts/dev-test.sh crates/command-contract/src/elapsed.rs # path → area + filter
scripts/dev-test.sh tui tools:: # area + filter
scripts/dev-test.sh config
It uses cargo nextest run when nextest is on PATH (.config/nextest.toml);
CODEWHALE_DEV_NEXTEST=0 forces libtest. For the TUI crate, --lib and
--tests are disjoint — choose the target that owns the behavior rather than
running both by reflex.
scripts/dev-cargo.sh test --no-run answers a compile question without executing unrelated
cases. cargo test --doc covers doc examples, and is only worth running when
those examples changed.
CI builds with -D warnings, so a deleted last caller (an unused import, a
variant or helper nothing constructs) is a red main even though a plain
build only warns. After removing or rewiring a call site, check the library
the way CI does before you push:
RUSTFLAGS="-D warnings" scripts/dev-cargo.sh check -p <crate> --lib --locked
Changing RUSTFLAGS rebuilds every dependency, so keep that value for the
whole session. The test-only half of an unused item is invisible to this
check; use --tests as well when you touched helpers that tests still call.
Rung 3 — the budgets and drift checks CI enforces
Run the ones your change can move. Each fails the build in CI:
python3 scripts/check-dead-code-budget.py # #[allow(dead_code)] ceiling
python3 scripts/check-runtime-contract-budget.py
python3 scripts/check-persistence-backlog-budget.py
python3 scripts/check-provider-registry.py # provider registry drift
python3 scripts/check-command-crate-boundaries.py # command-contract boundary
python3 scripts/check-command-migration-manifest.py
python3 scripts/check-tui-locale-parity.py # touched crates/localization/locales/
sh scripts/check-tui-product-vocabulary.sh
python3 scripts/check-readme-translations.py # touched README*.md
./scripts/release/check-versions.sh # touched a version anywhere
The dead-code budget may go down freely; raising it needs a reviewer to be
told why. Lock in a win with python3 scripts/check-dead-code-budget.py --update.
Rung 4 — cross-cutting or release risk only
scripts/dev-cargo.sh clippy --workspace --all-targets --all-features --locked -- \
-D warnings \
-A clippy::uninlined_format_args \
-A clippy::too_many_arguments \
-A clippy::unnecessary_map_or
scripts/dev-cargo.sh nextest run --workspace --all-features --locked --profile ci
scripts/dev-cargo.sh test --workspace --all-features --locked --doc
git diff --exit-code -- Cargo.lock # lockfile drift guard
--all-targets matters: without it, clippy never lints test code. (CI runs
the all-targets form since the v0.9.10 gate incident; run the same form
locally so there is no weaker subset.)
Rung 5 — website, when web/ changed
npm test && npm run check:web
Claiming a test passed
AGENTS.md ("Claiming a test passed") owns the rules: quote the real count
line with N > 0 for the tests that cover the change, prefer a regression
test that fails without the fix, and audit hand-rolled scorers. Two additions
for gate runs:
- Check the count per filter group. A green run where one required filter matched zero tests is a miss, not a pass.
- A focused rerun of a failing test distinguishes flake from regression in seconds. Do that before calling anything a flake, and root-cause anything that fails outside a known-flaky name — check for unisolated config-path reads or global timeout knobs first.
Red flags / don't
- Don't say "tests pass" without the count line. Don't say "CI will catch it".
- Don't run the full workspace suite as ritual for a leaf change, and don't re-run an unchanged suite to feel more confident.
- Don't weaken a safety or data-integrity behavior to make a gate go green.
- Don't call a failure a flake without a focused rerun and a named cause.
- Don't skip the budget checks because they are "not really tests" — they are required CI contexts, and they encode migrations this repo has already paid for.
- Don't report a green gate as permission. A passing sweep is readiness evidence; landing, tagging, and publishing need their own approval.
Output
A checklist: each command, pass/fail, and the salient line (test counts, budget
numbers, the check-versions.sh verdict). Name explicitly what you did not
run and why. If a step could not run in this environment, say so rather than
implying coverage you do not have.
04 同仓库更多 Skills
gh-find-prs
Survey the open Codewhale PR and issue queue read-only: fetch each item, check it against current code, and produce one coverage and disposition matrix with cited evidence and credit owed.
gh-file-issue
Use when filing a new Codewhale GitHub issue: turn a bug or idea into a well-formed, actionable issue with repro, acceptance criteria, labels, and milestone.
gh-close-issues
Close resolved Codewhale issues only after verifying the landed behavior: Refs #N per landing, Fixes #N only when the reporter's scenario was reproduced, closure at the release step or on the reporter's confirmation, always with a crediting comment.
gh-assign-issues
Use to assign GitHub issues to a milestone and/or owners in bulk, verifying each.
feedback
暂无简介
cw-slice
Use before writing code for any Codewhale feature, upgrade, or refactor: find the existing owner of the behavior, bound the change to one reviewable slice, and fix the evidence bar before you start.