release-check

Use when preparing for a release, verifying release readiness, or running pre-release checks on the jackin project

Skill file

Preview skill file
---
name: release-check
description: Use when preparing for a release, verifying release readiness, or running pre-release checks on the jackin project
argument-hint: "[context]"
---

# Release Check

Pre-release validation for the jackin project. Runs a series of checks and produces a readiness report.

## When to Use

- Before running `/release`
- When you want to verify the project is ready to release
- After fixing issues found in a previous release check

## Process

Run each check in order. Collect results into a readiness report.

### Check 1: CI Status

Verify the latest CI run on `main` is green:

```bash
gh run list --workflow=ci.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
```

If `conclusion` is not `success`, report **FAIL** and stop.

Also check path-specific workflows if their paths changed since the last tag:

```bash
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")

# Check if docker/construct/** changed since last tag
if [ -n "$LAST_TAG" ] && [ -n "$(git diff --name-only "$LAST_TAG"..HEAD -- docker/construct/)" ]; then
  gh run list --workflow=construct.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
fi

# Check if docs/** changed since last tag
if [ -n "$LAST_TAG" ] && [ -n "$(git diff --name-only "$LAST_TAG"..HEAD -- docs/)" ]; then
  gh run list --workflow=docs.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
fi
```

Report result as **PASS**, **FAIL**, or **SKIP** (if no changes in those paths).

### Check 2: Local Tests

```bash
cargo test --locked
```

If any test fails, report **FAIL** and stop.

### Check 3: Clippy

```bash
cargo clippy -- -D warnings
```

If clippy reports any warnings-as-errors, report **FAIL** and stop.

### Check 4: Format Check

```bash
cargo fmt --check
```

If formatting violations found, report **FAIL** and stop.

### Check 5: Direct Commit Warning

Find commits since the last tag that are not merge commits from PRs:

```bash
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
  git log "$LAST_TAG"..HEAD --oneline --no-merges
fi
```

For each commit, check if it was part of a PR:

```bash
gh pr list --state merged --search "<commit-sha>" --json number --jq '.[0].number'
```

If there are commits not associated with any PR, report **WARN** with the list. Do not block.

### Check 6: Doc Link Validation

Check for broken internal links in `docs/content/docs/`:

- Read markdown files and extract internal links (relative paths, `href` attributes)
- Verify each linked file exists
- For external URLs, verify they return HTTP 200 (skip rate-limited domains)

Report **PASS** or **WARN** with list of broken links.

### Check 7: TODO Freshness

Read `TODO.md` and all files in `todo/`:

- Check if any items reference work that has already been completed (look for matching commits or closed PRs)
- Check if any items are stale (no related activity in recent commits)

Report **PASS** or **WARN** with findings.

### Check 8: Security Exceptions

Read `SECURITY_EXCEPTIONS.md` and present its contents to the user.

Ask: **"Are these security exceptions still current? (yes/no)"**

If the user says no, report **REVIEW** — the user needs to update the file before releasing.

If the user says yes, report **PASS**.

### Check 9: Docker Build Status

Check if Docker-related files changed since the last tag:

```bash
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
CONSTRUCT_CHANGED=$(git diff --name-only "$LAST_TAG"..HEAD -- docker/construct/ 2>/dev/null)
RUNTIME_CHANGED=$(git diff --name-only "$LAST_TAG"..HEAD -- docker/runtime/ 2>/dev/null)
```

If changed, verify the `construct.yml` workflow passed (already checked in Check 1). Report **PASS** or **SKIP**.

## Output

Present a structured readiness report:

```
Release Readiness Report
========================
✓ CI: all workflows green
✓ Local tests: N passed, 0 failed
✓ Clippy: no warnings
✓ Format: clean
⚠ Direct commits: N commits since vX.Y.Z not from PRs
  - <sha> <message>
✓ Doc links: all valid
✓ TODOs: up to date
? Security exceptions: review required (N items)
✓ Docker: builds pass (or: no changes, skipped)

Result: PASS | REVIEW NEEDED | FAIL
```

## Blocking vs Non-blocking

| Check | Failure behavior |
|---|---|
| CI status | **BLOCK** — cannot release with red CI |
| Local tests | **BLOCK** — cannot release with failing tests |
| Clippy | **BLOCK** — cannot release with clippy errors |
| Format | **BLOCK** — cannot release with fmt violations |
| Direct commits | **WARN** — show list, do not block |
| Doc links | **WARN** — show broken links, do not block |
| TODO freshness | **WARN** — show stale items, do not block |
| Security exceptions | **REVIEW** — ask user, block only if user says "no" |
| Docker builds | **BLOCK** if changed and CI failed; **SKIP** if unchanged |

Source

Creator's repository · jackin-project/jackin-dev

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk