Skip to content

Commit 4a1cca7

Browse files
igerberclaude
andcommitted
Fix branch name sanitization and expand secret scanning
Fixes: - P2: Branch name sanitization now removes invalid git ref chars - Removes: : ? * [ ] ^ ~ \ @{ .. - Replaces consecutive hyphens, trims edges, truncates to 50 chars - Validates with git check-ref-format --branch before use - Prompts user if validation fails - P2: Secret scan now case-insensitive with expanded patterns - Added -i flag for case-insensitive matching - Expanded patterns: api_key, api-key, secret_key, password=, bearer tokens, token=, gho_ (GitHub OAuth) - Added more sensitive file extensions: .p12, .pfx, id_rsa, id_ed25519 - Documented optional gitleaks/trufflehog integration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent ab74142 commit 4a1cca7

1 file changed

Lines changed: 21 additions & 5 deletions

File tree

.claude/commands/submit-pr.md

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,19 @@ Determine if this is a fork-based workflow:
103103
git diff --cached --stat # Staged changes
104104
git status --porcelain # All changes summary
105105
```
106-
- Slugify the PR title (if provided) or generate from changes: lowercase, replace spaces with hyphens
106+
- **Sanitize the branch name** (from title or generated):
107+
1. Lowercase the string
108+
2. Replace spaces with hyphens
109+
3. Remove invalid git ref characters: `:`, `?`, `*`, `[`, `]`, `^`, `~`, `\`, `@{`, `..`
110+
4. Replace consecutive hyphens/underscores with single hyphen
111+
5. Trim leading/trailing hyphens
112+
6. Truncate to reasonable length (50 chars max for branch name portion)
107113
- Prefix based on change type: `feature/`, `fix/`, `refactor/`, `docs/`
114+
- **Validate with git**:
115+
```bash
116+
git check-ref-format --branch "<branch-name>"
117+
```
118+
- If validation fails, prompt user for a valid branch name
108119
- If no diff output and no title provided, prompt user for branch name
109120
- **Create and switch to the new branch BEFORE staging**:
110121
```bash
@@ -123,13 +134,18 @@ Determine if this is a fork-based workflow:
123134
```
124135

125136
2. **Secret scanning check** (AFTER staging to catch all files):
126-
- **Run deterministic pattern check**:
137+
- **Run deterministic pattern check** (case-insensitive with expanded patterns):
138+
```bash
139+
git diff --cached | grep -iE "(AKIA[A-Z0-9]{16}|ghp_[a-zA-Z0-9]{36}|sk-[a-zA-Z0-9]{48}|gho_[a-zA-Z0-9]{36}|api[_-]?key\s*[=:]|secret[_-]?key\s*[=:]|password\s*[=:]|private[_-]?key|bearer\s+[a-zA-Z0-9_-]+|token\s*[=:])" || true
140+
```
141+
- **Check for sensitive file names** (case-insensitive):
127142
```bash
128-
git diff --cached | grep -E "(AKIA[A-Z0-9]{16}|ghp_[a-zA-Z0-9]{36}|sk-[a-zA-Z0-9]{48}|API_KEY=|SECRET=|PASSWORD=|PRIVATE_KEY)" || true
143+
git diff --cached --name-only | grep -iE "(\.env|credentials|secret|\.pem|\.key|\.p12|\.pfx|id_rsa|id_ed25519)$" || true
129144
```
130-
- **Check for sensitive file names**:
145+
- **Optional**: For more thorough scanning, use dedicated tools if available:
131146
```bash
132-
git diff --cached --name-only | grep -E "(\.env|credentials|secret|\.pem|\.key)$" || true
147+
# gitleaks detect --staged --no-git # If gitleaks installed
148+
# trufflehog git file://. --only-verified --fail # If trufflehog installed
133149
```
134150
- Pay special attention to newly added files:
135151
```bash

0 commit comments

Comments
 (0)