Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ jobs:

- name: Write release notes
run: |
# Static template — installation + binaries.
cat > release_notes.md << 'EOF'
## Installation

Expand All @@ -196,6 +197,35 @@ jobs:
EOF
sed -i 's/^ //' release_notes.md

# Auto-generated changelog from Conventional Commits since the
# previous tag, grouped by type. Non-conventional commits are
# intentionally dropped — they should be rare (CLAUDE.md enforces
# the convention) and silence is better than a misleading row.
# Skipped entirely on the first release (no prior tag).
VERSION="${{ needs.detect-release-type.outputs.version }}"
PREV_TAG=$(git describe --tags --abbrev=0 "${VERSION}^" 2>/dev/null || echo "")
if [ -n "$PREV_TAG" ]; then
{
echo ""
echo "## What's Changed"
echo ""
for entry in "feat:Features" "fix:Bug Fixes" "perf:Performance" "refactor:Refactors" "docs:Docs" "test:Tests" "chore:Chores" "ci:CI"; do
prefix="${entry%%:*}"
heading="${entry#*:}"
lines=$(git log --pretty='format:- %s' "${PREV_TAG}..${VERSION}" | grep -E "^- ${prefix}(\(|:)" || true)
if [ -n "$lines" ]; then
echo "### ${heading}"
echo ""
printf '%s\n' "$lines"
echo ""
fi
done
echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${PREV_TAG}...${VERSION}"
} >> release_notes.md
fi
echo "----- generated release_notes.md -----"
cat release_notes.md

- name: Create Release
uses: softprops/action-gh-release@v2
with:
Expand Down
1 change: 1 addition & 0 deletions docs/HARNESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ Three regulation categories:
| Behav. | L5 destructive (real installs) | release tags, manual dispatch | `make test-destructive` |
| Behav. | curl\|bash smoke (install.sh + mock server) | every PR | `.github/workflows/test.yml` `curl-bash-smoke` job |
| Behav. | Auto-release sensor — tag + dispatch `release.yml` when unreleased commits trip a threshold (`>=5 feat/fix`, `>=7 days + new`, or any `fix:` for patch fast lane) | push to `main` | `.github/workflows/auto-release.yml` |
| Behav. | Release notes — Conventional Commits since previous tag, grouped by type (Features / Bug Fixes / etc) + Full Changelog link, appended to the install-instructions template | tag push or `workflow_dispatch` | `.github/workflows/release.yml` (`Write release notes` step) |
| Behav. | Old-CLI compat (previous release × current mock server) | every PR | `.github/workflows/test.yml` `cli-compat` job |
| Feedfwd. | Agent conventions | every AI turn | `CLAUDE.md`, `AGENTS.md` |
| Feedfwd. | Skills | model-loaded | `.claude/skills/*` |
Expand Down
Loading