v0.26.0
[0.26.0] - 2026-06-10
🚀 Features
-
(app) Propagate remote_metadata policy + report cliff degrade - (a465871) by @bchatard
withEnvDerivations now carries the top-level remote_metadata policy onto the
changelog/release-notes drivers so the pipeline generators honour it. CheckCliff
gains the policy (applied to a driver copy, never mutating the caller's) and
returns whether it degraded to --offline; heraut check surfaces that in the
cliff detail line (valid → valid (offline — remote metadata unavailable)).
Part of T78.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(cmd) Add --offline flag forcing remote_metadata: disabled - (2dffbe0) by @bchatard
Persistent --offline flag overrides the configured remote_metadata policy to
disabled for a single run (no remote PR/MR metadata API calls). Wired into
release, changelog, and the check / check cliff commands via applyOfflineOverride
after config load. Part of T78.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(config) Add remote_metadata policy field + validation - (b9a467c) by @bchatard
Top-level remote_metadata governs whether content generators fetch PR/MR
metadata (author handle, PR number) from the platform API to enrich
changelog/release-notes: required | optional | disabled, empty resolving to
optional. Enum-validated. A programmatic ContentDriver.RemoteMetadata field
carries the effective policy onto each driver for the generator to honour
(set by the app layer, mirroring HeadingVersionPattern). Part of T78.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(config) Add remote_metadata to schema.json + sample + fixtures - (7aa259f) by @bchatard
Expose the remote_metadata enum (required | optional | disabled, default
optional) in schema.json for IDE validation, document it in docs/heraut.sample.yml,
and add valid + invalid schema fixtures (the invalid one asserts the enum is
enforced). Keeps the schema/sample/field in sync per the config rules. Part of T78.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(generators/gitcliff) Honor remote_metadata policy via --offline - (e14c020) by @bchatard
git-cliff fetches PR metadata (and panics on failure) whenever the templates
reference commit.remote.*. Route Generate and CheckCliff through a policy-aware
runCliff: 'disabled' always passes --offline; 'required' never does (a remote
failure stays fatal); 'optional' (default) tries online then retries with
--offline on any failure, exposing Degraded() so callers can warn. If the
offline retry also fails the original online error surfaces, so a genuine
config error still bubbles up. Part of T78.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(pipeline) Surface remote-metadata degrade as a step sub-result - (7c682e1) by @bchatard
When a generator falls back to --offline because the remote metadata fetch
failed (remote_metadata: optional), the changelog/release-notes step now carries
a 'remote metadata unavailable — PR authors/numbers omitted' sub-result, so the
omission is visible during release/changelog runs. Generators report it via an
optional Degraded() interface the pipeline type-asserts, keeping the pipeline
decoupled from the concrete generator. Part of T78.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
📚 Documentation
-
(adr) Add ADR-0023 remote-metadata policy; complete roadmap T78 - (fb22f0a) by @bchatard
Record the remote_metadata decision (top-level tri-state, default optional,
backed by git-cliff --offline, retry-on-failure for optional, --offline flag) and
its reconciliation with ADR-0022. Index it in the ADR README and flip T78 to done
with a completion note.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(adr) Record why the CLI override is boolean --offline (ADR-0023) - (e93cb06) by @bchatard
Capture the decision to keep --offline as a boolean escape hatch rather than a
--remote-metadata mirror of the config key (git-cliff precedent + heraut's
runtime-flag convention + YAGNI), so it is not re-litigated later.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
-
(roadmap) Add T78 — remote_metadata policy for git-cliff enrichment - (9680617) by @bchatard
Captures the durable opt-out for git-cliff's remote-metadata fetch: a
top-level tri-state policy (required | optional | disabled, default optional)
governing both changelog and release-notes generation, backed by git-cliff's
--offline flag. The optional default degrades + warns on fetch failure, fixing
the tokenless-panic residual out of the box. Follows the ci: GITHUB_TOKEN patch
that authenticates the fetch in CI.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
⚙️ Miscellaneous Tasks
-
Authenticate git-cliff GitHub API calls in release workflow - (cc8f128) by @bchatard
heraut's changelog/release-notes generation shells out to git-cliff, which
fetches PR metadata from the GitHub API to populate commit.remote.username and
commit.remote.pr_number. git-cliff reads GITHUB_TOKEN, not GH_TOKEN (which only
gh/glab consume), so the Preflight and Release steps were calling the API
unauthenticated — hitting GitHub's 60/hr shared-IP rate limit and panicking with
a 403 (exit 101). Export GITHUB_TOKEN to both steps so the calls authenticate
against the 1000/hr limit.Co-Authored-By:Claude Opus 4.8 noreply@anthropic.com
Commit Statistics
- 10 commit(s) contributed to the release.
- 0 day(s) passed between the first and last commit.
- 10 commit(s) parsed as conventional.
- 0 linked issue(s) detected in commits.