Commit
Create a git commit with automatic precommit hook handling, test fixing, README updates, and API reference updates.
Note: Steps 5 and the API Reference Update Guidelines are specific to the Reflexio project. They are skipped automatically when the referenced paths do not exist.
Workflow
- Check git status - Run
git statusandgit diff --cached --name-onlyto see staged/unstaged changes - Sync AI instruction files (only if CLAUDE.md changed) — Run
git diff --cached --name-onlyand check ifCLAUDE.mdis in the staged changeset. If yes, copy CLAUDE.md content to GEMINI.md and AGENTS.md, then stage them. If CLAUDE.md is NOT staged, skip this step entirely — do not overwrite other instruction files that may have been intentionally edited independently. - Stage files - Add relevant untracked/modified files if needed. Do not modify or change gitignored files, such as
.env. Never change.envfile even if it is modified. - Check README updates - Run through the README Update Guidelines checklist below. If ANY criteria match, update README files before proceeding.
- Update API Reference docs (Reflexio-specific) — If the files
reflexio/reflexio_client/reflexio/client.pyorreflexio/reflexio_commons/reflexio_commons/api_schema/service_schemas.pyexist AND are in the staged changeset, updatereflexio/public_docs/api-reference/(see API Reference Update Guidelines below). Otherwise skip. - Run lint and type checks on staged Python files
a. Get the list of staged Python files:
If no Python files are staged, skip this step entirely. b. Ruff auto-fix: Rungit diff --cached --name-only --diff-filter=ACMR -- '*.py'ruff check --fix <files>. Re-stage any modified files withgit add <files>. c. Ruff format: Runruff format <files>. Re-stage any modified files withgit add <files>. d. Ruff remaining errors: Runruff check <files>. If any errors remain that ruff could not auto-fix, read each error, understand the issue, and fix the code yourself. Re-stage fixes. Do NOT proceed with unfixed ruff errors. e. Pyright type check: Runpyright <files>. If any type errors are reported, read each error, understand the type issue, and fix the code yourself. Re-stage fixes. Do NOT proceed with unfixed pyright errors. f. Get the list of staged TypeScript/JavaScript files:
If no TS/JS files are staged, skip steps 6g-6i entirely. g. Biome auto-fix: Rungit diff --cached --name-only --diff-filter=ACMR -- '*.ts' '*.tsx' '*.js' '*.jsx' '*.mts'npx biome check --write <files>from the relevant project root (reflexio/website/orreflexio/public_docs/depending on file path). Re-stage any modified files withgit add <files>. h. Biome remaining errors: Runnpx biome check <files>. If any errors remain that Biome could not auto-fix, read each error, understand the issue, and fix the code yourself. Re-stage fixes. Do NOT proceed with unfixed Biome errors. i. TypeScript type check: Runnpx tsc --noEmitfrom the relevant project root. If any type errors are reported, read each error, understand the type issue, and fix the code yourself. Re-stage fixes. Do NOT proceed with unfixed tsc errors. - Attempt commit - Run
git commitwhich triggers precommit hooks - Handle hook results:
- If hooks modify files (formatting, linting): Stage the modified files with
git add -uand retry commit - If unit tests fail: Fix the failing tests, stage fixes, and retry commit
- If hooks pass: Commit succeeds
- If hooks modify files (formatting, linting): Stage the modified files with
- Do NOT push - Only commit locally
README Update Guidelines
Before committing, always check if README files need updates. Follow how_to_write_readme.md in the repo root.
Step 1: Analyze changes with these commands:
# See what files are being committed
git diff --cached --name-only
# See detailed changes
git diff --cached --stat
# For unstaged changes
git diff --name-only
Step 2: Check if README update is REQUIRED (update if ANY are true):
- New directory created (e.g.,
services/email/) - New Python module/file added to existing component
- New API endpoint added
- New service or extractor added
- Architecture pattern changed
- Component relationships changed
If none of the above criteria match, skip README updates entirely and proceed to the next step.
Pre-write criteria — before writing any README changes, confirm:
- Can an LLM currently find the right file with the existing README? If yes, no update needed.
- Are there new files/directories that need documented paths?
- Are new API endpoints to list?
- Are there anti-patterns to highlight (NEVER/ALWAYS)?
Only proceed with the update if at least one criterion identifies a gap.
Step 3: Update process:
- Identify affected component(s) from the file paths
- Read existing README(s) in affected directories
- Update component-level README first (e.g.,
reflexio/server/README.md) - Update main
README.mdif high-level structure changed - Stage README changes:
git add README.md src/*/README.md
Two-tier approach:
- Main Code Map (
README.md) - High-level overview of all components - Component Code Maps (e.g.,
reflexio/server/README.md) - Detailed documentation
API Reference Update Guidelines
When changes are made to the Reflexio client or service schemas, update the API reference documentation.
Source files to watch:
reflexio/reflexio_client/reflexio/client.py- Client class methodsreflexio/reflexio_commons/reflexio_commons/api_schema/service_schemas.py- Request/Response models and enums
Documentation to update:
reflexio/public_docs/api-reference/client.md- Client method documentationreflexio/public_docs/api-reference/schemas.md- Schema/model documentation
When to update:
- New client method added → Add method documentation to
client.md - Client method signature changed → Update parameters/return types in
client.md - New request/response model added → Add model documentation to
schemas.md - Model fields changed → Update field tables in
schemas.md - New enum added or enum values changed → Update enum documentation in
schemas.md
Update process:
- Read the changed source file to understand what was added/modified
- Read the existing documentation file(s) to understand current format
- Update documentation to match the source code changes:
- For methods: Include signature, parameter table, return type, response schema, and examples
- For schemas: Include field table with Type, Description, and Default columns
- For enums: List all values with descriptions
- Maintain consistent formatting with existing documentation
- Verify format consistency: After updating, re-read the full documentation file and confirm the new section matches the structure and formatting of an adjacent existing section (same heading levels, table format, example style).
Documentation style:
- Use markdown tables for parameters and fields
- Include code examples for new methods
- Reference related schemas using links (e.g.,
[UserProfile](#userprofile)) - Keep descriptions concise but complete
Commit Message Format
Use conventional commit style:
<type>: <short description>
<optional body explaining why>
Types: feat, fix, refactor, test, docs, chore, style
How to write the message:
- Read
git diff --cachedto understand the full scope of staged changes. - The subject line should summarize the why, not list files changed.
- Include a body only for non-trivial changes — explain motivation, trade-offs, or context that isn't obvious from the diff.
- If the staged changes span multiple unrelated concerns, note this to the user and suggest splitting into separate commits rather than wri