oh-my-customcode 0.128.0 → 0.129.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -2334,7 +2334,7 @@ var init_package = __esm(() => {
2334
2334
  workspaces: [
2335
2335
  "packages/*"
2336
2336
  ],
2337
- version: "0.128.0",
2337
+ version: "0.129.0",
2338
2338
  description: "Batteries-included agent harness for Claude Code",
2339
2339
  type: "module",
2340
2340
  bin: {
package/dist/index.js CHANGED
@@ -2014,7 +2014,7 @@ var package_default = {
2014
2014
  workspaces: [
2015
2015
  "packages/*"
2016
2016
  ],
2017
- version: "0.128.0",
2017
+ version: "0.129.0",
2018
2018
  description: "Batteries-included agent harness for Claude Code",
2019
2019
  type: "module",
2020
2020
  bin: {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "0.128.0",
6
+ "version": "0.129.0",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -3,7 +3,7 @@ name: omcustom-release-notes
3
3
  description: Generate structured release notes from git history and closed issues within Claude Code session
4
4
  scope: harness
5
5
  user-invocable: true
6
- argument-hint: "<version> [--previous-tag <tag>]"
6
+ argument-hint: "<version> [--previous-tag <tag>] | --backfill <range>"
7
7
  ---
8
8
 
9
9
  # Release Notes Generator
@@ -19,6 +19,7 @@ Replaces the CI-based `release-notes.yml` workflow that previously used Claude A
19
19
  ```
20
20
  /omcustom-release-notes 0.36.0
21
21
  /omcustom-release-notes 0.36.0 --previous-tag v0.35.3
22
+ /omcustom-release-notes --backfill v0.36.0..v0.127.0
22
23
  ```
23
24
 
24
25
  ## Workflow
@@ -137,6 +138,56 @@ Behavior:
137
138
 
138
139
  This is **optional** — the skill's release-notes generation (Phases 1-4) works independently. Phase 5 only ensures CHANGELOG consistency for projects that maintain Keep a Changelog format.
139
140
 
141
+ ## Backfill Mode
142
+
143
+ For projects with historical CHANGELOG.md gaps (releases shipped without `[Unreleased]` promotion), the skill provides a deterministic batch backfill.
144
+
145
+ ### Usage
146
+
147
+ ```bash
148
+ python3 scripts/backfill_changelog.py <START_TAG>..<END_TAG> [--output FILE]
149
+ ```
150
+
151
+ Or invoked via skill: `/omcustom-release-notes --backfill v0.36.0..v0.127.0`
152
+
153
+ ### Behavior
154
+
155
+ For each tag in range (in reverse semver order), the script:
156
+
157
+ 1. Determines previous tag (semver-immediately-before)
158
+ 2. Reads `git log <prev>..<tag> --pretty=%s --no-merges` to extract commit subjects
159
+ 3. Maps Conventional Commits prefix to Keep a Changelog category:
160
+ - `feat` → Added
161
+ - `fix` → Fixed
162
+ - `security` → Security
163
+ - `perf`, `refactor`, `chore`, `build`, `deps`, `revert` → Changed
164
+ - `docs`, `test`, `ci`, `style` → SKIPPED (internal-only, unless `!` breaking marker)
165
+ - Non-conventional → Changed (full subject as message)
166
+ 4. Special handling for `release:` / `chore(release):` commits — extracts description after version (e.g., `release: v0.127.0 — DESC` → DESC under Changed)
167
+ 5. Extracts issue refs (`#NNN`) and appends as `(#1, #2)` suffix
168
+ 6. Renders per-version section with categories sorted: Added, Changed, Fixed, Security, Removed, Deprecated
169
+ 7. Empty sections (zero qualifying commits) render as `_No user-visible changes (internal only)._`
170
+
171
+ ### Output
172
+
173
+ Markdown text suitable for prepending to CHANGELOG.md between `## [Unreleased]` and the first existing version section.
174
+
175
+ ### When to Use
176
+
177
+ - Adopting Keep a Changelog format on an existing project with N historical releases
178
+ - Recovering after a CHANGELOG drift period
179
+ - One-time bulk operation — afterward, use Phase 5 promotion (forward-looking) for ongoing maintenance
180
+
181
+ ### Limitations
182
+
183
+ - Only as good as commit message quality. Squash-merge release commits typically contain only the PR title — backfill produces 1-2 lines per version, not exhaustive change lists
184
+ - Non-conventional or pre-Conventional Commits adoption commits land in Changed
185
+ - Manual curation may improve specific entries; the script provides the baseline
186
+
187
+ ### Tests
188
+
189
+ `tests/scripts/test_backfill_changelog.py` covers parser correctness, semver sorting, category mapping, edge cases (40 tests).
190
+
140
191
  ## Integration
141
192
 
142
193
  This skill is designed to be used during the release process:
@@ -155,6 +206,7 @@ mgr-gitnerd: gh release create -> create release with notes
155
206
  - Resource count changes auto-detected from CLAUDE.md history
156
207
  - Phase 5 promotion is idempotent — safe to re-run; skips if `## [VERSION]` exists
157
208
  - See `CONTRIBUTING.md` for [Unreleased] entry guidance during PR authoring
209
+ - For one-time historical backfill, see Backfill Mode above (script: `scripts/backfill_changelog.py`)
158
210
 
159
211
  ## Permission Mode
160
212
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.128.0",
2
+ "version": "0.129.0",
3
3
  "lastUpdated": "2026-04-24T07:30:00.000Z",
4
4
  "omcustomMinClaudeCode": "2.1.121",
5
5
  "omcustomMinClaudeCodeReason": "Sensitive-path direct Write/Edit on .claude/** under bypassPermissions (R010 deprecation, #1101)",