Skip to content

release.yml paths-ignore patterns inconsistent across ecosystem; content edits silently do not fire releases #47

@TMHSDigital

Description

@TMHSDigital

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions