Repository navigation
CI: docs-only pull requests skip the heavy jobs - #453
Merged
Merged
Conversation
A one-line README edit ran the whole matrix: lint, mypy, both full pytest legs, coverage, the golden renders, the JS suite and the wheel build. A new `changes` job marks a pull request docs-only when every changed path is a *.md outside idle_hours/. Docs-only PRs skip lint, typecheck, coverage, golden-render, web-ui-js and package-build (a skipped job reports success to a required check), and the test legs run only the modules that read the docs, because README rosters and documented commands are fenced and a README edit can break them. The gate fails safe. Consumers test `docs_only != 'true'` under `!cancelled()`, so a failed classifier, a push, a tag or an empty diff runs everything. TestDocsOnlyFences scans the test sources for any module that names a repo doc, directly or through the script it loads, and fails if the docs-only step leaves one out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmoU4BDXvi7xkX1MTfj7kp
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
gkoch02
enabled auto-merge
October 16, 2026 21:54
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e0da4d035e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Rename detection made git diff --name-only report only the destination, so moving idle_hours/x.py to docs/x.md read as docs-only and skipped the heavy jobs. --no-renames lists the deleted source too; a fence pins it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LjhfWCwPELutUeHddrSiHC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Deleting one README line ran all of CI, about five minutes of it: lint, mypy, both full pytest legs, coverage, the golden renders, the JS suite and the wheel build. None of those can be affected by a Markdown edit except the tests that read the docs.
changesjob. It marks a PR docs-only when every changed path is a*.mdoutsideidle_hours/. It diffs the PR merge commit against its first parent, sofetch-depth: 2is enough.lint,typecheck,coverage,golden-render,web-ui-js,package-build. A job skipped by itsif:reports success to a required status check, so the PR still merges.test (3.11)/test (3.12)still run, but only the six modules that read the docs (README rosters, documented script invocations, CLAUDE.md size, the font table, Pi setup text, the release tool). The--oncesmoke step is skipped.${{ !cancelled() && needs.changes.outputs.docs_only != 'true' }}. Ifchangesfails, the output is empty, and!cancelled()stops the failed dependency from skipping the job, so everything runs in full. A push, a tag or an empty diff also runs everything.TestDocsOnlyFencesintests/test_ci_required_checks.py:scripts/*.pyit loads.changesis classified as advisory, with its reason recorded inADVISORY_JOBS.if:at all; it now accepts only the docs-only gate.Trade-offs
docs/runtime.mdcarry fenced rosters, so a docs edit can break the build. Skipping everything would let that merge green.test_render_quote_themes.py(the semiotic README is a package asset) and the fence's own sanity literal.idle_hours/counts as code, because it ships in the wheel.Testing
ruff check .passespytestpasses locally, excepttests/test_render_quote.py::TestAstrariumSky::test_a_link_is_its_canonical_zone, which fails identically on unmodifiedmainin the dev container (environment, not this change). 5316 passed.TestDocsOnlyFences)mypy(pinned version) cleanAppliance impact
None.
Docs
docs/testing.mdCI section describes thechangesjob and the docs-only pathREADME.md: no user-facing changeGenerated by Claude Code