Skip to content

[Phase 1] Extend cut-release.sh + release docs to cover the feature-ideation agent #873

Description

@github-actions

Story

As a release engineer for the org agent fleet,
I want have scripts/cut-release.sh recognize feature-ideation as a releasable agent with the next/ring0/ring1/stable channels, and document it in the versioning + runbook docs,
so that feature-ideation can be cut and promoted through the same canary/ring tag model as pr-review and dev-lead, so callers pin once to a channel and promotion/rollback is a single tag move.

Acceptance Criteria

  1. valid_agent in scripts/cut-release.sh accepts feature-ideation (alongside pr-review and dev-lead) and rejects unknown agents unchanged; its usage/error strings list feature-ideation.
  2. release_ref and channel_ref produce feature-ideation/vX.Y.Z and feature-ideation/<channel> correctly, and a --dry-run for feature-ideation prints the intended immutable + channel tag names without creating or pushing anything.
  3. tests/test_cut_release.bats adds cases asserting feature-ideation is accepted and that release_ref/channel_ref format its tags correctly; the full bats file passes.
  4. docs/release/versioning.md documents the feature-ideation agent: its channel set {next, ring0, ring1, stable}, and an explicit note that — unlike pr-review/dev-lead whose reusables live in this repo — feature-ideation's reusable lives in petry-projects/.github, so its release/channel tags are cut against that repo.
  5. docs/release/runbook.md extends the 'Agents covered' line and the cut/promote/rollback examples to include feature-ideation.
  6. shellcheck scripts/cut-release.sh passes with no new findings.

Tasks / Subtasks

Dev Notes

  • scripts/cut-release.sh structure: pure helpers (valid_agent, validate_version, release_ref, channel_ref) at top level (sourced by tests via a source-guard at the bottom), main() does the git tag/push. valid_agent currently matches pr-review | dev-lead only — add feature-ideation.
  • release_ref()/channel_ref() are name-agnostic (printf '%s/v%s' / printf '%s/%s'), so they already format feature-ideation tags once valid_agent allows the name.
  • CROSS-REPO WRINKLE: docs/release/versioning.md defines a 'release' as the reusable workflow PLUS the scripts it executes, moving together as one whole-repo commit — true for pr-review/dev-lead because those reusables live in THIS repo. feature-ideation's reusable lives in petry-projects/.github (see .github/workflows/feature-ideation.yml header: 'Reusable: petry-projects/.github/.github/workflows/feature-ideation-reusable.yml'), so feature-ideation's release/channel tags must be cut against petry-projects/.github, not this repo's origin. main() currently hardcodes git push origin. Suggested approach: add an optional remote/repo target (e.g. a --repo/remote arg) so feature-ideation tags push to petry-projects/.github; keep origin the default for pr-review/dev-lead. Do NOT bake the unresolved target mechanism into an AC — the dry-run (no mutation) is the testable surface here; confirm the target approach via the open question before wiring live pushes.
  • AGENTS.md 'Release channel tags & the mutable-ref exception' scopes the protective ruleset to pr-review/**, dev-lead/**. feature-ideation's channel tags live on petry-projects/.github, so the ruleset bounding them is created there (untracked prerequisite). Add a sentence to this section noting feature-ideation channel pins are the same sanctioned exception and that their ruleset lives in the public repo.
  • Testing standard: bats unit tests source cut-release.sh (source-guard prevents main() from running) and exercise only the pure helpers — keep the new cases at that level (no git-backed flow in tests, matching the existing file's note).
  • Pattern precedent: this mirrors the pr-review/dev-lead rollout in epic Initiative: Safe Release Strategy for Agentic Workflows (versioning · rings · canary) #495 (docs/initiatives/agentic-release-strategy.md) and the ci-failure-analyst generalization (open epics [Phase 1] Generalize cut-release.sh + the release standard to cover non-agent reusables #686/[Phase 2] Cut ci-failure-analyst initial release + channel tags and extend the release-channel ruleset #688).

Project Structure Notes

All touched files are in this repo: scripts/cut-release.sh, tests/test_cut_release.bats, docs/release/{versioning,runbook}.md, AGENTS.md. No new files. The only structural novelty is acknowledging an agent whose reusable lives in a different repo — captured as a documented cross-repo note rather than a structural change here.

References

  • scripts/cut-release.sh#valid_agent
  • tests/test_cut_release.bats
  • docs/release/versioning.md#what-is-versioned
  • docs/release/runbook.md#agents-covered
  • AGENTS.md#release-channel-tags--the-mutable-ref-exception
  • .github/workflows/feature-ideation.yml (header: Reusable in petry-projects/.github)

Likely target surface

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

Story prepared by the BMAD Scrum Master (Bob) for epic #872. 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