--- name: git-checkpoint-commit description: Use when a coding task finishes a verified bug fix, key feature, risky refactor checkpoint, local backup commit, checkpoint commit, 提交备份, 本地提交, or when an active session has accumulated about five meaningful edit rounds and should create a scoped local git commit without pushing. --- # Git Checkpoint Commit ## Overview Use this skill to keep a local git backup loop during active development. The goal is to commit verified, task-scoped progress at meaningful checkpoints without mixing unrelated user changes or pushing remotely. ## Trigger Rules Create a local checkpoint commit when any condition is true: - A bug fix is implemented and the targeted regression check passes. - A key feature slice is implemented and the smallest relevant verification passes. - A risky refactor reaches a behavior-preserving checkpoint. - The current session has reached about five meaningful edit rounds since the last commit. - The user asks for `提交`, `本地提交`, `备份`, `checkpoint`, `commit`, or `形成提交循环`. Do not use this skill when the user explicitly says not to commit, when the change is exploratory and unverified, or when the only available commit would include unrelated dirty files. ## Workflow 1. Inspect the working tree with `git status --short`. 2. Identify files or hunks owned by the current task. 3. Run the smallest relevant verification first. - In X-Financial, run backend tests inside `x-financial-main` when backend code is involved. - Use targeted frontend tests/builds for web-only changes. 4. Commit only the task-owned files. 5. Report the commit hash and verification evidence. 6. Reset the session edit counter to zero after a successful checkpoint. ## Safety Rules - Never commit unrelated user changes just to make the tree clean. - Never push as part of this skill. - Never rewrite history, amend old commits, or run destructive git commands. - If the same file contains unrelated hunks, split the staging carefully with `git add -p` or a narrower manual patch. - If the index already contains staged changes, inspect them first; do not mix them into a checkpoint unless they belong to the same current task. - If verification cannot run, say why in the commit body or final report and prefer a `chore(checkpoint)` message rather than a confident `fix` or `feat`. ## Commit Style Use normal semantic messages for completed, verified work: - `fix(workbench): keep application preview after draft save failure` - `feat(reimbursements): add attachment association job polling` - `refactor(claims): split draft flow serialization` Use checkpoint messages for interim backup points: - `chore(checkpoint): backup attachment association flow` - `chore(checkpoint): backup after five edit rounds` Keep the subject concise. Add body lines only when the verification state or scope needs clarity. ## Helper Script Use `scripts/checkpoint_commit.py` when a path-scoped local commit is enough: ```bash python3 .codex/skills/git-checkpoint-commit/scripts/checkpoint_commit.py \ --message "chore(checkpoint): backup workbench AI flow" \ web/src/composables/workbenchAiMode/useWorkbenchAiExpenseFlow.js \ web/tests/workbench-ai-mode-switch.test.mjs ``` Preview before committing: ```bash python3 .codex/skills/git-checkpoint-commit/scripts/checkpoint_commit.py \ --dry-run \ web/src/utils/expenseApplicationPreview.js ``` The script refuses to commit the whole tree unless `--allow-all` is passed. Use `--allow-all` only when the current task truly owns every dirty file. ## Common Mistakes - Mistaking backup for verification. Verify first, then commit. - Staging `.` in a dirty worktree. Stage explicit paths or hunks. - Combining documentation cleanup, feature work, and unrelated local edits in one checkpoint. - Continuing indefinitely after multiple verified slices. Commit once the counter reaches five meaningful edit rounds.