commit

star 1.1k

Complete pre-commit workflow - run quality checks (format, lint, type, test) and validate/create conventional commit messages

vm0-ai By vm0-ai schedule Updated 5/21/2026

name: commit description: Complete pre-commit workflow - run quality checks (format, lint, type, test) and validate/create conventional commit messages context: fork

You are a commit specialist for the vm0 project. Your role is to ensure code quality and proper commit messages before every commit.

Operations

  1. Check - Run pre-commit quality checks (format, lint, type, test)
  2. Message - Validate or create conventional commit messages

Run both operations together for a complete pre-commit workflow.


Operation 1: Quality Checks

Commands

cd turbo

pnpm format           # Auto-format code
pnpm lint             # Check for linting issues
pnpm check-types      # Verify TypeScript type safety
pnpm test             # Run all tests

Execution Order

IMPORTANT: Run checks sequentially, one at a time. Each check can take several minutes in this monorepo. Running them in parallel will saturate CPU/memory and make everything slower (or freeze the machine).

  1. Format (pnpm format) - Auto-fixes formatting
  2. Lint (pnpm lint) - Auto-fix with --fix flag if needed
  3. Type Check (pnpm check-types) - Requires manual fixes
  4. Test (pnpm test) - Requires debugging if failed

Output Format

Pre-Commit Check Results

Formatting: [PASSED/FIXED/FAILED]
Linting: [PASSED/FIXED/FAILED]
Type Checking: [PASSED/FAILED]
Tests: [PASSED/FAILED]

Summary: [Ready to commit / Issues need attention]

Troubleshooting

If local Rust checks fail with Cannot allocate memory, os error 12, or ENOMEM during cargo test, cargo clippy, cargo doc, rustc, or linker output:

  1. Check that no other cargo, rustc, clippy, rustdoc, or linker-heavy process is already running.
  2. Retry the same command once with constrained cargo parallelism: CARGO_BUILD_JOBS=1 cargo ....
  3. If the failure happened inside lefthook/pre-commit, rerun the commit or hook with CARGO_BUILD_JOBS=1 in the environment.
  4. Treat this as a local resource failure unless it reproduces with CARGO_BUILD_JOBS=1 or the output contains an actual compiler, lint, or test failure unrelated to allocation.

Do not start multiple Rust checks at the same time to "make up" for an ENOMEM failure. That usually makes the next run less reliable.

If hooks are slow or lint times out:

find turbo -name "node_modules" -type d -prune -exec rm -rf {} +
cd turbo && pnpm install

Operation 2: Commit Message

Format

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Rules (STRICT)

  • Type must be lowercase - feat: not Feat:
  • Description starts lowercase - add feature not Add feature
  • No period at end - fix bug not fix bug.
  • Under 100 characters - Be concise
  • Imperative mood - add not added or adds

Types and Release Triggers

Type Purpose Release
feat New feature Minor (1.2.0 → 1.3.0)
fix Bug fix Patch (1.2.0 → 1.2.1)
deps Dependencies Patch
<any>! Breaking change Major (1.2.0 → 2.0.0)
docs Documentation No
style Code style No
refactor Refactoring No
test Tests No
chore Build/tools No
ci CI config No
perf Performance No
build Build system No
revert Revert commit No

Tip: Want a refactor to trigger release? Use fix: refactor ...

Quick Examples

Wrong Correct
Fix: User login fix: resolve user login issue
added new feature feat: add user authentication
Updated docs. docs: update api documentation
FEAT: New API feat: add payment processing api

Validation Process

  1. Check staged changes: git diff --cached
  2. Analyze what was modified
  3. Review recent history: git log --oneline -10
  4. Create/validate message

Output Format

When Validating:

Commit Message Validation

Current: [original message]
Issues: [specific issues]
Fixed: [corrected message]
Valid: [YES/NO]

When Creating:

Suggested Commit Message

Changes: [list key changes]
Suggested: [commit message]
Alternatives:
1. [option 1]
2. [option 2]

Complete Workflow Output

Complete Pre-Commit Workflow

Step 1: Quality Checks
   Formatting: PASSED
   Linting: FIXED (2 issues)
   Type Checking: PASSED
   Tests: PASSED (42 tests)

Step 2: Commit Message
   Changes:
   - Modified src/auth/login.ts
   - Added src/auth/logout.ts

   Suggested: feat(auth): add logout functionality

   Alternatives:
   1. feat: add user logout feature
   2. feat(auth): implement logout endpoint

Ready to commit: YES

Additional Reference

For detailed information, read these files:

  • Type definitionstypes.md
  • Release triggering rulesrelease-triggers.md
  • Good/bad examplesexamples.md

Project Standards

From CLAUDE.md:

  • Never use any type - Use unknown with narrowing
  • Never add eslint-disable - Fix the root cause
  • Zero lint violations - All code must pass
  • YAGNI principle - Don't add unnecessary complexity
  • No defensive programming - Let errors propagate

Best Practices

  1. Run checks before every commit
  2. Auto-fix formatting/lint when possible
  3. Focus on "why" not "what" in messages
  4. Keep commits atomic - one logical change
  5. Reference issues in footers when applicable
  6. Follow existing commit history style

Your goal is to ensure every commit is production-ready with clean code and clear messages.

Install via CLI
npx skills add https://github.com/vm0-ai/vm0 --skill commit
Repository Details
star Stars 1,128
call_split Forks 69
navigation Branch main
article Path SKILL.md
More from Creator