Skip to content

feat!: Reorder release notes and enhance change file validation - #15

Merged
hhvrc merged 3 commits into
masterfrom
feat/safety-first-release-notes
Oct 28, 2026
Merged

hhvrc merged 3 commits into
masterfrom
feat/safety-first-release-notes

Conversation

@hhvrc

@hhvrc hhvrc commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Reorder the GitHub Release body around what a user needs before installing: prerelease warning, headline, GitHub alerts (safety, withdrawn versions, breaking changes, upgrade requirements, notices), what is new since the previous prerelease, then the kind sections with Safety and Security first, known issues, contributors with first-time contributors, and a compare link.

Change files gain upgrade, advisories, authors and yanks fields and reject unknown keys. Notice levels become caution, warning, important and note. Lint fails a breaking change that does not tell users what to do. The PR check reports per-file findings as annotations, honours ignore_paths and fails without a change file by default. Stable releases archive consumed change files to .changes/released// and mark yanked versions in CHANGELOG.md. release.json moves to schema version 2.
This pull request introduces significant improvements to the release notes workflow, change file format, and automation for the release process. The changes focus on making safety, breaking changes, and upgrade requirements more visible to users, enhancing the structure and validation of change files, and improving the developer experience with better linting, configuration, and documentation.

Key improvements include:

  • A new, user-focused release notes structure that prioritizes safety and upgrade information.
  • A refined and validated change file format with additional fields and stricter linting.
  • Enhanced automation and configuration for PR checks and release actions.
  • Improved documentation and onboarding for contributors.

Release Notes and Change File Format Improvements

  • Release notes now start with safety, breaking changes, and upgrade requirements, followed by new changes, known issues, contributors, and a full changelog. The body is structured to prioritize what users need to know before installing, with new notice levels and improved rendering of alerts and details. (.changes/safety-first-release-notes.md, README.md, .changes/README.md, cmd/changes_readme.md)
  • The change file format now uses kind (e.g., safety, security, added, fixed), supports new fields (upgrade, advisories, authors, yanks), and enforces stricter linting for breaking changes and unknown keys. Notices use four levels: caution, warning, important, and note. (.changes/README.md, README.md, cmd/changes_readme.md)
  • Special files like _headline.md and _known-issues.md are now documented and reserved for release summaries and known issues. (README.md, .changes/README.md, cmd/changes_readme.md)

Automation, Linting, and PR Checks

  • The release tool and GitHub Action now enforce the presence of change files in PRs by default (require-changes), with the ability to ignore certain paths via ignore_paths in .changes/config.json. (README.md, action.yml)
  • Lint findings from change files are now reported as GitHub annotations in PRs for better visibility, and the linter enforces new rules for breaking changes and notice levels. (cmd/findings.go, cmd/check.go)
  • Stable releases now move consumed change files to .changes/released/<version>/ instead of deleting them, improving traceability. (README.md)

Documentation and Onboarding

  • The documentation (README.md, .changes/README.md, cmd/changes_readme.md) has been updated throughout to reflect the new change file format, notice levels, and release process, including CLI usage and configuration examples.

These changes make the release process safer, more transparent, and easier for both users and contributors to understand and participate in.

BREAKING CHANGE: info and error notice levels are gone, release.json is schema version 2, and the action's check mode now requires a change file.

Summary by CodeRabbit

  • New Features
    • Release notes now highlight safety and security updates, breaking changes, yanked versions, upgrade requirements, known issues, and changes since the previous prerelease.
    • Long release-note sections can be folded, and contributor credits and advisory links are supported.
    • Stable releases archive consumed change files instead of removing them.
  • Bug Fixes
    • Checks report change-file and release-note issues, and can skip pull requests whose changed files match configured ignore paths.
    • Breaking changes without release guidance now fail validation.
  • Documentation
    • Updated guidance covers change-file metadata, notices, validation, and release behavior.

… release notes

Reorder the GitHub Release body around what a user needs before installing:
prerelease warning, headline, GitHub alerts (safety, withdrawn versions,
breaking changes, upgrade requirements, notices), what is new since the
previous prerelease, then the kind sections with Safety and Security first,
known issues, contributors with first-time contributors, and a compare link.

Change files gain upgrade, advisories, authors and yanks fields and reject
unknown keys. Notice levels become caution, warning, important and note.
Lint fails a breaking change that does not tell users what to do. The PR
check reports per-file findings as annotations, honours ignore_paths and
fails without a change file by default. Stable releases archive consumed
change files to .changes/released/<version>/ and mark yanked versions in
CHANGELOG.md. release.json moves to schema version 2.

BREAKING CHANGE: info and error notice levels are gone, release.json is
schema version 2, and the action's check mode now requires a change file.
@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 42 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 59073438-ef88-47bb-ae81-7ffc01bf55c1
Commits

Reviewing files that changed from the base of the PR and between 61f7c45 and d12dd89.

Files selected for processing: 10
  • .changes/safety-first-release-notes.md
  • CHANGELOG.md
  • README.md
  • cmd/prerelease.go
  • cmd/release.go
  • internal/git/git.go
  • internal/release/check.go
  • internal/release/check_body_test.go
  • internal/release/check_impact_test.go
  • internal/release/check_test.go

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 922e2e8b-5923-4a5d-8e29-46bfec5c56ab
Commits

Reviewing files that changed from the base of the PR and between c6f1054 and 61f7c45.

Files selected for processing: 27
  • .changes/README.md
  • .changes/safety-first-release-notes.md
  • README.md
  • action.yml
  • cmd/changes_readme.md
  • cmd/check.go
  • cmd/findings.go
  • cmd/init.go
  • cmd/prerelease.go
  • cmd/release_flow_test.go
  • cmd/root.go
  • cmd/stable.go
  • cmd/stable_test.go
  • cmd/status.go
  • internal/changes/changes.go
  • internal/changes/extras_test.go
  • internal/changes/lint.go
  • internal/git/git.go
  • internal/git/prerelease_test.go
  • internal/release/build.go
  • internal/release/build_test.go
  • internal/release/changelog.go
  • internal/release/changelog_test.go
  • internal/release/check.go
  • internal/release/check_body_test.go
  • internal/release/check_test.go
  • internal/release/render_test.go
Files with no reviewable changes: 1
  • internal/release/check_test.go

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

This change expands change-file metadata and validation, adds findings and ignored-path handling to checks, and updates release data, notes, and changelog rendering. Stable releases now archive consumed change files. Numbered prereleases can report changes since the previous matching prerelease.

Changes: Release workflow

Layer / File(s) Summary
Change-file contracts and linting
.changes/README.md, README.md, cmd/changes_readme.md, cmd/init.go, internal/changes/*
Change files support upgrade constraints, advisories, authors, and yanked versions. Parsing validates these fields and rejects unknown frontmatter keys. The change adds known-issue reading, reserved-file handling, and lint findings for breaking, safety, and title text.
Change checks and findings
README.md, action.yml, cmd/check.go, cmd/findings.go, cmd/status.go, internal/release/check.go, internal/release/check_body_test.go, internal/release/check_test.go
Checks include structured findings and can skip a PR when all changed paths match ignore_paths. The action adds require-changes, and command output reports findings as GitHub annotations when running in GitHub Actions. Status reports known issues and lint findings without failing.
Release data and prerelease comparison
README.md, cmd/prerelease.go, internal/git/*, internal/release/build.go, internal/release/build_test.go
release.json advances to schema version 2. Release data aggregates upgrade requirements, yanks, authors, known issues, and contributor information. Prerelease processing can identify a previous matching prerelease and its intervening changes.
Release notes and changelog rendering
README.md, cmd/root.go, internal/release/changelog.go, internal/release/changelog_test.go, internal/release/render_test.go
Rendering adds ordered alerts, safety and security sections, configurable folding, prerelease notices and deltas, known issues, and contributor credits. Changelog rendering marks matching release headings as yanked.
Release execution and change-file archiving
.changes/safety-first-release-notes.md, README.md, cmd/stable.go, cmd/stable_test.go, cmd/release_flow_test.go
Stable releases lint pending changes and read release metadata before building release data. They move consumed files and an existing headline into .changes/released/<version>/, and mark yanked changelog headings. Release-flow tests cover archiving, lint failures, and prerelease deltas.

Priority: Normal

Estimated code review effort: 4 (Complex) | ~60 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant runRelease
  participant changes
  participant BuildData
  participant WriteNotes
  participant ReleaseFiles
  runRelease->>changes: lint pending files and read headline and known issues
  runRelease->>BuildData: build release data
  runRelease->>WriteNotes: render release notes
  runRelease->>ReleaseFiles: archive consumed change files and headline
Loading
Merge Risk: Minimal · previous review 61f7c

No confirmed issue currently blocks merging; complete the normal checks before release.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 37.08% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly identifies the two primary changes: release-note reordering and enhanced change-file validation.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 37.08% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 89 functions across 21 files. (5 skipped: 5 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Change file check

✅ OK: 1 valid change file(s) added in this PR.

Version impact: major bump (breaking change). The next release will be 1.0.0 (latest stable: 0.6.0).

A valid PR's comment now states the bump level of its change files and the next release version with and without it, relative to the latest stable tag. The verdict JSON carries the same data as impact.
@hhvrc
hhvrc requested a balanced review from Copilot October 28, 2026 10:42

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

@hhvrc
hhvrc merged commit 2c73312 into master Oct 28, 2026
8 checks passed
@hhvrc
hhvrc deleted the feat/safety-first-release-notes branch October 28, 2026 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants