# CI Status

> Check the CI pipeline status for the current branch after pushing changes. Reports pass/fail with failure details. Use this after every push to confirm your changes are truly done — CI must be green. TRIGGER when: after git push, after committing changes, when asked to check CI, or when verifying that work is complete.

- Skill: `mifunedev/ci-status` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add mifunedev/ci-status`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mifunedev/ci-status/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: mifunedev (https://skillmd.com/u/mifunedev)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/mifunedev/ci-status

---


# CI Status

Monitor the GitHub Actions CI pipeline for the current branch. A feature is not done until CI passes.

## Instructions

1. **Identify the current branch and latest commit:**

```bash
BRANCH=$(git branch --show-current)
SHA=$(git rev-parse --short HEAD)
echo "Branch: $BRANCH | Commit: $SHA"
```

2. **Find the latest CI run for this branch:**

```bash
gh api "repos/ryaneggz/open-harness/actions/runs?branch=$BRANCH&per_page=1" \
  --jq '.workflow_runs[0] | {id: .id, status: .status, conclusion: .conclusion, head_sha: .head_sha[:7], name: .name}'
```

3. **If the run is still in progress, poll every 15 seconds (max 5 minutes):**

```bash
RUN_ID=<id from step 2>
for i in $(seq 1 20); do
  STATUS=$(gh api "repos/ryaneggz/open-harness/actions/runs/$RUN_ID" --jq '.status')
  if [ "$STATUS" = "completed" ]; then
    break
  fi
  echo "Still running... ($i/20)"
  sleep 15
done
```

4. **Check the result:**

```bash
gh api "repos/ryaneggz/open-harness/actions/runs/$RUN_ID" \
  --jq '{status: .status, conclusion: .conclusion, url: .html_url}'
```

5. **If failed, get the failure details:**

```bash
# Get the failed job ID
JOB_ID=$(gh api "repos/ryaneggz/open-harness/actions/runs/$RUN_ID/jobs" \
  --jq '.jobs[] | select(.conclusion == "failure") | .id')

# Get the failure context (15 lines before the error)
gh api "repos/ryaneggz/open-harness/actions/jobs/$JOB_ID/logs" 2>&1 \
  | grep -B 15 "Process completed with exit code" | head -25
```

6. **Report the result:**

- **PASS**: Report "CI green" with the run URL
- **FAIL**: Report the failing step, error message, and suggest a fix. Then fix the issue, commit, push, and run `/ci-status` again
- **NO RUN**: No workflow's `on:` filter matched the push. This repo's CI is mostly PATH-filtered, not branch-filtered:
  - `ci-harness.yml` — push only: `packages/**`, `package.json`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`, itself
  - `docs.yml` — PR or push-to-main: `docs/**`, `apps/docs/**`, `blog/**`, itself
  - `conciseness.yml` — push or PR: `workspace/*.md`, `workspace/.claude/rules/*.md`, itself
  - `release.yml` — tag push only

  Infrastructure-only PRs (devcontainer/scripts/install/) trigger NOTHING on push — that's expected. `pull_request`-event workflows still fire when the PR opens. Diagnose with: `git diff --name-only HEAD~1 HEAD` and compare against each workflow's `on:` block.

## CI Pipeline Steps

This project's CI (`CI: Harness`) runs these steps in order:

1. Lint (`pnpm run lint`)
2. Format check (`pnpm run format:check`)
3. Type check (`pnpm run type-check`)
4. Prisma generate (`pnpm exec prisma generate`)
5. Prisma migrate (`npx prisma migrate deploy`)
6. Build (`pnpm run build`)
7. Test (`pnpm test`)
8. Playwright E2E (`pnpm run test:e2e`)

## Local Pre-flight

Before pushing, you can run the same checks locally to catch issues early:

```bash
pnpm -r run lint && pnpm -r run format:check && pnpm -r run build && pnpm -r run test
```

