Commit Message Preparation
TEXT# Git Commit Guidelines for AI Language Models ## Core Principles 1. **Follow Conventional Commits** (https://www.conventionalcommits.org/) 2. **Be concise and precise** - No flowery language, superlatives, or unnecessary adjectives 3. **Focus on WHAT changed, not HOW it works** - Describe the change, not implementation details 4. **One logical change per commit** - Split related but independent changes into separate commits 5. **Write in imperative mood** - "Add feature" not "Added feature" or "Adds feature" 6. **Always include body text** - Never use subject-only commits ## Commit Message Structure ``` <type>(<scope>): <subject> <body> <footer> ``` ### Type (Required) - `feat`: New feature - `fix`: Bug fix - `refactor`: Code change that neither fixes a bug nor adds a feature - `perf`: Performance improvement - `style`: Code style changes (formatting, missing semicolons, etc.) - `test`: Adding or updating tests - `docs`: Documentation changes - `build`: Build system or external dependencies (npm, gradle, Xcode, SPM) - `ci`: CI/CD pipeline changes - `chore`: Routine tasks (gitignore, config files, maintenance) - `revert`: Revert a previous commit ### Scope (Optional but Recommended) Indicates the area of change: `auth`, `ui`, `api`, `db`, `i18n`, `analytics`, etc. ### Subject (Required) - **Max 50 characters** - **Lowercase first letter** (unless it's a proper noun) - **No period at the end** - **Imperative mood**: "add" not "added" or "adds" - **Be specific**: "add email validation" not "add validation" ### Body (Required) - **Always include body text** - Minimum 1 sentence - **Explain WHAT changed and WHY** - Provide context - **Wrap at 72 characters** - **Separate from subject with blank line** - **Use bullet points for multiple changes** (use `-` or `*`) - **Reference issue numbers** if applicable - **Mention specific classes/functions/files when relevant** ### Footer (Optional) - **Breaking changes**: `BREAKING CHANGE: <description>` - **Issue references**: `Closes #123`, `Fixes #456` - **Co-authors**: `Co-Authored-By: Name <email>` ## Banned Words & Phrases **NEVER use these words** (they're vague, subjective, or exaggerated): ❌ Comprehensive ❌ Robust ❌ Enhanced ❌ Improved (unless you specify what metric improved) ❌ Optimized (unless you specify what metric improved) ❌ Better ❌ Awesome ❌ Great ❌ Amazing ❌ Powerful ❌ Seamless ❌ Elegant ❌ Clean ❌ Modern ❌ Advanced ## Good vs Bad Examples ### ❌ BAD (No body) ``` feat(auth): add email/password login ``` **Problems:** - No body text - Doesn't explain what was actually implemented ### ❌ BAD (Vague body) ``` feat: Add awesome new login feature This commit adds a powerful new login system with robust authentication and enhanced security features. The implementation is clean and modern. ``` **Problems:** - Subjective adjectives (awesome, powerful, robust, enhanced, clean, modern) - Doesn't specify what was added - Body describes quality, not functionality ### ✅ GOOD ``` feat(auth): add email/password login with Firebase Implement login flow using Firebase Authentication. Users can now sign in with email and password. Includes client-side email validation and error handling for network failures and invalid credentials. ``` **Why it's good:** - Specific technology mentioned (Firebase) - Clear scope (auth) - Body describes what functionality was added - Explains what error handling covers --- ### ❌ BAD (No body) ``` fix(auth): prevent login button double-tap ``` **Problems:** - No body text explaining the fix ### ✅ GOOD ``` fix(auth): prevent login button double-tap Disable login button after first tap to prevent duplicate authentication requests when user taps multiple times quickly. Button re-enables after authentication completes or fails. ``` **Why it's good:** - Imperative mood - Specific problem described - Body explains both the issue and solution approach --- ### ❌ BAD ``` refactor(auth): extract helper functions Make code better and more maintainable by extracting functions. ``` **Problems:** - Subjective (better, maintainable) - Not specific about which functions ### ✅ GOOD ``` refactor(auth): extract helper functions to static struct methods Convert private functions randomNonceString and sha256 into static methods of AppleSignInHelper struct for better code organization and namespacing. ``` **Why it's good:** - Specific change described - Mentions exact function names - Body explains reasoning and new structure --- ### ❌ BAD ``` feat(i18n): add localization ``` **Problems:** - No body - Too vague ### ✅ GOOD ``` feat(i18n): add English and Turkish translations for login screen Create String Catalog with translations for login UI elements, alerts, and authentication errors in English and Turkish. Covers all user-facing strings in LoginView, LoginViewController, and AuthService. ``` **Why it's good:** - Specific languages mentioned - Clear scope (i18n) - Body lists what was translated and which files --- ## Multi-File Commit Guidelines ### When to Split Commits Split changes into separate commits when: 1. **Different logical concerns** - ✅ Commit 1: Add function - ✅ Commit 2: Add tests for function 2. **Different scopes** - ✅ Commit 1: `feat(ui): add button component` - ✅ Commit 2: `feat(api): add endpoint for button action` 3. **Different types** - ✅ Commit 1: `feat(auth): add login form` - ✅ Commit 2: `refactor(auth): extract validation logic` ### When to Combine Commits Combine changes in one commit when: 1. **Tightly coupled changes** - ✅ Adding a function and its usage in the same component 2. **Atomic change** - ✅ Refactoring function name across multiple files 3. **Breaking without each other** - ✅ Adding interface and its implementation together ## File-Level Commit Strategy ### Example: LoginView Changes If LoginView has 2 independent changes: **Change 1:** Refactor stack view structure **Change 2:** Add loading indicator **Split into 2 commits:** ``` refactor(ui): extract content stack view as property in login view Change inline stack view initialization to property-based approach for better code organization and reusability. Moves stack view definition from setupUI method to lazy property. ``` ``` feat(ui): add loading state with activity indicator to login view Add loading indicator overlay and setLoading method to disable user interaction and dim content during authentication. Content alpha reduces to 0.5 when loading. ``` ## Localization-Specific Guidelines ### ✅ GOOD ``` feat(i18n): add English and Turkish translations Create String Catalog (Localizable.xcstrings) with English and Turkish translations for all login screen strings, error messages, and alerts. ``` ``` build(i18n): add Turkish localization support Add Turkish language to project localizations and enable String Catalog generation (SWIFT_EMIT_LOC_STRINGS) in build settings for Debug and Release configurations. ``` ``` feat(i18n): localize login view UI elements Replace hardcoded strings with NSLocalizedString in LoginView for title, subtitle, labels, placeholders, and button titles. All user-facing text now supports localization. ``` ### ❌ BAD ``` feat: Add comprehensive multi-language support Add awesome localization system to the app. ``` ``` feat: Add translations ``` ## Breaking Changes When introducing breaking changes: ``` feat(api): change authentication response structure Authentication endpoint now returns user object in 'data' field instead of root level. This allows for additional metadata in the response. BREAKING CHANGE: Update all API consumers to access response.data.user instead of response.user. Migration guide: - Before: const user = response.user - After: const user = response.data.user ``` ## Commit Ordering When preparing multiple commits, order them logically: 1. **Dependencies first**: Add libraries/configs before usage 2. **Foundation before features**: Models before views 3. **Build before source**: Build configs before code changes 4. **Utilities before consumers**: Helpers before components that use them ### Example Order: ``` 1. build(auth): add Sign in with Apple entitlement Add entitlements file with Sign in with Apple capability for enabling Apple ID authentication. 2. feat(auth): add Apple Sign-In cryptographic helpers Add utility functions for generating random nonce and SHA256 hashing required for Apple Sign-In authentication flow. 3. feat(auth): add Apple Sign-In authentication to AuthService Add signInWithApple method to AuthService protocol and implementation. Uses OAuthProvider credential with idToken and nonce for Firebase authentication. 4. feat(auth): add Apple Sign-In flow to login view model Implement loginWithApple method in LoginViewModel to handle Apple authentication with idToken, nonce, and fullName. 5. feat(auth): implement Apple Sign-In authorization flow Add ASAuthorizationController delegate methods to handle Apple Sign-In authorization, credential validation, and error handling. ``` ## Special Cases ### Configuration Files ``` chore: ignore GoogleService-Info.plist from version control Add GoogleService-Info.plist to .gitignore to prevent committing Firebase configuration with API keys. ``` ``` build: update iOS deployment target to 15.0 Change minimum iOS version from 14.0 to 15.0 to support async/await syntax in authentication flows. ``` ``` ci: add GitHub Actions workflow for testing Add workflow to run unit tests on pull requests. Runs on macOS latest with Xcode 15. ``` ### Documentation ``` docs: add API authentication guide Document Firebase Authentication setup process, including Google Sign-In and Apple Sign-In configuration steps. ``` ``` docs: update README with installation steps Add SPM dependency installation instructions and Firebase setup guide. ``` ### Refactoring ``` refactor(auth): convert helper functions to static struct methods Wrap Apple Sign-In helper functions in AppleSignInHelper struct with static methods for better code organization and namespacing. Converts randomNonceString and sha256 from private functions to static methods. ``` ``` refactor(ui): extract email validation to separate method Move email validation regex logic from loginWithEmail to isValidEmail method for reusability and testability. ``` ### Performance **Specify the improvement:** ❌ `perf: optimize login` ✅ ``` perf(auth): reduce login request time from 2s to 500ms Add request caching for Firebase configuration to avoid repeated network calls. Configuration is now cached after first retrieval. ``` ## Body Text Requirements **Minimum requirements for body text:** 1. **At least 1-2 complete sentences** 2. **Describe WHAT was changed specifically** 3. **Explain WHY the change was needed (when not obvious)** 4. **Mention affected components/files when relevant** 5. **Include technical details that aren't obvious from subject** ### Good Body Examples: ``` Add loading indicator overlay and setLoading method to disable user interaction and dim content during authentication. ``` ``` Update signInWithApple method to accept fullName parameter and use appleCredential for proper user profile creation in Firebase. ``` ``` Replace hardcoded strings with NSLocalizedString in LoginView for title, labels, placeholders, and buttons. All UI text now supports English and Turkish translations. ``` ### Bad Body Examples: ❌ `Add feature.` (too vague) ❌ `Updated files.` (doesn't explain what) ❌ `Bug fix.` (doesn't explain which bug) ❌ `Refactoring.` (doesn't explain what was refactored) ## Template for AI Models When an AI model is asked to create commits: ``` 1. Read git diff to understand ALL changes 2. Group changes by logical concern 3. Order commits by dependency 4. For each commit: - Choose appropriate type and scope - Write specific, concise subject (max 50 chars) - Write detailed body (minimum 1-2 sentences, required) - Use imperative mood - Avoid banned words - Focus on WHAT changed and WHY 5. Output format: ## Commit [N] **Title:** ``` type(scope): subject ``` **Description:** ``` Body text explaining what changed and why. Mention specific components, classes, or methods affected. Provide context. ``` **Files to add:** ```bash git add path/to/file ``` ``` ## Final Checklist Before suggesting a commit, verify: - [ ] Type is correct (feat/fix/refactor/etc.) - [ ] Scope is specific and meaningful - [ ] Subject is imperative mood - [ ] Subject is ≤50 characters - [ ] **Body text is present (required)** - [ ] **Body has at least 1-2 complete sentences** - [ ] Body explains WHAT and WHY - [ ] No banned words used - [ ] No subjective adjectives - [ ] Specific about WHAT changed - [ ] Mentions affected components/files - [ ] One logical change per commit - [ ] Files grouped correctly --- ## Example Commit Message (Complete) ``` feat(auth): add email validation to login form Implement client-side email validation using regex pattern before sending authentication request. Validates format matches standard email pattern ([email protected]) and displays error message for invalid inputs. Prevents unnecessary Firebase API calls for malformed emails. ``` **What makes this good:** - Clear type and scope - Specific subject - Body explains what validation does - Body explains why it's needed - Mentions the benefit (prevents API calls) - No banned words - Imperative mood throughout --- **Remember:** A good commit message should allow someone to understand the change without looking at the diff. Be specific, be concise, be objective, and always include meaningful body text.
Overview
Commit Message Preparation is a free prompt on OpenRuna. A curated prompt on OpenRuna for builders using ChatGPT, Claude, and Cursor.
What this prompt does
"Commit Message Preparation" is designed to help you get reliable results from AI assistants for real prompt tasks. A curated prompt on OpenRuna for builders using ChatGPT, Claude, and Cursor. It is catalogued in OpenRuna's resource graph so you can discover related prompts, tools, agents, and datasets in one place. Copy the content directly into ChatGPT, Claude, Gemini, or Cursor — or use it as a system prompt / skill instruction where applicable.
Use cases
- Use "Commit Message Preparation" when you need a repeatable prompt for professional workflows without writing instructions from scratch each time.
- Adapt this prompt for team onboarding — paste into Claude or ChatGPT and iterate on the output with your project context.
- Combine with related tools and prompts in the same OpenRuna category to build a full stack for your use case.
- Reference during code review or planning sessions when you want consistent AI-assisted quality bars.
Example output
When you run this prompt, expect structured output similar to: # Git Commit Guidelines for AI Language Models ## Core Principles 1. **Follow Conventional Commits** (https://www.conventionalcommits.org/) 2. **Be concise and precise** - No flowery language, superlatives, or unnecessary adjectives 3. **Focus on WHAT changed, not HOW it works** - Describe the change, not implementation details 4. **One logical change per commit** - Split related but independent changes into separate commits 5. **Write in imperative mood** - "Add feature" not "Added feature" or "Adds feature" 6. **Always include body text** - Never use subject-only commits ## Commit Message… Outputs vary by model and temperature; treat the first response as a draft and refine with follow-up prompts.
Tips by platform
Claude
In Claude, paste the full prompt as the first user message or add it to Project instructions. Ask Claude to confirm assumptions before executing. For long prompts, use Claude's artifact panel to iterate on structured output.
ChatGPT
In ChatGPT, start a new chat and paste this prompt verbatim. Enable GPT-4o or your preferred model for coding tasks. Use follow-ups like "apply this to [your context]" for best results.
Cursor
In Cursor, add key instructions from this prompt to .cursorrules or a SKILL.md file. Reference it in Agent mode with @ mentions. Keep the original title in comments so teammates can find it on OpenRuna.
Frequently asked questions
- What is "Commit Message Preparation"?
- It is a prompt listed on OpenRuna — A curated prompt on OpenRuna for builders using ChatGPT, Claude, and Cursor. You can copy and adapt it for ChatGPT, Claude, Cursor, or other AI tools.
- Is this prompt free to use?
- Most OpenRuna resources are open or CC0-licensed. Check the license on this page before commercial use. Premium collections are clearly marked.
- How do I get the best results?
- Replace any template variables, add your project context, and ask the model to confirm assumptions. Iterate in 2–3 follow-up turns rather than expecting a perfect first response.
- Can I use this with Claude and ChatGPT?
- Yes. The prompt is model-agnostic text. Tips on this page cover Claude, ChatGPT, and Cursor specifically.
- Where can I find related resources?
- Scroll to Related resources on this page or browse the category hub on OpenRuna to find connected prompts, tools, and agents in the same topic area.
Related resources
- Tool
v0 Prompts and Tools — ReadFile
Reads file contents intelligently - returns complete files when small, paginated chunks, or targeted chunks when large based on your query. **How it works:** • **Small files** (≤2000 lines) - Returns complete content • **Large files** (>2000 lines) - Uses AI to find and return relevant chunks based on query • **Binary files** - Returns images, handles blob content appropriately • Any lines longer than 2000 characters are truncated for readability • Start line and end line can be provided to rea
- Tool
v0 Prompts and Tools — LSRepo
Lists files and directories in the repository. Returns file paths sorted alphabetically with optional pattern-based filtering. Common use cases: • Explore repository structure and understand project layout • Find files in specific directories (e.g., 'src/', 'components/') • Locate configuration files, documentation, or specific file types • Get overview of available files before diving into specific areas Tips: • Use specific paths to narrow down results (max 200 entries returned) • Combine wi
- Tool
Traycer AI — grep_search
Fast text-based regex search that finds exact pattern matches within files or directories, utilizing the ripgrep command for efficient searching. Results will be formatted in the style of ripgrep and can be configured to include line numbers and content. To avoid overwhelming output, the results are capped at 50 matches. Use the include patterns to filter the search scope by file type or specific paths. This is best for finding exact text matches or regex patterns. More precise than codebase sea
- Tool
Trae — search_codebase
This tool is Trae's context engine. It: 1. Takes in a natural language description of the code you are looking for; 2. Uses a proprietary retrieval/embedding model suite that produces the highest-quality recall of relevant code snippets from across the codebase; 3. Maintains a real-time index of the codebase, so the results are always up-to-date and reflects the current state of the codebase; 4. Can retrieve across different programming languages; 5. Only reflects the current state of the codeba
- Tool
Trae — todo_write
Use this tool to create and manage a structured task list for your current coding session. This helps you track progress, organize complex tasks, and demonstrate thoroughness to the user. It also helps the user understand the progress of the task and overall progress of their requests.
- Tool
Same.dev — task_agent
Launches a highly capable task agent in the USER's workspace. Usage notes: 1. When the agent is done, it will return a report of its actions. This report is also visible to USER, so you don't have to repeat any overlapping information. 2. Each agent invocation is stateless and doesn't have access to your chat history with USER. You will not be able to send additional messages to the agent, nor will the agent be able to communicate with you outside of its final report. Therefore, your prompt shou
- Tool
Replit — shell_command_application_feedback_tool
This tool allows you to execute interactive shell commands and ask questions about the output or behavior of CLI applications or interactive Python programs. ## Rules of usage: 1. Provide clear, concise interactive commands to execute and specific questions about the results or interaction. 2. Ask one question at a time about the interactive behavior or output. 3. Focus on interactive functionality, user input/output, and real-time behavior. 4. Specify the exact command to run, including any ne
- Tool
Replit — str_replace_editor
Custom editing tool for viewing, creating and editing files * State is persistent across command calls and discussions with the user * If `path` is a file, `view` displays the result of applying `cat -n`. If `path` is a directory, `view` lists non-hidden files and directories up to 2 levels deep * The `create` command cannot be used if the specified `path` already exists as a file * If a `command` generates a long output, it will be truncated and marked with `<response clipped>` * The `undo_edi
