Symptom
A change to docs/** runs no documentation build in PR CI. js-check is filtered out, and js-check is the job that would have validated it.
Observed on #33: six files changed, four of them under docs/ (including a brand-new page), and js-check reported skipping. The only reason that page is known to build is that astro check was run locally before pushing.
Mechanism
packages/docs is a renderer, not a copy — docs-source.ts:33 sets DOCS_BASE = "../../docs" and the Astro loader reads the originals out of the repo-root docs/ directory. So the content of docs/ is an input to the packages/docs build.
js-check runs mise run typecheck, which fans out to packages/docs typecheck → astro check.
But the js filter in ci.yml (lines 90–115) lists packages/** and never docs/**. Editing the content the docs package renders therefore skips the job that renders it.
What reaches main unchecked
Anything astro check would catch in documentation content: invalid or missing frontmatter, a sidebar.order of the wrong type, a file that breaks the content-collection schema, a bad component reference. Not broken internal links — Starlight does not validate those by default, so that gap is separate and pre-existing.
Because docs-release.yml is tag-triggered, the first thing that fails is a release, on a docs-v* tag, at the point when the intent is to publish rather than to fix.
Proposed fix
Add docs/** to the js filter, next to the entries that are already there for this exact reason:
js: &js
- *common
...
- 'patches/**'
# `packages/docs` renders `docs/` rather than containing it (see
# DOCS_BASE in docs-source.ts), so the documentation content is an
# input to that build and `astro check` has to see a change to it.
- 'docs/**'
The cost is that a docs-only PR now runs the whole of js-check — typecheck plus the JS suites — for a markdown edit. If that is judged too slow, the alternative is a dedicated docs filter feeding a job that only runs pnpm --filter @prick/docs run typecheck. The one-line filter entry seems the better trade until docs-only PRs are frequent enough to care.
Note
This is the third instance of this class in the same filter block, and the existing comments document the previous two: the root files that "were being missed", and action/**, which "matched no filter at all before, so a change to the composite Action reached CI without running the Action's own suite". Worth a glance over the remaining top-level paths for a fourth while fixing this one.
Symptom
A change to
docs/**runs no documentation build in PR CI.js-checkis filtered out, andjs-checkis the job that would have validated it.Observed on #33: six files changed, four of them under
docs/(including a brand-new page), andjs-checkreportedskipping. The only reason that page is known to build is thatastro checkwas run locally before pushing.Mechanism
packages/docsis a renderer, not a copy —docs-source.ts:33setsDOCS_BASE = "../../docs"and the Astro loader reads the originals out of the repo-rootdocs/directory. So the content ofdocs/is an input to thepackages/docsbuild.js-checkrunsmise run typecheck, which fans out topackages/docs typecheck→astro check.But the
jsfilter inci.yml(lines 90–115) listspackages/**and neverdocs/**. Editing the content the docs package renders therefore skips the job that renders it.What reaches main unchecked
Anything
astro checkwould catch in documentation content: invalid or missing frontmatter, asidebar.orderof the wrong type, a file that breaks the content-collection schema, a bad component reference. Not broken internal links — Starlight does not validate those by default, so that gap is separate and pre-existing.Because
docs-release.ymlis tag-triggered, the first thing that fails is a release, on adocs-v*tag, at the point when the intent is to publish rather than to fix.Proposed fix
Add
docs/**to thejsfilter, next to the entries that are already there for this exact reason:The cost is that a docs-only PR now runs the whole of
js-check— typecheck plus the JS suites — for a markdown edit. If that is judged too slow, the alternative is a dedicateddocsfilter feeding a job that only runspnpm --filter @prick/docs run typecheck. The one-line filter entry seems the better trade until docs-only PRs are frequent enough to care.Note
This is the third instance of this class in the same filter block, and the existing comments document the previous two: the root files that "were being missed", and
action/**, which "matched no filter at all before, so a change to the composite Action reached CI without running the Action's own suite". Worth a glance over the remaining top-level paths for a fourth while fixing this one.