chore: releases and versioning - #62
Conversation
|
🤖 Finished Review · ✅ Success · Started 11:42 AM UTC · Completed 11:59 AM UTC Commit: |
e52dae5 to
8f710e8
Compare
ReviewFindingsHigh
Medium
Low
Next steps:
Previous runReviewFindingsHigh
Medium
Low
Next steps:
Previous run (2)ReviewFindingsHigh
Medium
Low
Labels: PR adds a GitHub Actions release workflow and modifies documentation files (README, RELEASING.md, CHANGELOG.md) Next steps:
Previous run (3)ReviewReason: stale-head The review agent reviewed commit |
|
/fs-review |
|
🤖 Finished Review · ✅ Success · Started 12:01 PM UTC · Completed 12:16 PM UTC Commit: |
Phase 1: Releases and versioning. 285 commits with zero releases means users must consume @main, which is an unbounded trust grant for an action with contents:write. Add a release workflow triggered on semver tag push that runs the full test suite, creates a GitHub Release with notes extracted from CHANGELOG.md, and force-updates the moving major tag (v0 -> v0.x.y). Seed CHANGELOG.md with a 0.1.0 entry summarising current capability. Set version in pyproject.toml as the single source of truth. Rewrite RELEASING.md to document the automated tag-push flow.
Phase 1: Releases and versioning. uses: code-to-docs@main on an action that pushes commits to user branches is an unbounded trust grant. Pin the README workflow example to @v0 (the moving major tag from the release workflow) and add a Versioning section explaining the pinning options.
PR #53 (post-generation validation) is not yet merged, so it should not be listed as a v0.1.0 feature. Will be added to the changelog when the PR is merged. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8f710e8 to
f1f029e
Compare
|
🤖 Finished Review · ✅ Success · Started 2:24 PM UTC · Completed 2:39 PM UTC Commit: |
Use env: variables instead of ${{ }} interpolation in shell commands
to prevent script injection from tag names or changelog content
containing shell metacharacters. Also escape dots in awk regex for
version matching.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
🤖 Finished Review · ✅ Success · Started 2:43 PM UTC · Completed 2:58 PM UTC Commit: |
| section="Release ${version}" | ||
| fi | ||
| # Use a delimiter for multiline output | ||
| echo "body<<CHANGELOG_EOF" >> "$GITHUB_OUTPUT" |
There was a problem hiding this comment.
[low] edge-case
The static heredoc delimiter CHANGELOG_EOF used for multiline GITHUB_OUTPUT could be prematurely terminated if CHANGELOG.md contains a line that is exactly CHANGELOG_EOF. While CHANGELOG.md is maintainer-controlled content (limiting risk), GitHub's recommended practice is to use a random delimiter for multiline outputs.
Suggested fix: Use a dynamic delimiter: delimiter=$(uuidgen) or delimiter=$(openssl rand -hex 16).
| contents: write | ||
|
|
||
| jobs: | ||
| test: |
There was a problem hiding this comment.
[low] workflow-duplication
The release workflow's test job duplicates the exact same steps as ci.yaml. If test commands change, both workflows must be updated independently.
Suggested fix: Consider creating a reusable workflow that both ci.yaml and release.yml call, or rely on branch protection requiring CI to pass before tagging.
All existing workflow files use .yaml extension (ci.yaml, fullsend.yaml). Updates the reference in RELEASING.md as well. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
🤖 Finished Review · ✅ Success · Started 7:24 AM UTC · Completed 7:39 AM UTC Commit: |
|
Review skipped — this PR is already merged. The Posted by fullsend post-review check |
|
🤖 Finished Retro · ✅ Success · Started 7:40 AM UTC · Completed 7:51 AM UTC Commit: |
Retro: PR #62 — chore: releases and versioningOverviewPR #62 was a human-authored PR by Benkapner that added release infrastructure: a GitHub Actions release workflow, CHANGELOG.md, version pinning in README, and documentation updates. The review agent ran 5 times across ~20 hours, catching real security issues that the human reviewer (csoceanu) fixed. The workflow performed well overall. Timeline
What went well
Evidence for existing open issues
Autonomy assessmentThe review agent demonstrated strong competence on this PR: zero false positives, real security findings caught, correct fix detection, appropriate severity calibration. The human reviewer agreed with all high-severity findings and acted on them. The only human-exclusive finding (changelog referencing unmerged PR #53) required project-state awareness beyond the review agent's current scope. The remaining unfixed low-severity findings (heredoc delimiter, workflow duplication) were reasonable accepts. This PR supports the case for higher review agent autonomy on GitHub Actions security patterns, though the finding-persistence gap (existing issues above) would need to be addressed first. |
Summary
Adds a release process so users can pin to stable versions instead of
@main.285 commits with zero releases means every adopter is consuming
@mainon an action that holdscontents:writeand pushes commits to their branches. This is the highest-value gap in the repo.Changes
.github/workflows/release.yml): triggered on semver tag push (v*.*.*), runs the full test suite, creates a GitHub Release with notes extracted from the matching CHANGELOG section, and force-updates the moving major tag (v0->v0.x.y)0.1.0entry summarizing current capability (Keep a Changelog format)0.1.0as the single source of truth@v0instead of@main; new "Versioning" section explaining@v0vs@v0.1.0vs@mainNo runtime changes
No file under
src/is touched. Nothing about a run changes.Test plan
v0.1.0tag on a fork: produces a Release and a movingv0tag@mainreference remains in user-facing setup instructionsuv run pytest -vpasses (429 tests)uv run ruff check src/ tests/anduv run ruff format --check src/ tests/cleanDependencies
Depends on PR #53 and PR #61 being merged first (this branch is based on #61's tip).