--- description: Add footer with breaking changes and issue references to commit message --- # Operation: Add Footer Add a properly formatted footer to commit message with breaking changes, issue references, and other metadata. ## Parameters from $ARGUMENTS **Optional (at least one required):** - `breaking:` - Breaking change description - `closes:` - Comma-separated issue numbers to close - `fixes:` - Comma-separated issue numbers to fix - `refs:` - Comma-separated issue numbers to reference - `reviewed:` - Reviewer name(s) - `signed:` - Signed-off-by name and email **Format:** `footer breaking:"API changed" closes:123,456` ## Workflow ### Step 1: Parse Parameters Extract parameters from $ARGUMENTS: ```bash # Parse footer components breaking=$(echo "$ARGUMENTS" | grep -oP 'breaking:"\K[^"]+') closes=$(echo "$ARGUMENTS" | grep -oP 'closes:\K[0-9,]+') fixes=$(echo "$ARGUMENTS" | grep -oP 'fixes:\K[0-9,]+') refs=$(echo "$ARGUMENTS" | grep -oP 'refs:\K[0-9,]+') reviewed=$(echo "$ARGUMENTS" | grep -oP 'reviewed:"\K[^"]+') signed=$(echo "$ARGUMENTS" | grep -oP 'signed:"\K[^"]+') ``` ### Step 2: Validate Parameters **Check at least one parameter provided:** ```bash if [ -z "$breaking" ] && [ -z "$closes" ] && [ -z "$fixes" ] && [ -z "$refs" ] && [ -z "$reviewed" ] && [ -z "$signed" ]; then echo "ERROR: At least one footer parameter is required" echo "Usage: footer [breaking:\"\"] [closes:] [fixes:] [refs:]" exit 1 fi ``` ### Step 3: Invoke Footer Builder Script Pass parameters to the utility script for proper formatting: ```bash # Prepare JSON input cat < VALIDATION: ─────────────────────────────────────────────── ✓ Blank line before footer ✓ BREAKING CHANGE format correct ✓ Issue references valid ✓ Proper formatting COMPONENTS: ─────────────────────────────────────────────── Breaking Changes: Issues Closed: X Issues Fixed: X References: X Signed-off: ═══════════════════════════════════════════════ ``` ## Output Format Return structured output: - Formatted footer text - Validation results - Component breakdown - Suggestions (if any) ## Error Handling **No parameters provided:** ``` ERROR: At least one footer parameter is required Usage: footer [breaking:""] [closes:] [fixes:] Example: footer breaking:"authentication API changed" closes:123 ``` **Invalid issue number format:** ``` ERROR: Invalid issue number format Expected: closes:123 or closes:123,456 Received: closes:abc ``` **Missing breaking change description:** ``` ERROR: breaking parameter requires description Usage: footer breaking:"" Example: footer breaking:"API endpoint /auth removed" ``` ## Footer Format Rules **Order of Elements:** ``` BREAKING CHANGE: Closes # Fixes # Refs # Reviewed-by: Signed-off-by: ``` **Breaking Changes:** - Always use `BREAKING CHANGE:` (uppercase, singular) - Provide clear description - Can also use `!` in subject: `feat!: change API` **Issue References:** - Use `Closes #123` for issues closed by this commit - Use `Fixes #123` for bugs fixed by this commit - Use `Refs #123` for related issues - Multiple issues: `Closes #123, #456` **Metadata:** - `Reviewed-by:` for code review - `Signed-off-by:` for DCO compliance - Custom trailers as needed ## Integration with Agent The commit-assistant agent uses this operation to: 1. Add breaking change notices 2. Link commits to issues 3. Add review metadata 4. Ensure proper footer formatting ## Usage Examples ### Example 1: Breaking Change ```bash # Input /message-generation footer breaking:"authentication API endpoint changed from /login to /auth/login" # Output FOOTER: BREAKING CHANGE: authentication API endpoint changed from /login to /auth/login ``` ### Example 2: Close Issues ```bash # Input /message-generation footer closes:123,456,789 # Output FOOTER: Closes #123, #456, #789 ``` ### Example 3: Fix and Close ```bash # Input /message-generation footer fixes:42 closes:100 # Output FOOTER: Fixes #42 Closes #100 ``` ### Example 4: Complete Footer ```bash # Input /message-generation footer breaking:"remove deprecated API" closes:200 signed:"John Doe " # Output FOOTER: BREAKING CHANGE: remove deprecated API Closes #200 Signed-off-by: John Doe ``` ### Example 5: Multiple Issue Fixes ```bash # Input /message-generation footer fixes:10,20,30 refs:100 # Output FOOTER: Fixes #10, #20, #30 Refs #100 ``` ## Best Practices **Breaking Changes:** - ✅ "BREAKING CHANGE: API endpoint changed" - ❌ "Breaking change: api endpoint changed" - ✅ Clear description of what broke - ❌ Vague "things changed" **Issue References:** - ✅ "Closes #123" (actually closes) - ❌ "Closes #123" (just mentions) - ✅ "Refs #100" (related) - ❌ "See issue 100" **Issue Linking Semantics:** - `Closes` - Pull request or feature complete - `Fixes` - Bug fix - `Refs` - Related but not closed - `Resolves` - Alternative to Closes ## When to Include a Footer **Include footer when:** - Breaking changes introduced - Closes or fixes issues - Multiple reviewers - DCO/signing required - Related work references **Omit footer when:** - No breaking changes - No issue tracking - No special metadata - Simple standalone commit ## Breaking Change Detection **Patterns that indicate breaking changes:** - API endpoint changes - Function signature changes - Removed features - Changed behavior - Dependency major version bumps - Configuration format changes **How to communicate breaking changes:** ``` BREAKING CHANGE: ``` **Alternative notation:** ``` feat!: change API endpoint # The ! indicates breaking change ``` ## Footer Templates **Feature with Issue:** ``` Closes # ``` **Bug Fix:** ``` Fixes # ``` **Breaking Change with Migration:** ``` BREAKING CHANGE: Migration: Closes # ``` **Multiple Issues:** ``` Fixes #, # Closes # Refs # ``` **Signed Commit:** ``` Reviewed-by: Signed-off-by: ``` ## GitHub/GitLab Integration **GitHub Keywords (auto-close issues):** - Closes, Closed, Close - Fixes, Fixed, Fix - Resolves, Resolved, Resolve **GitLab Keywords:** - Closes, Closed, Close (same as GitHub) - Fixes, Fixed, Fix - Resolves, Resolved, Resolve - Implements, Implemented, Implement **Format:** ``` Closes #123 # Same repository Closes user/repo#123 # Different repository Closes https://github.com/... # Full URL ``` ## Footer Validation **Valid footer format:** ``` ✓ Blank line before footer ✓ BREAKING CHANGE in capitals ✓ Issue numbers have # prefix ✓ Proper token format (Closes, Fixes, etc.) ✓ Valid email in Signed-off-by ``` **Invalid footer format:** ``` ✗ No blank line before footer ✗ "Breaking change:" (lowercase) ✗ "Closes 123" (missing #) ✗ "Resolves issue 123" (wrong format) ✗ Invalid email format ```