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 rule
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-cw-gates-cc84699df482 ,按照其中的说明把「cw-gates」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
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.
For release work specifically, use codew-release-qa-sweep instead — it adds the version-drift gate and the manual TUI QA targets on top of this ladder.
Climb only as far as the risk requires. Say where you stopped and what you skipped.
cargo fmt --all -- --check
git diff --check
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/runtime/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.
cargo 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.
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/tui/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.
cargo clippy --workspace --all-targets --all-features --locked -- \
-D warnings \
-A clippy::uninlined_format_args \
-A clippy::too_many_arguments \
-A clippy::unnecessary_map_or
cargo nextest run --workspace --all-features --locked --profile ci
cargo 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.)
web/ changedcd web && npm ci && npm test && npm run check
test result: N passed; M failed line, and confirm N > 0
for the tests that cover your change. cargo test <filter> exits 0 having
run zero tests when the filter matches nothing; an exit code alone has already
been mistaken for a pass here.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.