docs: establish mandatory code quality regime for Claude Code

Add comprehensive documentation and tooling to enforce code quality
checks before every commit. This regime persists across all Claude
Code sessions via `.claude/` directory files.

**The Regime** (mandatory before every commit):
1. TypeScript type checking (0 errors)
2. Biome formatting (auto-applied)
3. Linting with auto-fix (0 errors, 0 warnings)
4. Final verification

**Implementation:**
- `.claude/CLAUDE.md`: Quick reference for Claude Code sessions
- `.claude/CODE_QUALITY_REGIME.md`: Detailed regime documentation
- `npm run pre-commit`: Single command to run all checks

**Why no pre-commit hooks:**
Avoided for religious reasons. Claude Code is responsible for
enforcing quality checks through session-persistent documentation.

**Usage:**
```bash
# Before every commit
npm run pre-commit

# Or run steps individually
npm run type-check
npm run format
npm run lint:fix
npm run lint
```

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Thomas Hallock
2025-10-07 12:52:14 -05:00
parent ddbaf55aa2
commit dd1104310f
3 changed files with 155 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
# Claude Code Instructions for apps/web
## MANDATORY: Pre-Commit Quality Checks
**BEFORE EVERY COMMIT**, you MUST run and pass these checks:
```bash
npm run pre-commit
```
This command runs:
1. `tsc --noEmit` - Type checking (must have 0 errors)
2. `npm run format` - Auto-format all code
3. `npm run lint:fix` - Auto-fix lint issues
4. `npm run lint` - Verify 0 errors, 0 warnings
**DO NOT COMMIT** until all checks pass with zero errors and zero warnings.
## Workflow
When asked to make changes and commit:
1. Make your code changes
2. Run `npm run pre-commit`
3. If it fails, fix the issues and run again
4. Only create commits after all checks pass
5. Push immediately after committing
## Details
See `.claude/CODE_QUALITY_REGIME.md` for complete documentation.
## No Pre-Commit Hooks
This project does not use git pre-commit hooks for religious reasons.
You (Claude Code) are responsible for enforcing code quality before commits.
## Key Scripts
- `npm run pre-commit` - Run all quality checks (use before every commit)
- `npm run type-check` - TypeScript type checking
- `npm run format` - Format code with Biome
- `npm run lint` - Check linting
- `npm run lint:fix` - Fix linting issues automatically
---
**Remember: Always run `npm run pre-commit` before creating commits.**

View File

@@ -0,0 +1,106 @@
# Code Quality Regime
**MANDATORY**: Before ANY commit, Claude MUST run these checks and fix all issues.
## Pre-Commit Checklist (Always Required)
Run these commands in order. All must pass with 0 errors and 0 warnings:
```bash
# 1. Type check
npm run type-check
# 2. Format code
npm run format
# 3. Lint and fix
npm run lint:fix
# 4. Verify clean state
npm run lint && npm run type-check
```
## Quick Command (Run All Checks)
```bash
npm run pre-commit
```
This runs all checks in the correct order and fails if any step fails.
## The Regime Rules
### 1. TypeScript Errors: ZERO TOLERANCE
- Run `npm run type-check` before every commit
- Fix ALL TypeScript errors
- No `@ts-ignore` or `@ts-expect-error` without explicit justification
### 2. Formatting: AUTOMATIC
- Run `npm run format` before every commit
- Biome handles all formatting automatically
- Never commit unformatted code
### 3. Linting: ZERO ERRORS, ZERO WARNINGS
- Run `npm run lint:fix` to auto-fix issues
- Then run `npm run lint` to verify 0 errors, 0 warnings
- Fix any remaining issues manually
### 4. Commit Order
1. Make code changes
2. Run `npm run pre-commit`
3. If any check fails, fix and repeat
4. Only commit when all checks pass
5. Push immediately after commit
## Why No Pre-Commit Hooks?
This project intentionally avoids pre-commit hooks due to religious constraints.
Instead, Claude Code is responsible for enforcing this regime through:
1. **This documentation** - Always visible and reference-able
2. **Package.json scripts** - Easy to run checks
3. **Session persistence** - This file lives in `.claude/` and is read by every session
## For Claude Code Sessions
**READ THIS FILE AT THE START OF EVERY SESSION WHERE YOU WILL COMMIT CODE**
When asked to commit:
1. Check if you've run `npm run pre-commit` (or all 4 steps individually)
2. If not, STOP and run the checks first
3. Fix all issues before proceeding with the commit
4. Only create commits when all checks pass
## Scripts Reference
```json
{
"type-check": "tsc --noEmit",
"format": "npx @biomejs/biome format . --write",
"lint": "npx @biomejs/biome lint . && npx eslint .",
"lint:fix": "npx @biomejs/biome lint . --write && npx eslint . --fix",
"check": "npx @biomejs/biome check .",
"pre-commit": "npm run type-check && npm run format && npm run lint:fix && npm run lint"
}
```
## Emergency Override
If you absolutely MUST commit with failing checks:
1. Document WHY in the commit message
2. Create a follow-up task to fix the issues
3. Only use for emergency hotfixes
## Verification
After following this regime, you should see:
```
✓ Type check passed (0 errors)
✓ Formatting applied
✓ Linting passed (0 errors, 0 warnings)
✓ Ready to commit
```
---
**This regime is non-negotiable. Every commit must pass these checks.**

View File

@@ -11,6 +11,7 @@
"format": "npx @biomejs/biome format . --write",
"format:check": "npx @biomejs/biome format .",
"check": "npx @biomejs/biome check .",
"pre-commit": "npm run type-check && npm run format && npm run lint:fix && npm run lint",
"test": "vitest",
"test:run": "vitest run",
"type-check": "tsc --noEmit",