# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). A `### Breaking` section is used in addition to Keep a Changelog's standard sections to explicitly document changes that are backwards-incompatible but would otherwise appear under `### Changed`. Entries under `### Breaking` trigger a major version bump in automated release recommendation logic. ## [Unreleased] ### Breaking ### Added - Added changelog gate validation to `decorate-pr` action for enforcing changelog updates on qualifying code changes. - Changelog gate modes: `strict` (fails job on violation) and `soft` (warns via PR comment). - Docs-only PR exemption with customizable glob patterns for documentation files. - PR label-based exemptions for changelog gate (example: `skip-changelog`). - Precise diff parsing: validates only added lines within the Unreleased section. - Gate decision outputs: `gate-passed`, `docs-only`, `unreleased-additions-count`, `gate-failure-reason` for reuse downstream. - Integrated remediation guidance in PR comments showing how to add changelog entries. ### Changed - Refactored `internal/vociferate` to use a constructor-backed service with injected filesystem, environment, and git dependencies while preserving the existing package-level API. - Hardened `prepare-release` validation to enforce formatting checks, module hygiene, `gosec`, and `govulncheck` before preparing a release. - Added matching local validation targets in `justfile` for formatting, module hygiene, tests, and security checks. - `decorate-pr` now reads Unreleased changelog content through the `vociferate` Go CLI instead of maintaining separate shell parsing logic in the composite action. - `publish` now extracts tagged release notes through the `vociferate` Go CLI instead of duplicating changelog section parsing in shell. - Composite actions now share a centralized `run-vociferate` orchestration flow, with binary-versus-source execution delegated through shared composite actions and single-use runtime/download logic folded back into `run-vociferate.binary`. - `run-vociferate/binary` and `run-vociferate/code` are now nested under `run-vociferate/` so callers reference them as `./run-vociferate/binary` and `./run-vociferate/code`. ### Removed ### Fixed - Fixed `decorate-pr/action.yml` YAML validation by extracting PR comment rendering into `decorate-pr/build-comment.sh`, removing the duplicated changelog extraction step, and correcting the gate failure output reference. - Fixed docs-only detection in `decorate-pr` changelog gate: file list was iterated in a piped subshell so `docs_only` never propagated to the parent scope; replaced pipe with process substitution. ## [1.0.2] - 2026-03-21 ### Breaking ### Added ### Changed - Documented release/PR-decoration preflight token and API-access checks, including `GITHUB_TOKEN`/`GITEA_TOKEN` behavior for self-hosted Gitea. ### Removed ### Fixed ## [1.0.1] - 2026-03-21 ### Breaking ### Added ### Changed ### Removed ### Fixed - Enforced explicit `https://` changelog reference links in prepare output for browser-safe markdown links. ## [1.0.0] - 2026-03-21 ### Breaking ### Added ### Changed - Canonical changelog filename is now `CHANGELOG.md`, and action/code defaults were updated to match. - README now uses `Æther` stylization in prose and corrects released-tag guidance wording. ### Removed ### Fixed ## [0.2.0] - 2026-03-21 ### Breaking ### Added - Added a project LICENSE file. - Root and prepare actions now read `${{ vars.VOCIFERATE_REPOSITORY_URL }}` and forward it to `VOCIFERATE_REPOSITORY_URL` for repository URL override. - Added a published `coverage-badge` composite action for generating and uploading coverage report/badge artefacts for reuse across repositories. - Added `AGENTS.md`, an explicit integration guide for agentic coding partners using vociferate composite actions. ### Changed - Push validation now handles coverage artefact and badge generation in a dedicated `coverage-badge` job, with release recommendation isolated in a separate dependent job. - Push validation now calls the reusable `./coverage-badge` composite action for coverage badge generation and publication. ### Removed ### Fixed - Browser-facing URLs emitted in generated changelog links, workflow summaries, and markdown now use explicit `https://` forms. - Release workflows now collect summary markdown into portable temp files and print it in explicit `Summary` steps instead of relying on unsupported `GITHUB_STEP_SUMMARY` output. - Prepare now recreates the standard `Unreleased` section headers after promoting notes into a tagged release entry. - First-release recommendation remains `v1.0.0` when no prior releases exist in the changelog. - Do Release smoke validation now expects `--recommend` to fail on tagged release checkouts where `Unreleased` is intentionally empty. - Changelog reference links now use compare URLs (`previous...current` for releases and `latest...main` for Unreleased), with first release links comparing from the repository's first commit short hash. - Repository URL derivation now supports `VOCIFERATE_REPOSITORY_URL` as the highest-priority base-URL override for changelog link generation. ## [0.1.0] - 2026-03-20 ### Changed - README workflow badges now link to the latest workflow run pages instead of the workflow definition pages. ### Fixed - Publish action falls back to `git describe` when `inputs.version` is empty and `GITHUB_REF` is not a tag ref, resolving `workflow_call` input propagation failures in act runner v0.3.0. ### Added - Coverage badge in README linked to S3-hosted main-branch report. - S3 coverage artefact publishing (HTML report, badge, JSON summary) in push validation pipeline. - CLI tests and internal helper tests raising total coverage to 84%. - Test suite isolation against ambient CI environment variables for changelog link generation tests. - Go CLI for changelog-driven release preparation and semantic version recommendation. - Version recommendation from changelog release headings, including first-release support (`0.0.0` base -> `v1.0.0`). - Automatic `release-version` creation/update during release preparation. - Configurable version source/parsing via `--version-file` and `--version-pattern`. - Configurable changelog path via `--changelog`. - Recommended-version fallback when `version` is omitted in CLI and action flows. - Major-version recommendation trigger from `Unreleased` `### Breaking`. - Root composite action (`action.yml`) for recommend/prepare flows. - Subdirectory composite actions: `prepare/action.yml` (prepare/commit/tag/push) and `publish/action.yml` (extract notes/create-or-update release). - `publish` outputs for downstream automation: `release-id`, `tag`, and `version`. - Dual execution mode for actions: `go run` from source on `@main`, prebuilt binaries on tagged refs. - Repository-scoped binary cache keys with workflow-defined fixed token support via `VOCIFERATE_CACHE_TOKEN`. - Tag-driven release publication with idempotent release updates and asset replacement on reruns. - Release artifacts for `linux/amd64`, `linux/arm64`, and `checksums.txt`. - Reusable Gitea workflows (`prepare-release.yml`, `do-release.yml`) with `workflow_call` support. - Project/automation rename from `releaseprep` to `vociferate` (entrypoint, package paths, outputs). - README guidance focused on primary cross-repository reuse workflows. [Unreleased]: https://git.hrafn.xyz/aether/vociferate/compare/v1.0.2...main [1.0.2]: https://git.hrafn.xyz/aether/vociferate/compare/v1.0.1...v1.0.2 [1.0.1]: https://git.hrafn.xyz/aether/vociferate/compare/v1.0.0...v1.0.1 [1.0.0]: https://git.hrafn.xyz/aether/vociferate/compare/v0.2.0...v1.0.0 [0.2.0]: https://git.hrafn.xyz/aether/vociferate/compare/v0.1.0...v0.2.0 [0.1.0]: https://git.hrafn.xyz/aether/vociferate/compare/2060af6...v0.1.0