Summary
release.yml paths-ignore patterns are inconsistent across the 7 auto-releasing tool repos. Six repos exclude *.md (blanket) and other content paths from release triggers; one (Blender-Developer-Tools) enumerates specific md files and does not include *.md blanket. This produces asymmetric release behavior for the same kind of change.
Surfaced during
DTD#46 canary on Home-Lab-Developer-Tools (PR #20). The canary diff was a CONTRIBUTING.md addition, fix: prefix. CI passed, merge succeeded, but Release did not fire because CONTRIBUTING.md matches paths-ignore: *.md. The same diff on Blender-Developer-Tools would auto-release because Blender's paths-ignore enumerates specific md files (README.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, ROADMAP.md) and CONTRIBUTING.md is not among them.
Current state per repo (verified 2026-04-26)
| Repo |
release.yml? |
paths-ignore content |
| CFX-Developer-Tools |
yes |
.github/**, docs/**, *.md, LICENSE, mkdocs.yml, skills/**, rules/**/*.mdc, AGENTS.md |
| Unity-Developer-Tools |
yes |
.github/**, docs/**, *.md, LICENSE, skills/**, rules/**/*.mdc, AGENTS.md, CLAUDE.md |
| Docker-Developer-Tools |
yes |
(same as Unity) |
| Home-Lab-Developer-Tools |
yes |
(same as Unity) |
| Monday-Cursor-Plugin |
yes |
(same as Unity) |
| Steam-Cursor-Plugin |
yes |
(same as Unity) |
| Blender-Developer-Tools |
yes |
.github/**, docs/**, LICENSE, README.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, ROADMAP.md |
| Mobile-App-Developer-Tools |
yes |
n/a, tag-triggered (on: push: tags: ['v*']) |
| Plaid-Developer-Tools |
yes |
n/a, tag-triggered |
| steam-mcp |
NO release.yml |
n/a |
The bugs
-
Content additions do not fire releases on 6 repos. Adding a new skill or rule to CFX/Unity/Docker/Home-Lab/Monday/Steam-Cursor does not bump VERSION or write a CHANGELOG entry because skills/** and rules/**/*.mdc are in paths-ignore. The repos' release history therefore does not reflect their actual content state. For content-first tool repos, this is anti-pattern.
-
AGENTS.md / CLAUDE.md edits do not trigger release-doc-sync. release-doc-sync@v1 rewrites CLAUDE.md's **Version:** line and ROADMAP.md's **Current:** line on every release. If a maintainer manually edits those lines (typo, forgot to use the action, etc.), no release-doc-sync run will reconcile them because the edit itself does not trigger release. CLAUDE.md **Version:** can silently drift from VERSION file.
-
Asymmetric audit trail. Blender records all CONTRIBUTING.md changes (including DTD#46-style backfills) in CHANGELOG via release-doc-sync. The 6 paths-ignored repos record only workflow / non-md / non-content changes. Same kind of change produces different audit artifacts.
-
Asymmetric Blender exclusions, narrower scope but inconsistent rationale. Blender excludes README.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, ROADMAP.md individually but does not exclude CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md. There is no obvious principle distinguishing the included from the excluded; the list reads as historical accident rather than design.
Recommendation: Option A (remove over-broad exclusions)
Bring the 6 paths-ignored repos to a narrower pattern. Remove *.md, skills/**, rules/**/*.mdc, AGENTS.md, CLAUDE.md, LICENSE from paths-ignore. Reconcile Blender's enumerated-md exclusion to the same shape. Keep only narrowly-scoped exclusions for genuinely non-product files:
.github/** (workflow / config changes do not need to fire releases of the product)
docs/** (separate site content; its own pages.yml deploy pipeline already handles it)
- Possibly
mkdocs.yml (site config, same rationale)
Rationale:
- Tool repos are content-first. Skills, rules, snippets ARE the deliverable. Adding one should bump VERSION.
- README/AGENTS/CLAUDE updates ARE substantive. They orient AI agents and human contributors and they carry standards-version markers; their state is part of the repo's release surface.
- release-doc-sync needs to fire on these edits to keep CLAUDE.md and ROADMAP.md aligned. The current paths-ignore pattern actively prevents that reconciliation.
- Version churn from typo-level edits is the cost. That cost is low; reverting a typo is also a release. Audit trail clarity is worth more than minimizing patch versions.
Alternatives considered
- Option B: keep current paths-ignore pattern, document why content does not fire releases, update Blender to match. Rejected because it doubles down on the anti-pattern and creates other follow-on problems (release-doc-sync drift, content state not reflected in release history).
- Option C: hybrid (exclude purely-ancillary docs like README, but include content like skills/rules). More complex to specify, harder to reason about, no clear line between "ancillary" and "substantive" doc.
Scope of fix
- 7 repo PRs to remove the over-broad exclusions and reconcile to a single canonical pattern (canary-then-parallel pattern; Blender + the 6 with
*.md blanket)
- 1 scaffold PR on Developer-Tools-Directory to update
scaffold/templates/release.yml.j2 to emit the corrected pattern, plus a CI regression-grep so it cannot drift back
- Verification that release-doc-sync now fires on AGENTS.md / CLAUDE.md / CONTRIBUTING.md edits in at least one consumer
- One follow-on issue per repo whose CHANGELOG history needs reconciliation (likely deferred to "ongoing maintenance" rather than backfilled, since DTD#46 squash-merge SHAs already serve as the immediate audit record)
Out of scope
- steam-mcp's missing release.yml (separate structural question)
- Mobile-App / Plaid tag-triggered model (different release strategy entirely, not a paths-ignore question)
- DTD#46 DCO backfill (in progress; will complete with current understanding under the audit-trail-via-PR-SHA model)
Estimate
~90 to 120 minutes for the 7-repo paths-ignore PRs plus scaffold update. Canary-then-parallel rollout, similar shape to DTD#41.
Summary
release.ymlpaths-ignorepatterns are inconsistent across the 7 auto-releasing tool repos. Six repos exclude*.md(blanket) and other content paths from release triggers; one (Blender-Developer-Tools) enumerates specific md files and does not include*.mdblanket. This produces asymmetric release behavior for the same kind of change.Surfaced during
DTD#46 canary on Home-Lab-Developer-Tools (PR #20). The canary diff was a CONTRIBUTING.md addition,
fix:prefix. CI passed, merge succeeded, butReleasedid not fire becauseCONTRIBUTING.mdmatchespaths-ignore: *.md. The same diff on Blender-Developer-Tools would auto-release because Blender'spaths-ignoreenumerates specific md files (README.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, ROADMAP.md) and CONTRIBUTING.md is not among them.Current state per repo (verified 2026-04-26)
paths-ignorecontent.github/**,docs/**,*.md,LICENSE,mkdocs.yml,skills/**,rules/**/*.mdc,AGENTS.md.github/**,docs/**,*.md,LICENSE,skills/**,rules/**/*.mdc,AGENTS.md,CLAUDE.md.github/**,docs/**,LICENSE,README.md,AGENTS.md,CLAUDE.md,CHANGELOG.md,ROADMAP.mdon: push: tags: ['v*'])release.ymlThe bugs
Content additions do not fire releases on 6 repos. Adding a new skill or rule to CFX/Unity/Docker/Home-Lab/Monday/Steam-Cursor does not bump VERSION or write a CHANGELOG entry because
skills/**andrules/**/*.mdcare inpaths-ignore. The repos' release history therefore does not reflect their actual content state. For content-first tool repos, this is anti-pattern.AGENTS.md / CLAUDE.md edits do not trigger release-doc-sync.
release-doc-sync@v1rewrites CLAUDE.md's**Version:**line and ROADMAP.md's**Current:**line on every release. If a maintainer manually edits those lines (typo, forgot to use the action, etc.), no release-doc-sync run will reconcile them because the edit itself does not trigger release. CLAUDE.md**Version:**can silently drift from VERSION file.Asymmetric audit trail. Blender records all CONTRIBUTING.md changes (including DTD#46-style backfills) in CHANGELOG via release-doc-sync. The 6 paths-ignored repos record only workflow / non-md / non-content changes. Same kind of change produces different audit artifacts.
Asymmetric Blender exclusions, narrower scope but inconsistent rationale. Blender excludes README.md, AGENTS.md, CLAUDE.md, CHANGELOG.md, ROADMAP.md individually but does not exclude CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md. There is no obvious principle distinguishing the included from the excluded; the list reads as historical accident rather than design.
Recommendation: Option A (remove over-broad exclusions)
Bring the 6 paths-ignored repos to a narrower pattern. Remove
*.md,skills/**,rules/**/*.mdc,AGENTS.md,CLAUDE.md,LICENSEfrompaths-ignore. Reconcile Blender's enumerated-md exclusion to the same shape. Keep only narrowly-scoped exclusions for genuinely non-product files:.github/**(workflow / config changes do not need to fire releases of the product)docs/**(separate site content; its own pages.yml deploy pipeline already handles it)mkdocs.yml(site config, same rationale)Rationale:
Alternatives considered
Scope of fix
*.mdblanket)scaffold/templates/release.yml.j2to emit the corrected pattern, plus a CI regression-grep so it cannot drift backOut of scope
Estimate
~90 to 120 minutes for the 7-repo paths-ignore PRs plus scaffold update. Canary-then-parallel rollout, similar shape to DTD#41.