Commit b017c2d
feat(ci): enhance release changelog with author grouping and first-time contributors (#1039)
## Summary
- **Group commits by author** with commit counts (e.g., "Gage Krumbach
(18)"), sorted by contribution count
- **Add "First-Time Contributors" section** with 🎉 emoji to celebrate
new contributors
- **Use Python** for reliable parsing of commit data with special
characters
- **Fix `--before` bug**: resolve tag to ISO date since `git log
--before` requires a date, not a ref name — passing a tag name silently
returns wrong results, causing incorrect first-timer detection
## Example Output (v0.0.34)
### Before (flat list):
```
- fix(frontend): resolve agent response buffering (#991) (de50276)
- fix(frontend): export chat handles compacted MESSAGES_SNAPSHOT events (#1010) (b204abd)
- fix(frontend): binary file download corruption (#996) (5b584f8)
...
```
### After (grouped by author):
```
## 🎉 First-Time Contributors
- Derek Higgins
- Pete Savage
- Rahul Shetty
### Gage Krumbach (5)
- fix(runner): improve ACP MCP tools (#1006) (26be0f9)
- chore(manifests): scale up frontend replicas (#1008) (b331da1)
...
### Pete Savage (1)
- fix(frontend): resolve agent response buffering (#991) (de50276)
```
## Bug Fix: `--before` with tag names
`git log --before=v0.0.33` does **not** filter by the tag's date — it
resolves differently and returns commits from after the tag. This caused
first-timer detection to produce wrong results. Fixed by resolving the
tag to its ISO date first:
```python
tag_date = subprocess.run(
['git', 'log', '-1', '--format=%ci', latest_tag],
capture_output=True, text=True
).stdout.strip()
```
## Test Plan
- [x] Verified `--before=<tag>` vs `--before=<date>` returns different
results
- [x] Tested changelog generation locally against v0.0.33→v0.0.34 and
v0.0.34→v0.0.35
- [x] Confirmed first-time contributor detection works correctly with
date-based filtering
- [x] YAML validates (`check-yaml` hook passes)
- [ ] Will validate in next production release
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>1 parent c69a397 commit b017c2d
1 file changed
+74
-16
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
108 | 109 | | |
109 | | - | |
110 | | - | |
111 | | - | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
112 | 170 | | |
113 | 171 | | |
114 | 172 | | |
| |||
0 commit comments