Repository navigation
release.yml paths-ignore patterns inconsistent across ecosystem; content edits silently do not fire releases #47
Description
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/**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, 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
*.mdblanket) - 1 scaffold PR on Developer-Tools-Directory to update
scaffold/templates/release.yml.j2to 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.
Activity
TMHSDigital commentedon Apr 26, 2026
Resolved across all 7 auto-releasing tool repos plus the scaffold.
Pattern adopted: empty paths-ignore on the release.yml push trigger. Every push to main now starts the release workflow; commit message prefix decides whether release fires. Blender's workflow_dispatch trigger preserved alongside.
Canary: Home-Lab-Developer-Tools PR #21, squash b7adc86, VERSION 0.13.1 to 0.13.2.
Parallel batch (6 PRs, all squashed and auto-released):
Scaffold: Developer-Tools-Directory PR #49, squash a402b8c, VERSION 1.9.3 to 1.9.4. Generated release.yml verified clean via dry-run. Floating tags v1 and v1.9 force-updated.
Result across the ecosystem: future content additions, AGENTS.md / CLAUDE.md edits, and version-marker reconciliation now fire releases correctly. release-doc-sync rewrote CLAUDE.md
**Version:**on the 3 repos that carry that marker (Docker, Steam-Cursor, Blender) and updated CHANGELOG entries on all 7. CFX, Unity, Monday have no**Version:**marker in CLAUDE.md (CFX/Unity have no CLAUDE.md at all), so release-doc-sync was a no-op for that line on those repos; CHANGELOG entries still landed normally.No --admin merges used. All 8 PRs merged on green CI. Branch protection respected on the meta-repo scaffold PR.