forked from molecule-ai/molecule-core
PRs that don't touch canvas/** paths skip the Canvas (Next.js) job via its `if: needs.changes.outputs.canvas == 'true'` guard. GitHub reports SKIPPED for that conclusion. Branch protection on staging requires Canvas (Next.js) — and treats SKIPPED as not-passed, blocking merge on every workspace-server-only or migration-only PR. This is the design pattern documented in feedback memory "branch_protection_check_name_parity": split into a real job + a no-op shadow that share the same `name:`. Exactly one runs per PR; both report the same check context, and at least one always reports SUCCESS, satisfying the required check. The no-op job runs in a few seconds (single `echo` step) and produces the right check context for any PR that has changes outside canvas/**. Concrete blocker that prompted this: PR #2314 (RFC #2312 PR-B) sat APPROVED + CI-green + UP-TO-DATE for half an hour with mergeStateStatus BLOCKED, traced via the GraphQL `isRequired` field to a single SKIPPED Canvas (Next.js) check. PRs #2319 (PR-F) and the rest of the RFC #2312 stack would have hit the same wall. |
||
|---|---|---|
| .. | ||
| auto-promote-on-e2e.yml | ||
| auto-promote-staging.yml | ||
| auto-sync-main-to-staging.yml | ||
| auto-tag-runtime.yml | ||
| block-internal-paths.yml | ||
| canary-staging.yml | ||
| canary-verify.yml | ||
| check-merge-group-trigger.yml | ||
| ci.yml | ||
| codeql.yml | ||
| e2e-api.yml | ||
| e2e-staging-canvas.yml | ||
| e2e-staging-saas.yml | ||
| e2e-staging-sanity.yml | ||
| pr-guards.yml | ||
| promote-latest.yml | ||
| publish-canvas-image.yml | ||
| publish-runtime.yml | ||
| publish-workspace-server-image.yml | ||
| redeploy-tenants-on-main.yml | ||
| retarget-main-to-staging.yml | ||
| runtime-pin-compat.yml | ||
| runtime-prbuild-compat.yml | ||
| secret-pattern-drift.yml | ||
| secret-scan.yml | ||
| sweep-cf-orphans.yml | ||
| sweep-stale-e2e-orgs.yml | ||
| test-ops-scripts.yml | ||