Releases: jdx/communique
v1.1.3: Lock down read_file to tracked paths
A patch release that tightens the read_file tool sandbox to git-tracked files only, fixes OpenAI requests for GPT-5 and o-series reasoning models, and rewrites the README for end users.
Fixed
read_fileis now restricted to git-tracked paths — Previously the tool sandboxed against..traversal but allowed any path inside the working tree, including gitignored secrets like.env, build artifacts, and.git/internals. The sandbox now requires the path be tracked by git (git ls-files --error-unmatch), bringing it in line withlist_filesandgrep(which already honor.gitignore). The canonical-path check that blocks tracked symlinks resolving outside the repo is retained as defense in depth. (#133) (@jdx)- OpenAI
max_completion_tokensfor GPT-5+ and o-series models — Newer OpenAI model families reject the legacymax_tokensparameter. The OpenAI-compatible provider now detects GPT major version ≥ 5 ando*reasoning model names and sendsmax_completion_tokensfor those, while keepingmax_tokensfor older GPT-4 and arbitrary compatible endpoints. This also forward-covers futuregpt-6/o5naming. Resolves #147. (#148) (@jdx)
Changed
- README rewritten for end users — The roadmap-style README has been replaced with installation instructions (mise / Cargo / prebuilt binaries), required API tokens, and step-by-step usage for generating release notes, updating
CHANGELOG.md, and publishing GitHub Releases. Addscommunique.tomlconfiguration examples, a GitHub Actions CI snippet, common CLI options, troubleshooting, and links to the deeper guides. (#131) (@jdx)
Full Changelog: v1.1.2...v1.1.3
💚 Sponsor communique
communique is developed by @jdx at en.dev, an independent studio behind developer tools like mise, aube, hk, and more. Ongoing work on communique is funded by sponsorships.
If communique is drafting your release notes or changelogs, please consider sponsoring at en.dev. Every sponsor — individual or company — helps keep the project independent and actively maintained.
v1.1.2: Deterministic changelog updates and musl Linux builds
A patch release that makes communique generate <tag> --changelog write CHANGELOG.md deterministically — without an LLM rewrite step — and ships statically-linked musl binaries for Linux.
Added
- musl Linux release assets — Future GitHub releases now include
communique-x86_64-unknown-linux-musl.tar.gzandcommunique-aarch64-unknown-linux-musl.tar.gzalongside the existing GNU Linux, macOS, and Windows archives, giving Alpine and other musl-based distros a statically-linked option. (#127) (@jdx)
Fixed
- Deterministic placement of tagged release entries in
CHANGELOG.md— Tagged-release changelog updates no longer go through an LLM rewrite of the whole file. Instead, communique now upserts the target version section: any existing section for that version is removed and the freshly generated entry is inserted immediately after## [Unreleased]/## Unreleased. The existing version header style (bracketed vs. plain, compare links, dates) is inferred and preserved, and if the changelog is missing an[Unreleased]anchor the command fails with a clear error rather than guessing a placement. (#129) (@jdx) - Preserve section boundaries between regenerated and preserved content — Fixes a bug where updating
CHANGELOG.mdcould concatenate a preserved release section onto the previous bullet, producing malformed lines like...))## [1.0.4]. Only version-shaped##headings are now treated as release boundaries (so## Added/## Fixedcategory headings are no longer mistaken for release sections), regenerated heads and preserved tails are joined with an explicit blank line, and any pre-existing joined boundaries are repaired before writing. (#126) (@jdx)
Full Changelog: v1.1.1...v1.1.2
💚 Sponsor communique
communique is developed by @jdx at en.dev, an independent studio behind developer tools like mise, aube, hk, and more. Ongoing work on communique is funded by sponsorships.
If communique is drafting your release notes or changelogs, please consider sponsoring at en.dev. Every sponsor — individual or company — helps keep the project independent and actively maintained.
v1.1.1: Less repetitive release notes
A small patch release that stops generated release notes from saying the same thing three times, and keeps communique's own sponsor footer from compounding on workflow reruns.
Fixed
- Reserve Highlights for genuinely broad releases — The release-note system prompt and the
submit_release_notestool schema have been retightened so the model stops producing a## Highlightssection that just restates the categorized## Added/## Fixedbullets underneath it. The opening summary is now capped at 1-2 sentences, Highlights are gated on "roughly 10+ distinct user-facing changes or 4+ independent headline themes", and the prompt explicitly assigns each section a distinct job: the opening paragraph frames the release, Highlights (when present) group broad themes for skimming, and categorized sections carry the concrete PR links, authors, examples, and compatibility notes. The prompt also tells the model directly to avoid saying the same change three times. Patch and small minor releases should now skip Highlights entirely instead of padding them out. (#124) (@jdx) - Dedupe the sponsor blurb on release reruns — communique's own
release-plzworkflow appends a `
💚 Sponsor communique
communique is developed by @jdx at en.dev, an independent studio behind developer tools like mise, aube, hk, and more. Ongoing work on communique is funded by sponsorships.
If communique is drafting your release notes or changelogs, please consider sponsoring at en.dev. Every sponsor — individual or company — helps keep the project independent and actively maintained.
v1.1.0: HEAD as [Unreleased]
A small feature release that turns communique generate HEAD --changelog into a first-class way to refresh the [Unreleased] section of CHANGELOG.md without first cutting a tag.
Added
-
HEAD --changelogupdates[Unreleased]in place — Previously, runningcommunique generate HEAD --changelogwould carry the literalHEADthrough the pipeline and insert a## [HEAD]heading intoCHANGELOG.md, which is never what anyone wants. The command now treatsHEADas an intentional unreleased target end-to-end:- The existing
## [Unreleased](or## Unreleased, including linked variants like## [Unreleased](…/compare/v1.0.0...HEAD)) section body is replaced deterministically — no second LLM merge step — while the file preamble, the unreleased header text, and all released sections below are preserved exactly. - If
CHANGELOG.mddoesn't exist, it's created with# Changelog,## [Unreleased], and the generated body. - If an existing
CHANGELOG.mdhas no Unreleased header, the command fails with an actionablemiettediagnostic instead of guessing where to insert content. Multiple Unreleased sections are also rejected rather than silently corrupted. - The current
[Unreleased]content is fed into the prompt as draft material to reconcile, and the model is explicitly told not to emit a nested## [Unreleased]heading. Any## [HEAD]/## HEADheadings the model produces anyway are stripped before writing. - Prompt phrasing switches from
Generate release notes for **HEAD** (previous release: v1.0.4)toGenerate release notes for unreleased changes since v1.0.4, and the release title is normalized toUnreleased: <description>instead ofHEAD: …. communique generate HEAD --github-releasenow fails fast with a clear error —HEADis not a release tag and shouldn't be searched for or published on GitHub. Use--changeloginstead, or generate notes for a real tag.
# Refresh the [Unreleased] block from current main, no tag required: communique generate HEAD --changelogTagged-release behavior (
vX.Y.Z --changelog,vX.Y.Z --github-release, prompt phrasing, title normalization) is unchanged. (#121) (@ThomasK33) - The existing
New Contributors
- @ThomasK33 made their first contribution in #121
Full Changelog: v1.0.4...v1.1.0
💚 Sponsor communique
communique is developed by @jdx at en.dev, an independent studio behind developer tools like mise, aube, hk, and more. Ongoing work on communique is funded by sponsorships.
If communique is drafting your release notes or changelogs, please consider sponsoring at en.dev. Every sponsor — individual or company — helps keep the project independent and actively maintained.
v1.0.4: Salvaging partial submissions & a mobile banner fix
A small patch release that keeps communique generate --github-release from throwing away a whole CI run over a malformed final tool call, and tidies up the docs-site announcement banner on mobile.
Fixed
- Salvage partial
submit_release_notessubmissions — When the model callssubmit_release_noteswith malformed arguments 3 times in a row (e.g.changelogas an array instead of a string, orrelease_bodytruncated bymax_tokens), the agent no longer aborts the run. At the retry limit it now attempts a lenient parse of the most recent submission: non-string fields are coerced (arrays join with newlines, objects are JSON-stringified), missing fields are derived from what's present (changelog⇄release_body,release_titlefrom the body's first line), and only when every content field is empty does the run fail. Real-world CI runs like endevco/aube#24903381187 used to burn their entire research budget on this; they now recover automatically. (#120) (@jdx) - Better error diagnostics on unsalvageable submissions — A new
Error::MalformedSubmissionvariant uses miette'sDiagnosticto embed the received JSON via#[source_code]and aggregate per-field reasons across all attempts, so the CLI prints something likemissing 'release_body'; 'changelog' must be a string (got array)alongside the offending payload instead of the old opaquemalformed 3 times. (#120) (@jdx) - Docs announcement banner on mobile — On viewports ≤640px the banner was rendering cramped:
flex-wrap: nowrapforced the message onto two squeezed lines and the "Read more" link sat jammed against the text. The banner now switches toflex-direction: columnso the message and link stack cleanly, with a slightly smaller font, tighter line-height,text-wrap: balancefor even line breaks, and the × close button pinned flush to the top-right corner. Matches the same fix rolling out across the mise, hk, aube, pitchfork, usage, and fnox docs sites. (#119) (@jdx)
Full Changelog: v1.0.3...v1.0.4
💚 Sponsor communique
communique is developed by @jdx at en.dev, an independent studio behind developer tools like mise, aube, hk, and more. Ongoing work on communique is funded by sponsorships.
If communique is drafting your release notes or changelogs, please consider sponsoring at en.dev. Every sponsor — individual or company — helps keep the project independent and actively maintained.
v1.0.3: UTF-8 boundary fix + docs announcement banner
A patch release that fixes a panic when generating release notes against projects whose recent releases contain multi-byte characters, plus a handful of docs-site additions (announcement banner, en.dev footer, and a sponsor blurb appended to generated releases).
Fixed
- UTF-8 char boundary panic in style-reference truncation —
communique generatetruncates the body of each "recent release" example at 3072 bytes to keep the prompt compact. The slice was taken directly at byte 3072, which panics whenever that byte falls inside a multi-byte UTF-8 character — e.g. the 3-byte em-dash (—) commonly used in release notes. Running against endevco/[email protected] reliably crashed withbyte index 3072 is not a char boundary. The truncation now walks back to the nearest char boundary before slicing, and a regression test covers the case. (#113) (@jdx)
Added
- Docs announcement banner — The VitePress docs site now renders a dismissible top banner sourced from a remote JSON config, used to surface cross-site announcements (currently en.dev). Dismissals persist per banner id in
localStorage, and bumping the id re-shows the banner to everyone. AResizeObserverkeeps VitePress's--vp-layout-top-heightin sync with the banner's actual height on resize and reflow. (#109, #110, #111, #112) (@jdx) - en.dev footer on the docs site — Added via VitePress's
layout-bottomslot, matching the footer on the mise docs. (#110) (@jdx) - Sponsor blurb appended to generated GitHub Releases — The
enhance-releaseworkflow now appends a short "💚 Sponsor communique" section to each release body aftercommunique generateruns, pointing to en.dev for sponsorships. (#106) (@jdx)
Full Changelog: v1.0.2...v1.0.3
💚 Sponsor communique
communique is developed by @jdx at en.dev, an independent studio behind developer tools like mise, aube, hk, and more. Ongoing work on communique is funded by sponsorships.
If communique is drafting your release notes or changelogs, please consider sponsoring at en.dev. Every sponsor — individual or company — helps keep the project independent and actively maintained.
v1.0.2: Resilient Release Note Submissions
A small patch release that makes communique generate --github-release more resilient when the model emits a malformed final tool call.
Fixed
- Retry malformed release note submissions — When the model calls
submit_release_noteswithout all three required string fields (changelog,release_title,release_body), the agent now returns a tool error explaining which field is missing and asks the model to try again, rather than aborting the entire run. Retries are capped at 3 malformed submissions to avoid spinning, after which the command fails with a clear parse error. Previously, a single bad submission would fail the run after all the research work had already been done. (#105) (@jdx)
Full Changelog: v1.0.1...v1.0.2
v1.0.1: Default to claude-opus-4-7
A small patch release that bumps the default Anthropic model used when no model is specified via CLI or config.
Changed
- Default model bumped to
claude-opus-4-7— When no model is configured via--modelorcommunique.toml, communiqué now falls back toclaude-opus-4-7(previouslyclaude-opus-4-6). The example config insrc/config.rsand the configuration docs were updated to match. (#101) (@jdx)
Full Changelog: v1.0.0...v1.0.1
v1.0.0: Stable Release
Communiqué reaches 1.0 — marking the project as stable. This release contains no changes to communiqué's own code; it bumps key dependencies to their latest major versions and refreshes the lockfile to clear cargo audit findings.
Changed
- Updated
clxto v2 — Picks up the newProgressOutput::Quietvariant and an updatedstrumdependency from the upstream clx library. (#98) - Updated
tomlto v1 — Bumped from 0.8 through 0.9 to the stable 1.0 release. (#65, #90) - Refreshed lockfile for
cargo audit— Updated transitive dependencies includingaws-lc-rs,rustls-webpki,tokio, andrandto their latest patched versions, clearing CI audit failures. (#100) (@jdx)
Full Changelog: v0.1.9...v1.0.0
v0.1.9: Consistent release title formatting
A small patch release that fixes release title formatting inconsistencies. Previously, if the LLM returned a title like v2.18.0 (Internal CI improvements) or v2.18.0 - Internal CI improvements, the old check would pass it through unchanged because it technically started with the tag. Now, communiqué normalizes all titles to the canonical vX.Y.Z: description format and updates the system prompt to guide the LLM toward the correct format from the start.
Fixed
- Normalize release title to strict
vX.Y.Z: descriptionformat — The previous check only prepended the tag when the title didn't start with it at all. If the LLM returned a title with a non-standard separator (e.g.v2.18.0 (title)orv2.18.0 - title), it would pass through unchanged. Now any existing tag prefix with a non-standard separator is stripped and rewritten tovX.Y.Z: description. The system prompt and tool description were also updated to guide the LLM toward the correct format. (#55) (@jdx)
Full Changelog: v0.1.8...v0.1.9