Skip to content

[Phase 1] Generalize cut-release.sh + the release standard to cover non-agent reusables #686

Description

@github-actions

Story

As a OrganizationAdmin who cuts releases for first-party reusables,
I want use the same cut-release.sh tooling and a documented standard to version any first-party reusable, not only dev-lead/pr-review,
so that ci-failure-analyst (and future reusables) get release + channel tags through the existing, tested mechanism instead of bespoke per-workflow handling.

Acceptance Criteria

  1. scripts/cut-release.sh valid_agent accepts ci-failure-analyst in addition to pr-review and dev-lead, and the usage/error strings list the expanded set.
  2. tests/test_cut_release.bats is updated so the case currently asserting ci-failure-analyst is REJECTED instead asserts it is accepted, plus release_ref/channel_ref cases for it (e.g. ci-failure-analyst/v0.1.0, ci-failure-analyst/stable); the bats suite passes.
  3. docs/release/versioning.md is extended to state the channel/version scheme applies to all first-party reusables (keeping <name>/stable + <name>/vMAJOR.MINOR.PATCH) and adds ci-failure-analyst to the 'what is versioned' table with its reusable + key scripts.
  4. AGENTS.md section 'Release channel tags & the mutable-ref exception' is generalized so the documented exception and compliance guidance cover all first-party reusable channel tags (not only pr-review/dev-lead).
  5. The chosen channel convention (one convention for all: <name>/stable + <name>/vX.Y.Z) is stated explicitly so downstream stories and the compliance test can rely on it.
  6. shellcheck scripts/cut-release.sh passes and the script's source-guard still lets tests source the pure helpers without executing main.

Tasks / Subtasks

Dev Notes

  • CRITICAL existing-test trap: tests/test_cut_release.bats line ~28 currently asserts valid_agent ci-failure-analyst RETURNS FAILURE ('unknown agent is rejected'). Extending the script WILL break that test unless it is updated in the same PR — do not just add the agent and leave the suite red.
  • cut-release.sh is structured so pure helpers (valid_agent, validate_version, release_ref, channel_ref) are sourced by tests without running main (source-guard at the bottom). Preserve that structure; the helpers already build <agent>/vX.Y.Z and <agent>/<channel> generically, so only valid_agent needs the new name.
  • Channel convention decision (discussion open question): adopt ONE convention for all reusables — <name>/stable + <name>/vMAJOR.MINOR.PATCH — matching what versioning.md already defines. Do not invent a per-tier scheme; surface that tradeoff to humans rather than guessing.
  • This story is tooling + docs only; it does NOT cut any tag and does NOT touch the ruleset (those are admin/Phase-2). It unblocks story id 4.
  • Testing standard: shell changes are covered by tests/test_cut_release.bats (bats) and shellcheck; run both. No GitHub mutations occur here.

Project Structure Notes

Edits existing files only: scripts/cut-release.sh, tests/test_cut_release.bats, docs/release/versioning.md, AGENTS.md. No new files.

References

Likely target surface

  • scripts/cut-release.sh
  • tests/test_cut_release.bats
  • docs/release/versioning.md
  • AGENTS.md

Story prepared by the BMAD Scrum Master (Bob) for epic #684. Status: ready-for-dev.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dev-leadFor dev-lead agent pickupinitiativeEpic / initiative tracking issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions