--- name: jj-commit path: .jj disable-model-invocation: true description: "Commit the current Jujutsu change. Use when asked to commit or record work in a jj repository without pushing." --- # Jj Commit Use Jujutsu when `jj root` succeeds. Preserve unrelated work and use jj-native commands. ## Procedure 1. Inspect `jj status`, `jj diff --stat`, and the complete diff. 2. Stop on unresolved conflicts. 3. Stop if there is no change to commit. 4. Read relevant untracked files before deciding whether they belong. Exclude generated files, caches, secrets, and unrelated work. 5. Split unrelated changes when safe; otherwise ask before rewriting or selecting content. 6. Run obvious fast checks and every repository-required gate. Report expensive or unclear checks that were not run. 7. Commit the current change without pushing. 8. Report the change ID, commit ID, subject, checks, and remaining workspace state. ## Non-interactive - jj commands must never open an editor. - `jj squash`: pass `--use-description` to keep the destination subject, or `-m ""` when both sides have descriptions. - `jj commit` and `jj describe`: always pass `-m`. - `jj split`: pass `-m` for the selected side, then `describe` the remainder. - If a command would still prompt, abort and report instead of opening an editor. ## Commit messages - Use a short, concrete subject without a final period. - Prefer `add`, `fix`, `update`, `remove`, `replace`, `track`, `show`, or `rework`. - Use `type(scope): summary` when natural: `feat`, `fix`, `docs`, `chore`, `refactor`, `test`, `perf`, `build`, or `ci`. - Use a domain prefix such as `ui:`, `db:`, `cli:`, or `docs:` when clearer; start the text after a prefix lowercase. - Use a body only when rationale or non-obvious constraints matter. - Preserve relevant work-item identifiers supplied by the user or repository policy. - Add no AI attribution or trailers.