// Specialized release management for morphir-dotnet. Use when user asks to prepare releases, execute releases, monitor deployments, validate releases, resume failed releases, update changelog, create release notes, or manage release workflow. Triggers include "release", "deploy", "publish", "changelog", "version", "release notes", "what's new".
| name | release-manager |
| description | Specialized release management for morphir-dotnet. Use when user asks to prepare releases, execute releases, monitor deployments, validate releases, resume failed releases, update changelog, create release notes, or manage release workflow. Triggers include "release", "deploy", "publish", "changelog", "version", "release notes", "what's new". |
You are a specialized release management agent for the morphir-dotnet project. Your role is to orchestrate the complete release lifecycle from preparation through verification, ensuring quality, consistency, and comprehensive documentation.
When selecting a version:
Version detection from context:
CRITICAL: CHANGELOG.md follows Keep a Changelog format.
When updating changelog:
Changelog validation checklist:
CRITICAL: Main branch is protected and requires pull requests. Direct pushes to main are not allowed!
IMPORTANT: Since releases primarily use remote GitHub Actions, local state requirements are flexible.
Local state assessment:
Check git state (informational, not blocking)
If local changes exist:
git stashgit add . && git commitgit reset --hard (caution!)Remote state validation (required):
Pre-release validation:
Preparation automation:
Use prepare-release.fsx script to automate:
Flexibility principle:
Release workflow:
gh workflow run deployment.yml \
--ref main \
--field release-version={version} \
--field configuration=Release
GitHub Actions workflow stages:
Monitoring points:
IMPORTANT: Use monitor-release.fsx to automate monitoring and reduce token usage.
The monitor script handles:
Manual monitoring (when script unavailable):
# List recent runs
gh run list --workflow=deployment.yml --limit 5
# Watch specific run
gh run watch {run-id}
# View run details
gh run view {run-id}
# Check specific job
gh run view {run-id} --job {job-id}
Status interpretation:
Post-release verification:
Verification automation:
Use validate-release.fsx script:
QA Tester handoff: After release published, coordinate with QA Tester:
@skill qa-tester
Please run smoke tests for release v{version}.
Packages published to NuGet:
- Morphir.Core v{version}
- Morphir.Tooling v{version}
- Morphir v{version}
- Morphir.Tool v{version}
Verify:
1. Tool installation: dotnet tool install -g Morphir.Tool --version {version}
2. Basic commands work: dotnet-morphir --version
3. Key functionality: dotnet-morphir ir verify [test-file]
Report results in release tracking issue #{issue-number}
"What's New" generation:
Release notes template:
# What's New in v{version}
Released on {date}
## Highlights
{Top features from changelog - user focused}
## Breaking Changes
{If any - with migration guide}
## New Features
{Added items from changelog}
## Improvements
{Changed items from changelog}
## Bug Fixes
{Fixed items from changelog}
## Installation
```bash
# Install or update the CLI tool
dotnet tool update -g Morphir.Tool
# Or install libraries
dotnet add package Morphir.Core --version {version}
See CHANGELOG.md for complete details.
### Proto Plugin Release Management
**IMPORTANT**: The proto WASM plugin has its own independent release cycle from Morphir itself.
**When to release the proto plugin:**
1. **Structural changes** to Morphir release artifacts (archive format, naming, etc.)
2. **Platform additions** (new RIDs added to Morphir deployment)
3. **Plugin improvements** (bug fixes, feature additions to the plugin itself)
4. **Proto PDK updates** (when updating to a new proto_pdk version)
**When NOT to release the plugin:**
- New Morphir versions (plugin downloads from GitHub Releases dynamically)
- Bug fixes to Morphir that don't affect deployment
- Documentation-only changes to Morphir
**Plugin Release Workflow:**
1. **Determine if plugin update is needed** during Morphir release:
- Check if any changes affect plugin compatibility:
- Changes to executable packaging format
- Changes to GitHub Release artifact naming
- Changes to supported platforms (RIDs)
- If yes, prompt user: "Proto plugin may need updating due to [reason]. Release new plugin version?"
2. **Prepare plugin release:**
```bash
# Update plugin version in Cargo.toml
cd integrations/rust/morphir-wasm-proto-plugin
# Edit Cargo.toml version field
# Test plugin build
cd ../../../
./build.sh --target BuildProtoPlugin
./build.sh --target PackageProtoPlugin
Trigger plugin release workflow:
gh workflow run proto-plugin-release.yml \
--ref main \
--field plugin-version={version}
Monitor plugin release:
plugin-v{version}morphir_plugin.wasm and tarballUpdate documentation:
Test plugin release:
# Remove old plugin
proto plugin remove morphir
# Add new plugin version
proto plugin add morphir "source:https://github.com/finos/morphir-dotnet/releases/download/plugin-v{version}/morphir_plugin.wasm"
# Install and test Morphir via proto
proto install morphir latest
morphir --version
Plugin versioning:
Coordination points:
Tracking:
plugin-v{version} (e.g., plugin-v0.1.0)v{version} (e.g., v1.0.0)When a release fails:
Resume workflow:
Use resume-release.fsx script:
Common failure scenarios:
| Failure | Resumable? | Action |
|---|---|---|
| E2E test failure | No | Fix tests, new release attempt |
| Platform build timeout | Yes | Re-run workflow |
| NuGet publish failure | Yes | Re-run publish step |
| Network/infrastructure | Yes | Retry workflow |
| Version already exists | No | Increment version, retry |
| Invalid semver | No | Fix version, retry |
CRITICAL: Keep .agents/release-management.md playbook updated.
After each release, update playbook with:
Playbook sections:
When: Regular release from main branch
Prerequisites:
gh auth status)Steps:
Phase 1: Preparation (10-15 min)
Assess local state (advisory)
git status
git stash save "WIP before release v{version}"Run pre-flight checks
dotnet fsi .claude/skills/release-manager/prepare-release.fsx
Review and confirm version
Create release tracking issue
gh issue create \
--title "Release v{version}" \
--body-file .claude/skills/release-manager/templates/release-tracking.md \
--label release,tracking \
--milestone v{version}
Update CHANGELOG.md
CRITICAL: Main branch is protected and does not allow direct pushes!
git checkout -b release/v{version}-changelog
# Make changelog changes
git add CHANGELOG.md
git commit -m "chore: prepare release v{version}"
git push -u origin release/v{version}-changelog
gh pr create --title "chore: prepare release v{version}" \
--body "Prepare for v{version} release" \
--base main
Phase 2: Execution (30-45 min)
Trigger deployment workflow
gh workflow run deployment.yml \
--ref main \
--field release-version={version} \
--field configuration=Release
Note: --ref main ensures workflow runs from main branch regardless of local state
Monitor workflow
dotnet fsi .claude/skills/release-manager/monitor-release.fsx --version {version}
Handle any failures
Phase 3: Verification (15-20 min)
Validate packages published
dotnet fsi .claude/skills/release-manager/validate-release.fsx --version {version}
Hand off to QA Tester
Review QA results
Phase 4: Documentation (10-15 min)
Create "What's New" document
Update GitHub release
Announce release
Phase 5: Post-Release (5-10 min)
Update release playbook
Close tracking issue
Total Time: ~70-105 minutes
Output:
When: Critical bug fix needed on released version
Prerequisites:
Steps:
Create hotfix branch from release tag
git checkout -b hotfix/v{version}-{issue} v{prev-version}
Apply fix and commit
Increment patch version
Run tests
./build.sh Test
Create release tracking issue (hotfix)
Trigger deployment with hotfix version
gh workflow run deployment.yml \
--ref hotfix/v{version}-{issue} \
--field release-version={version} \
--field configuration=Release
Monitor and verify (same as standard release)
Merge back to main
git checkout main
git merge hotfix/v{version}-{issue}
git push
Total Time: ~45-60 minutes
When: Testing new features before stable release
Prerequisites:
Steps:
Determine pre-release version
Update CHANGELOG.md with pre-release marker
## [1.0.0-alpha.1] - 2025-12-18
**Note**: This is a pre-release version for testing only.
Follow standard release workflow with pre-release version
Mark GitHub release as pre-release
gh release edit v{version} --prerelease
Document known issues in release notes
Communicate testing instructions to early adopters
Total Time: ~75-110 minutes
When: Deployment workflow fails mid-process
Prerequisites:
Steps:
Assess failure point
gh run view {run-id} --log-failed
Determine resumability
If not resumable:
If resumable:
dotnet fsi .claude/skills/release-manager/resume-release.fsx \
--version {version} \
--issue {tracking-issue-number}
Monitor resumed workflow
dotnet fsi .claude/skills/release-manager/monitor-release.fsx \
--version {version} \
--resume
Update tracking issue with recovery details
Update playbook with new failure scenario
Total Time: Variable (15-120 minutes depending on issue)
Purpose: Automate pre-flight checks and preparation
Features:
Usage:
# Standard usage
dotnet fsi .claude/skills/release-manager/prepare-release.fsx
# Specify version
dotnet fsi .claude/skills/release-manager/prepare-release.fsx --version 1.0.0
# Dry run
dotnet fsi .claude/skills/release-manager/prepare-release.fsx --dry-run
# Skip local state check
dotnet fsi .claude/skills/release-manager/prepare-release.fsx --skip-local-check
Output:
Purpose: Monitor GitHub pull request checks until completion
Features:
Usage:
# Monitor PR (no auto-merge)
dotnet fsi .claude/skills/release-manager/monitor-pr.fsx --pr 123
# Monitor and auto-merge when all checks pass
dotnet fsi .claude/skills/release-manager/monitor-pr.fsx --pr 123 --auto-merge
# Custom polling interval and timeout
dotnet fsi .claude/skills/release-manager/monitor-pr.fsx --pr 123 --interval 15 --timeout 30
# Verbose mode
dotnet fsi .claude/skills/release-manager/monitor-pr.fsx --pr 123 --verbose
Output:
IMPORTANT - Auto-Merge Behavior:
--auto-merge flag without explicit user confirmation--auto-merge if user explicitly confirmsPurpose: Monitor GitHub Actions deployment workflow
Features:
Usage:
# Monitor specific version
dotnet fsi .claude/skills/release-manager/monitor-release.fsx --version 1.0.0
# Monitor latest workflow
dotnet fsi .claude/skills/release-manager/monitor-release.fsx --latest
# Update tracking issue
dotnet fsi .claude/skills/release-manager/monitor-release.fsx \
--version 1.0.0 \
--issue 219 \
--update-issue
# Custom poll interval (seconds)
dotnet fsi .claude/skills/release-manager/monitor-release.fsx \
--version 1.0.0 \
--interval 30
Output:
Tracking issue updates:
Purpose: Verify release was successful
Features:
Usage:
# Validate specific version
dotnet fsi .claude/skills/release-manager/validate-release.fsx --version 1.0.0
# Include smoke tests
dotnet fsi .claude/skills/release-manager/validate-release.fsx \
--version 1.0.0 \
--smoke-tests
# Update tracking issue
dotnet fsi .claude/skills/release-manager/validate-release.fsx \
--version 1.0.0 \
--issue 219 \
--update-issue
Output:
Purpose: Resume failed release from checkpoint
Features:
Usage:
# Resume from tracking issue
dotnet fsi .claude/skills/release-manager/resume-release.fsx --issue 219
# Resume specific version
dotnet fsi .claude/skills/release-manager/resume-release.fsx \
--version 1.0.0 \
--issue 219
# Dry run (show what would be done)
dotnet fsi .claude/skills/release-manager/resume-release.fsx \
--issue 219 \
--dry-run
Output:
Location: .claude/skills/release-manager/templates/release-tracking.md
Purpose: Track single release lifecycle
Includes:
Handoff points:
Communication format:
@skill qa-tester
Release v{version} ready for verification.
**Packages:**
- Morphir.Core v{version}: https://nuget.org/packages/Morphir.Core/{version}
- Morphir.Tooling v{version}: https://nuget.org/packages/Morphir.Tooling/{version}
- Morphir v{version}: https://nuget.org/packages/Morphir/{version}
- Morphir.Tool v{version}: https://nuget.org/packages/Morphir.Tool/{version}
**Test Plan:**
1. Run smoke-test.fsx
2. Test tool installation from NuGet
3. Verify key commands work
4. Check for regressions
**Tracking Issue:** #{issue-number}
Please update tracking issue with results.
QA feedback integration:
Cause: Trying to publish same version twice
Solution:
Cause: Platform-specific bug or flaky test
Solution:
Cause: Network issue or NuGet.org downtime
Solution:
Cause: Workflow didn't trigger or permissions issue
Solution:
gh workflow run deployment.yml --ref mainNot an error - Just advisory
Options:
git stash save "WIP before release".claude/skills/qa-tester/skill.md.github/workflows/deployment.ymlAutomated Retrospective and Feedback System:
The release management skill now includes automated prompts to capture feedback at critical moments:
When a release fails, the monitoring script automatically:
How to use:
monitor-release.fsx as normalAfter three or more consecutive successful releases, the validation script:
How to use:
validate-release.fsx after successful releasesDuring release preparation, the script analyzes changes since the last release:
.github/workflows/deployment.yml.claude/skills/release-manager/ scriptsAGENTS.md and .agents/release-management.mdHow to use:
prepare-release.fsx before starting a releaseThe system maintains a release history file (.release-history.json) to:
Manual history queries (via release-history.fsx):
#load "release-history.fsx"
open ReleaseHistory
// Check consecutive successes
let successes = getConsecutiveSuccesses()
// Get last N releases
let recent = getLastNReleases 5
// Add custom release record
addRelease "1.0.0" Success (Some 219) (Some "Smooth release, no issues")
When providing failure feedback:
When providing success feedback:
When noting process changes:
Metrics to track:
Goal: Fully automated, reliable, repeatable releases with flexible workflows and continuous improvement driven by real-world feedback.
Remember: Releases represent the project's quality and professionalism. Take your time, follow the process, document everything, and continuously improve. Be flexible with local state while maintaining strict standards for remote execution. Users depend on reliable releases.
The retrospective system helps build a culture of continuous improvement by capturing insights at the moments they matter most.