ci-lanes

Documents GitHub Actions lane structure and gate patterns for monorepo CI workflows.

Updated May 13, 2026
One-click install
npx skills add https://github.com/Hinten/next_erp --skill ci-lanes-hinten
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: ci-lanes
Source: https://github.com/Hinten/next_erp/tree/main/.claude/skills/ci-lanes
Command: npx skills add https://github.com/Hinten/next_erp --skill ci-lanes-hinten

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? GitHub Actions has three silent-failure behaviours — a non-matching paths: filter publishes no check at all, a skipped job satisfies a required status check, and check-run names carry no workflow prefix — that make naive CI configurations report green without ever running the suite. This Skill provides the reference knowledge needed to add, edit, debug, or review workflows under .github/workflows/ without falling into those traps. ## Core Features & Use Cases - Gate pattern reference: Explains the unskippable gate job with if: always(), its required/optional guard manifest, and the anti-vacuity lock that re-reads the jobs API to certify real conclusions. - Scope derivation: Documents e2e-affected.mjs and its --roots, --self, --only-paths, and --kind flags, including fail-safe directions and the version-skew wrapper requirement. - Sixteen pinnable checks: Lists every gate and ci.yml job name suitable for the protect-main ruleset, plus the exact gh api procedure for pinning them with integration_id: 15368. - Use Case: When a required check sits at "Expected" forever on a PR, or a lane silently stops running after a workflow edit, use this Skill to diagnose which GitHub behaviour caused it and how the gate/backstop test should be updated. ## Quick Start Ask the assistant to explain why a required check is missing on your pull request or to help you add a new CI lane following the gate pattern.

Frequently Asked Questions about ci-lanes

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
Why is my required status check stuck on Expected forever?

A non-matching top-level `paths:` filter publishes no check run at all — not a failure, not a skip — so the required check waits indefinitely. The fix is to remove `paths:` from `pull_request:` triggers and derive scope in a `changes` job instead.

How do I make a GitHub Actions required check unskippable?

Use a gate job with `if: always()` and no other condition, then pin only that gate on the ruleset. A job skipped by `if:` publishes `skipped`, which GitHub counts as satisfying a required check, so never pin a skippable job directly.

How does the gate job verify that suite jobs actually ran?

The gate queries the run's jobs API and requires every certified job to be present with conclusion `success`, retrying unsettled states like `pending` or `missing` up to six times. Real conclusions such as `failure` or `cancelled` go red immediately without retries.

Why does turbo run test exit 0 without running anything?

Turbo exits 0 both for an unknown package name in `--filter` and for a package with no matching script. Guard with `turbo run <task> --dry=json` or use `pnpm --filter <pkg> exec vitest run --fail-if-no-match`, which exits 1 on no match.

Can I add a paths filter to a pull_request workflow trigger?

No — a `paths:` filter on `pull_request:` means a non-matching PR publishes no check, which breaks required checks. Keep `paths:` only on `push:` triggers, where nothing is a required check, and let the scope job decide on PRs.

How do I pin a check name on a GitHub ruleset safely?

Merge first, let the gate publish on one run, then read exact check names from the merged PR's head SHA via the check-runs API. Include `integration_id: 15368` so only GitHub Actions can satisfy the context, and snapshot existing rules before the wholesale `PUT`.