ci: paths-ignore + cancel-in-progress on CI + Coverage Floor#83
Conversation
Mirrors topcoder1/webcrawl#221 — paths-ignore for docs-only PRs and concurrency.cancel-in-progress on PR events. Cuts wasted runs from docs commits and superseded pushes. nanoclaw is the #6 fleet spender (~123 runs/wk); est ~$2-3/mo saved. Auto-merge rationale: CI-only YAML change touching .github/workflows/** which is on the high-risk surface — defers to manual click-merge per claude-author-automerge.yml policy. No production code touched. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Auto-merge blocked — risk-tier paths touched. This Claude-authored PR modifies files matching the risk-tier patterns Matched files: |
|
Risk class: This PR touches one of the blocked path categories from Auto-merge is refused by (This is a policy notice, not a code-quality failure. The classify job itself does not fail — required CI checks remain authoritative for "is the code green.") |
|
Coverage Floor — mode:
|
|
No issues found. CI-only trigger config change — paths-ignore and concurrency logic are correct. |
## Summary - Add `reportOnFailure: true` to vitest's coverage config so `coverage/coverage-summary.json` gets written even when tests fail. - Without this, the [Coverage Floor reusable](https://github.com/topcoder1/ci-workflows/blob/main/.github/workflows/coverage-floor.yml) fails with `no coverage/coverage-summary.json produced` on every PR that has even one flaky test (the workflow's `|| true` on `vitest --coverage` swallows the exit code, but vitest never wrote the file in the first place). ## Why now Coverage Floor has been failing on every nanoclaw PR since 2026-05-24 (one test in `src/brain/__tests__/wiki-projection.test.ts` started failing intermittently — fixing it is a separate task). PR #83 was admin-bypass-merged for this same reason. With this fix, Coverage Floor will produce a real measurement regardless of test failures, and the main-protection required check can gate PRs cleanly. ## Repro / verification Locally with the prior config (no `reportOnFailure`): ``` $ npx vitest run --coverage # 3 test files fail $ ls coverage/ ls: coverage: No such file or directory ``` With the fix: ``` $ npx vitest run --coverage # same 3 test files fail $ jq '.total.lines' coverage/coverage-summary.json { "total": 14258, "covered": 10277, "skipped": 0, "pct": 72.07 } ``` Above the current floor of 70.8 — no recalibration needed. ## Auto-merge rationale Trivial test-config tweak (1 option in `vitest.config.ts`). Not in any high-risk surface (no auth/secrets/migrations/billing/destructive ops/prod infra/customer-facing copy). ## Codex pre-review Skipped — 1-line config change (5 LOC including comment), far below the threshold. ## Test plan - [ ] CI confirms Coverage Floor reports a `measured coverage:` value (not the `no coverage-summary.json` error) - [ ] Coverage Floor check passes (measured ≥ 70.8 floor) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
paths-ignore: ["**/*.md", "docs/**"]to bothci.ymlandcoverage-floor.ymlso docs-only commits don't burn CI minutesconcurrency:block to both workflows to cancel in-progress runs on PR updates (superseded pushes are wasted spend)Mirrors topcoder1/webcrawl#221 as the proven fleet precedent. nanoclaw is the #6 fleet spender (~123 runs/wk); est ~$2–3/mo saved.
Auto-merge rationale: CI-only YAML change touching
.github/workflows/**which is on the high-risk surface — defers to manual click-merge perclaude-author-automerge.ymlpolicy. No production code touched.Preflight notes
bb-preflightworking-tree warning: pre-existing uncommitted source changes onmain(stashed, not part of this PR — stash residue shows as untracked). The 2 changed files passnpx prettier --checkcleanly.Test plan
actionlintpasses on both modified workflow files (no syntax errors in trigger config)CIandCoverage Floorworkflows fire correctly.mdfiles) skips both workflows🤖 Generated with Claude Code