Repository Change Analysis
Purpose
Analyze uncommitted changes in the repository, group them into logical commits, determine the appropriate version bump, and guide the user through committing each group cleanly.
Procedure
1. Gather All Changes
- Run
git statusto see the full list of modified, staged, deleted, and untracked files. - Run
git diffandgit diff --stagedto inspect the actual changes. - If the diff is large, review files one by one using
git diff -- <file>orgit diff --staged -- <file>.
2. Identify Logical Change Groups
Analyze the changes and group them into logical features/fixes. Each group should:
- Represent a single coherent concern (e.g., "add TUI status bar", "refactor session persistence", "fix pty leak").
- Be independently committable without breaking the build.
- Map to a conventional commit type (
feat:,fix:,refactor:,docs:,test:,chore:,ci:).
Present the proposed grouping to the user in a structured format:
## Proposed Commits ### Commit 1 — feat: <short description> - **Files:** list of files - **Rationale:** why these belong together ### Commit 2 — fix: <short description> - **Files:** list of files - **Rationale:** why these belong together ...
Wait for user confirmation before proceeding.
3. Determine Version Bump
Based on the full set of changes, determine the appropriate version bump following Semantic Versioning:
| Change Type | Version Bump | Examples |
|---|---|---|
Major (X.0.0) | Breaking changes, API removals, incompatible behavioral changes | Renaming/removing public APIs, changing config format, removing features |
Minor (x.Y.0) | New features, backward-compatible additions | New tools, new commands, new config options, new capabilities |
Patch (x.y.Z) | Bug fixes, refactors, docs, chores | Fixes, code cleanup, dependency updates, documentation |
Decision Guidelines
- If any change introduces a breaking change → major bump.
- Else if any change adds a new feature → minor bump.
- Else → patch bump.
- When in doubt, prefer the lower bump unless the user specifies otherwise.
Present the recommendation:
## Version Recommendation - **Current version:** x.y.z - **Proposed version:** x.y.z+1 (or X+1.0.0 / x.Y+1.0) - **Bump type:** major/minor/patch - **Rationale:** <brief explanation>
Wait for user confirmation before proceeding.
4. Stage and Commit Each Group
For each logical change group:
- Stage the relevant files:
git add <files>(orgit add -pfor partial staging). - Commit with a clear conventional-commit message:
bash
git commit -m "feat: short description" -m "Detailed explanation of what and why." - Verify the commit succeeded with
git log --oneline -1.
5. Update Version Numbers
If a version bump is needed:
- Check the current version:
grep '^version' shai-cli/Cargo.toml | head -1 - Update the version in all crate manifests:
shai-cli/Cargo.tomlshai-core/Cargo.tomlshai-llm/Cargo.tomlshai-macros/Cargo.toml- Also update
Cargo.lockwithcargo checkorcargo build.
- Commit the version bump:
bash
git add -A git commit -m "chore: release vX.Y.Z"
6. Final Verification
- Run
cargo fmtandcargo clippyto ensure code quality. - Run
cargo testto verify everything compiles and passes. - Show the final
git log --onelineto confirm the commit history is clean.
Guidelines
- Never commit secrets, credentials, or
.envfiles. - Always confirm the grouping and version bump with the user before committing.
- Keep commit messages under 72 characters for the subject line.
- Use the imperative mood in commit messages (e.g., "Add feature X", not "Added feature X").
- If changes are interdependent, note the order in which commits should be applied.
- If a single file contains changes belonging to multiple groups, use
git add -pto stage hunks selectively. - Do not push unless explicitly asked by the user.
- If the working tree has merge conflicts, resolve them before attempting to commit.


