Skip to content

ci: relevance-gate workflows — skip deploys, release, and CI on non-relevant merges - #322

Merged
elliotBraem merged 3 commits into
mainfrom
ci/relevance-gated-workflows-v2
Oct 9, 2026
Merged

elliotBraem merged 3 commits into
mainfrom
ci/relevance-gated-workflows-v2

Conversation

@elliotBraem

Copy link
Copy Markdown
Contributor

What changes

Workflow Change
ci.yml pull_request: gains the paths-ignore the push trigger already had (**.md, docs/**, .changeset/**) — docs/changeset-only PRs skip the heavy lint/typecheck job entirely. docs:check removed from lint-and-typecheck (moved).
new docs-check.yml Docs Check — the docs link check as its own zero-dependency workflow (checkout + node, no pnpm install, ~20s). Runs on every PR (catches links broken by renaming/deleting a file the markdown points at, not just md edits) and on docs-path pushes to main, which CI's path-ignore previously left unchecked. Net coverage improves: today docs-only main pushes skip the check entirely.
deploy.yml Relevance gate in the existing gate job: the merged diff (first-parent — exact for PR merges and single-commit pushes) must touch a runtime-affecting path or Deploy Production skips with a ::notice:: listing the files. Allowlist: Dockerfile, railway.toml, scripts/, host/, api/, ui/, plugins/, packages/, bos.app.ts, bos.dev.ts, bos.config.json, biome.json, .env.test, root manifests/tsconfigs, and the ci/deploy/release workflow files. Version-PR merges still deploy (they bump packages/*). Uncertainty errs toward deploying; workflow_dispatch bypasses.
release.yml paths-ignore for md/docs merges (deliberately not .changeset/** — that is its input).
.github/templates/workflows/ci.yml Same PR paths-ignore for child repos, which currently run the full ungated consumer CI on every PR.
check-skills.yml Cancel-in-progress concurrency group — rapid pushes to one PR stop stacking intent validate runs. Path triggers untouched (deliberate per its header).

Gate simulation (against real main history)

git diff --name-only <sha>^ <sha> + the gate regex over 7 representative commits — all verdicts correct after two simulation-caught fixes:

  • bos.config.json-only bumps ("chore: update deployment URLs") must deploy — initially missing from the allowlist
  • merge-tangle commits with empty first-parent diffs must deploy, not skip

Known red, pre-existing

Validate intent skills fails on this PR — version PR #307 bumped the packages to 2.0.0-rc.0 but the skills' library_version markers still say 1.10.2, so intent stale reports drift on every qualifying PR since (PR #320 failed identically). That reconciliation belongs to the skills review flow, not this change.

Verification

  • actionlint (same v1.7.7 pin as the Workflow lint job) — clean on all repo + template workflows
  • YAML parse on all touched files
  • node scripts/docs-link-check.mjs — passes locally (49 files)
  • Deploy-gate regex simulated against 7 real merge/commit histories (see above)

No changeset: repo-level CI/workflow changes only (.github/templates ships via bos sync from this repo's main, not npm).

…elevant merges

CI's pull_request trigger now carries the same paths-ignore the push
trigger already had — docs/changeset-only PRs skip the heavy lint/
typecheck job entirely. The docs link check that made that tradeoff
lossy moved out of CI into its own zero-dependency workflow (no
pnpm install): Docs Check runs on every PR — so it also catches links
broken by renaming/deleting a file the markdown points at — and on
docs-path pushes to main, which CI's path-ignore previously left
completely unchecked.

Deploy gains a relevance gate in the existing gate job: the merged diff
(first-parent, exact for PR merges and single-commit pushes) must touch
a runtime-affecting path — host/api/ui/plugins/packages/scripts,
Dockerfile, railway.toml, authored config, root manifests, or the
ci/deploy/release workflows themselves — or Deploy Production skips with
a notice. Tests-only, .github-only, and markdown-only merges stop
spending the full build/upload/publish/image/Railway train; version-PR
merges still deploy (they bump packages/*). Uncertainty errs toward
deploying, and workflow_dispatch bypasses the gate.

Release paths-ignores markdown/docs merges (never .changeset — that is
its input), the child-repo CI wrapper gains the same PR paths-ignore as
the parent, and Check Skills gets a cancel-in-progress concurrency
group so rapid pushes to one PR stop stacking intent validations.

Gate regex was simulation-tested against real main history: version PRs,
config-only bumps, and merge-tangle empty diffs deploy; the remaining
skip surface is md/docs, tests/, and non-deploy .github paths.
bos.app.ts is the canonical authored config form — the scaffold
generates it (convertChildConfigToAppForm runs in both init branches,
and init.levels.test asserts no bos.config.json remains), so:

- drop the dead ^bos\.config\.json$ term from the deploy relevance gate
  and all four ci.yml detect-changes buckets (bos.app.ts was already
  covered in each)
- sweep the scaffolded README/AGENTS/skill templates that still told
  child users the config lives in bos.config.json

Legacy JSON configs in existing child repos still load (sync handles
both forms); test fixtures intentionally keep exercising that path.
@elliotBraem
elliotBraem merged commit 45f8656 into main Oct 9, 2026
7 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant