pan-commit · git:20260714.8d8cc01 · 2026-07-14 · sha256 1818a408a9fde5a4

pan-commit git:20260714.8d8cc01A

Immutable. This exact content is served forever at /api/v1/blob/1818a408a9fde5a4.

---
name: pan-commit
description: Create Overdeck repo commits that satisfy commitlint and husky on the first try
triggers:
  - commit these changes
  - create a commit
  - commit in overdeck
  - make a conventional commit
  - avoid commitlint failure
allowed-tools:
  - Bash
  - Read
---

# Overdeck Commit Helper

Use this skill when committing inside the Overdeck repo so the commit passes this repo's husky and commitlint checks on the first attempt.

## Repo Rules

Read `commitlint.config.js` before drafting a message if you have not already verified the current rules.

Current expectations in this repo:

- Use a conventional commit header: `<type>(<scope>): <subject>`
- `scope` is optional in commitlint, but when you use one, prefer one of the repo scopes:
  - `cloister`
  - `dashboard`
  - `workspace`
  - `cli`
  - `review`
  - `vBRIEF tasks`
  - `db`
  - `specialists`
  - `terminal`
  - `infra`
  - `deps`
- Keep the header at or under 100 characters
- If you include a body, keep every body line at or under 100 characters
- Do not add a `Co-Authored-By` trailer in this repo

Preferred types:

- `feat` for new behavior
- `fix` for bug fixes
- `refactor` for structural changes without behavior change
- `test` for test-only changes
- `docs` for documentation-only changes
- `chore` for maintenance work

## Required Workflow

### 1. Inspect commit context

Run these first:

```bash
git status --short --branch
git diff --staged
git diff
git log --oneline -5
```

If there are untracked files to include, stage them explicitly by path. Do not use `git add .` or `git add -A` unless the user explicitly asks.

### 2. Choose the narrowest fitting scope

Map changed files to the closest repo scope. Examples:

- `src/dashboard/frontend/**` or `src/dashboard/server/**` → `dashboard`
- `src/lib/tmux.ts` or terminal streaming code → `terminal`
- `src/cloister/**` or agent orchestration → `cloister`
- `src/cli/**`, `bin/**`, or top-level command behavior → `cli`
- `workspaces/**` lifecycle code → `workspace`
- specialist pipeline code → `specialists` or `review`
- dependency-only updates → `deps`
- infra scripts/config → `infra`

If the change spans multiple areas, choose the scope that best matches the primary reason for the change. If no scope fits cleanly, omit the scope instead of inventing one.

### 3. Draft the commit message

Use one of these safe templates:

```text
feat(cli): add pan-commit skill
fix(dashboard): restore terminal reconnect state
refactor(cloister): simplify specialist handoff flow
test(review): cover failed verification retry path
docs: clarify pan sync workflow
chore(deps): update effect packages
```

For multi-line messages, use a short body that explains why. Keep every body line short.

Good:

```text
fix(dashboard): rehydrate snapshot after reconnect

Restore the initial snapshot step so the UI can recover cleanly after the server restarts.
```

Bad:

```text
add a new thing
feat(skill): something vague and too long that keeps going until it exceeds the header limit and fails lint
feat(unknown): use a scope that is not part of the repo's normal scopes
```

### 4. Commit safely

For a single-line message:

```bash
git commit -m "feat(cli): add pan-commit skill"
```

For a multi-line message:

```bash
git commit -m "$(cat <<'EOF'
fix(dashboard): rehydrate snapshot after reconnect

Restore the initial snapshot step so the UI can recover cleanly after the server restarts.
EOF
)"
```

### 5. If commitlint rejects the message

Do not bypass hooks. Fix the message and retry.

Common fixes:

- `subject-empty` or `type-empty` → rewrite as a conventional commit header
- `scope-enum` warning → switch to one of the known repo scopes, or omit the scope
- `body-max-line-length` → wrap the body to shorter lines
- `header-max-length` → shorten the subject

## Notes

- Always create a new commit rather than amending unless the user explicitly asks to amend.
- If the user asks to commit everything, still inspect the diff first and stage explicit paths.
- If a hook fails for a real code problem rather than message format, fix the underlying issue and then create a new commit.