Skip to content

Releases: jdx/communique

v1.1.3: Lock down read_file to tracked paths

06 May 18:53
@jdx jdx
Immutable release. Only release title and notes can be modified.
aa72842

Choose a tag to compare

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_file is 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 with list_files and grep (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_tokens for GPT-5+ and o-series models — Newer OpenAI model families reject the legacy max_tokens parameter. The OpenAI-compatible provider now detects GPT major version ≥ 5 and o* reasoning model names and sends max_completion_tokens for those, while keeping max_tokens for older GPT-4 and arbitrary compatible endpoints. This also forward-covers future gpt-6 / o5 naming. 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. Adds communique.toml configuration 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

26 Apr 15:23
@jdx jdx
Immutable release. Only release title and notes can be modified.
998dff7

Choose a tag to compare

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.gz and communique-aarch64-unknown-linux-musl.tar.gz alongside 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.md could 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 / ## Fixed category 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

26 Apr 14:00
@jdx jdx
Immutable release. Only release title and notes can be modified.
895878d

Choose a tag to compare

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_notes tool schema have been retightened so the model stops producing a ## Highlights section that just restates the categorized ## Added / ## Fixed bullets 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-plz workflow 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]

26 Apr 13:05
@jdx jdx
Immutable release. Only release title and notes can be modified.
1533cee

Choose a tag to compare

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 --changelog updates [Unreleased] in place — Previously, running communique generate HEAD --changelog would carry the literal HEAD through the pipeline and insert a ## [HEAD] heading into CHANGELOG.md, which is never what anyone wants. The command now treats HEAD as 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.md doesn't exist, it's created with # Changelog, ## [Unreleased], and the generated body.
    • If an existing CHANGELOG.md has no Unreleased header, the command fails with an actionable miette diagnostic 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] / ## HEAD headings the model produces anyway are stripped before writing.
    • Prompt phrasing switches from Generate release notes for **HEAD** (previous release: v1.0.4) to Generate release notes for unreleased changes since v1.0.4, and the release title is normalized to Unreleased: <description> instead of HEAD: ….
    • communique generate HEAD --github-release now fails fast with a clear error — HEAD is not a release tag and shouldn't be searched for or published on GitHub. Use --changelog instead, or generate notes for a real tag.
    # Refresh the [Unreleased] block from current main, no tag required:
    communique generate HEAD --changelog

    Tagged-release behavior (vX.Y.Z --changelog, vX.Y.Z --github-release, prompt phrasing, title normalization) is unchanged. (#121) (@ThomasK33)

New Contributors

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

24 Apr 20:37
@jdx jdx
Immutable release. Only release title and notes can be modified.
f76d790

Choose a tag to compare

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_notes submissions — When the model calls submit_release_notes with malformed arguments 3 times in a row (e.g. changelog as an array instead of a string, or release_body truncated by max_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 (changelogrelease_body, release_title from 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::MalformedSubmission variant uses miette's Diagnostic to embed the received JSON via #[source_code] and aggregate per-field reasons across all attempts, so the CLI prints something like missing 'release_body'; 'changelog' must be a string (got array) alongside the offending payload instead of the old opaque malformed 3 times. (#120) (@jdx)
  • Docs announcement banner on mobile — On viewports ≤640px the banner was rendering cramped: flex-wrap: nowrap forced the message onto two squeezed lines and the "Read more" link sat jammed against the text. The banner now switches to flex-direction: column so the message and link stack cleanly, with a slightly smaller font, tighter line-height, text-wrap: balance for 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

23 Apr 20:48
@jdx jdx
Immutable release. Only release title and notes can be modified.
8c2d1d5

Choose a tag to compare

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 truncationcommunique generate truncates 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 with byte 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. A ResizeObserver keeps VitePress's --vp-layout-top-height in 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-bottom slot, matching the footer on the mise docs. (#110) (@jdx)
  • Sponsor blurb appended to generated GitHub Releases — The enhance-release workflow now appends a short "💚 Sponsor communique" section to each release body after communique generate runs, 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

21 Apr 04:15
@jdx jdx
Immutable release. Only release title and notes can be modified.
e82e22c

Choose a tag to compare

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_notes without 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

20 Apr 02:25
@jdx jdx
Immutable release. Only release title and notes can be modified.
7957d3f

Choose a tag to compare

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 --model or communique.toml, communiqué now falls back to claude-opus-4-7 (previously claude-opus-4-6). The example config in src/config.rs and the configuration docs were updated to match. (#101) (@jdx)

Full Changelog: v1.0.0...v1.0.1

v1.0.0: Stable Release

19 Apr 03:36
@jdx jdx
Immutable release. Only release title and notes can be modified.
b663f13

Choose a tag to compare

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 clx to v2 — Picks up the new ProgressOutput::Quiet variant and an updated strum dependency from the upstream clx library. (#98)
  • Updated toml to v1 — Bumped from 0.8 through 0.9 to the stable 1.0 release. (#65, #90)
  • Refreshed lockfile for cargo audit — Updated transitive dependencies including aws-lc-rs, rustls-webpki, tokio, and rand to 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

02 Mar 09:52
@jdx jdx
Immutable release. Only release title and notes can be modified.
bad004b

Choose a tag to compare

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: description format — 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) or v2.18.0 - title), it would pass through unchanged. Now any existing tag prefix with a non-standard separator is stripped and rewritten to vX.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