Skip to content

ci: add docs-only no-op twin so required checks report on docs PRs - #478

Merged
crs48 merged 1 commit into
mainfrom
claude/great-dubinsky-3bba1f
Jul 12, 2026
Merged

ci: add docs-only no-op twin so required checks report on docs PRs#478
crs48 merged 1 commit into
mainfrom
claude/great-dubinsky-3bba1f

Conversation

@crs48

@crs48 crs48 commented Jul 12, 2026

Copy link
Copy Markdown
Owner

Summary

Docs-only PRs to main were structurally unmergeable without gh pr merge --admin: ci.yml path-ignores docs/**, *.md, **/*.md, .github/*.md on the pull_request trigger, while the main-branch ruleset requires the contexts lint, typecheck, test (1/3)test (3/3), editor-ux, and changelog-section. On a docs-only PR those workflows never run, the contexts never report, and mergeStateStatus stays BLOCKED forever — hit on #477, same failure shape as exploration 0265's release-PR stall.

Fix

GitHub's documented paired no-op pattern ("Handling skipped but required checks"):

  • New ci-docs-noop.yml with the SAME job names (lint, typecheck, test sharded 1/33/3, editor-ux), triggered by paths: matching exactly what ci.yml ignores; every job just exits 0. A required context is satisfied by a passing check run of that name from either workflow.
  • changelog-section is not twinned: changelog-check.yml has no paths filter and already reports on docs-only PRs (fragment or skip-changelog label as usual).
  • Both workflows carry KEEP IN SYNC comments pointing at each other so the paths / paths-ignore lists don't drift.
  • Mixed PRs (docs + code) trigger both workflows; the real ci.yml run completes after the seconds-long no-op and GitHub surfaces the most recent check run per context, so the real result gates the merge.

Per the 0294 policy: the named consumer is the main ruleset itself; the pass condition is decidable by construction (always green).

Verification

  • actionlint 1.7.12 passes on both workflow files.
  • After merge: a throwaway docs-only PR will be opened to confirm mergeStateStatus reaches CLEAN/UNSTABLE instead of BLOCKED (this PR touches workflows, so it runs the full real CI and can't exercise the docs-only path itself).

🤖 Generated with Claude Code

Docs-only PRs to main were structurally unmergeable: ci.yml path-ignores
docs/** and markdown, so the ruleset-required contexts (lint, typecheck,
test (1/3..3/3), editor-ux) never reported and mergeStateStatus stayed
BLOCKED forever (hit on PR #477; same failure shape as the 0265
release-PR stall). Every docs PR needed gh pr merge --admin.

Fix is GitHub's documented paired no-op pattern: ci-docs-noop.yml
declares the SAME job names, triggered by paths: matching exactly what
ci.yml ignores, with each job exiting 0. GitHub satisfies a required
context from a passing check run of either workflow. Consumer (0294
policy) is the main ruleset itself; pass condition is decidable by
construction.

changelog-section is not twinned — changelog-check.yml has no paths
filter and already reports on docs-only PRs. Both workflows carry
KEEP IN SYNC comments pointing at each other.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: xNet Test <test@xnet.dev>
@crs48 crs48 added the skip-changelog Exclude this PR from the changelog label Jul 12, 2026
@crs48
crs48 temporarily deployed to pr-478 July 12, 2026 17:19 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Preview removed for PR #478.

github-actions Bot added a commit that referenced this pull request Jul 12, 2026
@crs48
crs48 merged commit a2bb3dc into main Jul 12, 2026
13 of 14 checks passed
@crs48
crs48 deleted the claude/great-dubinsky-3bba1f branch July 12, 2026 17:25
github-actions Bot added a commit that referenced this pull request Jul 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changelog Exclude this PR from the changelog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant