Skip to content

Plan: Standardize Org-Level vs Repo-Level CI #336

Description

@sylvansys

Branch: 336-feature/please-update-the-gh-context-stop-hook-t
Plan file: /home/ben/.claude/plans/moonlit-mixing-globe.md


Plan: Standardize Org-Level vs Repo-Level CI

Problem

The constellos org has CI naming chaos:

  • Org rulesets (disabled) require: CI / Lint, CI / Typecheck, CI / Unit Tests
  • Org reusable workflow produces: CI / Static Analysis / Lint (ESLint), CI / Static Analysis / Types (TypeScript), CI / Tests / Unit (Vitest), CI / Tests / E2E (Playwright) (when called from a CI job)
  • constellos (main repo): inline CI producing Lint (ESLint), Types (TypeScript), Unit Tests (Vitest), E2E Tests (Playwright)
  • claude-code-plugins: inline CI producing Lint, Typecheck, Test, AI Review
  • nodes-md: already uses reusable workflow (thin caller) — producing CI / Static Analysis / ... names
  • github-agents: no CI at all

Nothing matches the ruleset requirements. The reusable workflow is well-designed but the rulesets were written assuming different names.

Current State

Repo CI Source Check Names
constellos Inline ci.yml Lint (ESLint), Types (TypeScript), Unit Tests (Vitest), E2E Tests (Playwright)
nodes-md Reusable caller CI / Static Analysis / Lint (ESLint), CI / Static Analysis / Types (TypeScript), CI / Tests / Unit (Vitest), CI / Tests / E2E (Playwright)
claude-code-plugins Inline ci-pipeline.yml Lint, Typecheck, Test, AI Review
github-agents None

Recommendation

1. Standardize on the reusable workflow check names

The reusable workflow produces the most descriptive names. Update the org ruleset to match what it actually produces:

Basic CI ruleset required checks (update from current):

CI / Lint              →  CI / Static Analysis / Lint (ESLint)
CI / Typecheck         →  CI / Static Analysis / Types (TypeScript)
CI / Unit Tests        →  CI / Tests / Unit (Vitest)

2. Migrate repos to thin callers

Replace inline CI workflows with thin callers to the reusable workflow (like nodes-md already does):

Target ci.yml for all repos:

name: CI

on:
  pull_request:
    branches: ['**']

jobs:
  CI:
    uses: constellos/.github/.github/workflows/ci-pipeline-reusable.yml@main
    with:
      node_version: '22'
    secrets: inherit

3. Remove the redundant AI Review job

The AI Review job in claude-code-plugins' ci-pipeline.yml is redundant — constellos-review.yml already runs AI reviews (requirements + code-quality agents). Remove it entirely.

4. Handle the constellos-review.yml workflow

This already exists as a separate workflow in both claude-code-plugins and constellos. It handles AI reviews independently from CI. Leave it as-is — it's a separate concern from CI pipeline.

Changes by Repo

constellos/.github (org)

  • Update Basic CI ruleset required checks to match reusable workflow names
  • Enable the Basic CI ruleset (set enforcement to active)

constellos/constellos (main monorepo)

  • Replace inline ci.yml with thin reusable caller (identical to what nodes-md uses)
  • Keep constellos-review.yml as-is

constellos/claude-code-plugins

  • Replace ci-pipeline.yml with:
    • Thin reusable CI caller (same as above)
    • Keep the AI Review job as a separate local workflow or append it after the reusable call
  • Keep constellos-review.yml as-is

constellos/nodes-md

  • No changes needed — already uses the reusable workflow

constellos/github-agents

  • Add the thin CI caller workflow (it currently has no CI)

Implementation

Step 1: Update org ruleset check names

Update the "Basic CI" ruleset via GitHub org settings or API:

required_status_checks:
  - context: "CI / Static Analysis / Lint (ESLint)"
  - context: "CI / Static Analysis / Types (TypeScript)"
  - context: "CI / Tests / Unit (Vitest)"

Step 2: Replace claude-code-plugins CI

Replace .github/workflows/ci-pipeline.yml with thin reusable caller (AI Review removed — already handled by constellos-review.yml):

name: CI

on:
  pull_request:
    branches: ['**']

permissions:
  contents: read

jobs:
  CI:
    uses: constellos/.github/.github/workflows/ci-pipeline-reusable.yml@main
    with:
      node_version: '22'
    secrets: inherit

Step 3: Replace constellos main CI

Replace .github/workflows/ci.yml with the same thin caller (without the AI Review job — handled by constellos-review.yml):

name: CI

on:
  pull_request:
    branches: ['**']
  push:
    branches: [main]

permissions:
  contents: read

jobs:
  CI:
    uses: constellos/.github/.github/workflows/ci-pipeline-reusable.yml@main
    with:
      node_version: '22'
    secrets: inherit

Step 4: Add CI to github-agents

Create .github/workflows/ci.yml with the thin caller.

Step 5: Enable org ruleset

Set Basic CI ruleset enforcement to active.

Verification

  1. Create test PRs in each repo and verify check names match
  2. Verify the org ruleset correctly gates merges
  3. Confirm AI Review still runs as a separate check where needed
  4. Verify nodes-md is unaffected (no changes)

Scope Question

This plan covers changes to 4 repos (org .github, constellos, claude-code-plugins, github-agents). Only the claude-code-plugins changes can be made from this worktree. The other repos need separate work.

For this session: Only modify claude-code-plugins/.github/workflows/ci-pipeline.yml.
Follow-up: Org ruleset update + other repo migrations (separate PRs/sessions).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions