Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jdx/communique
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.0.2
Choose a base ref
...
head repository: jdx/communique
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.0.3
Choose a head ref
  • 8 commits
  • 12 files changed
  • 3 contributors

Commits on Apr 23, 2026

  1. fix(deps): bump rustls-webpki to 0.103.13 (RUSTSEC-2026-0104) (#107)

    ## Summary
    - Bump `rustls-webpki` 0.103.12 → 0.103.13 in `Cargo.lock` to address
    [RUSTSEC-2026-0104](https://rustsec.org/advisories/RUSTSEC-2026-0104)
    (reachable panic in certificate revocation list parsing), flagged by
    `cargo audit` in CI.
    
    ## Test plan
    - [x] `cargo build` succeeds
    - [ ] `cargo audit` passes in CI
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low code-change risk since this is a lockfile-only dependency bump,
    but it affects TLS certificate validation behavior and should be
    verified in CI to avoid unexpected runtime differences.
    > 
    > **Overview**
    > Updates `Cargo.lock` to bump `rustls-webpki` from `0.103.12` to
    `0.103.13` (checksum updated) to pick up the security fix referenced by
    `RUSTSEC-2026-0104`.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    28c6a88. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    536b3d5 View commit details
    Browse the repository at this point in the history
  2. chore(release): append en.dev sponsor blurb to release notes (#106)

    ## Summary
    
    - Appends a **Sponsor communique** section to every GitHub Release body,
    run after `communique generate` in the `enhance-release` job in
    [`.github/workflows/release-plz.yml`](.github/workflows/release-plz.yml).
    - Same pattern as [mise#9272](jdx/mise#9272),
    adapted for communique.
    
    ## What it looks like
    
    Rendered at the bottom of each release body:
    
    > ## 💚 Sponsor communique
    >
    > communique is developed by [@jdx](https://github.com/jdx) at
    [**en.dev**](https://en.dev), an independent studio behind developer
    tools like [mise](https://mise.jdx.dev/), [aube](https://aube.en.dev/),
    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](https://en.dev). Every sponsor —
    individual or company — helps keep the project independent and actively
    maintained.
    
    ## Test plan
    
    - [x] \`actionlint\` + \`yamllint\` pass on the modified workflow
    - [ ] Next tagged release produces a GitHub Release whose body ends with
    the sponsor section
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Low code risk, but it changes release automation to rewrite GitHub
    release bodies; mistakes could overwrite or misformat published release
    notes for new tags.
    > 
    > **Overview**
    > After `communique generate` runs in the `enhance-release` GitHub
    Actions job, the workflow now fetches the current GitHub release body
    for the new tag, appends a **“Sponsor communique”** section, and updates
    the release notes via `gh release edit`.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    ab79012. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    1585680 View commit details
    Browse the repository at this point in the history
  3. docs: add cross-site announcement banner (#109)

    ## Summary
    - Adds `docs/.vitepress/theme/banner.ts` + `banner.css` — a small module
    that fetches banner config from `https://jdx.dev/banner.json` and
    renders a dismissible announcement bar at the top of the docs
    - Wires it in by extending `DefaultTheme` with an `enhanceApp` hook
    - Dismissals persist per banner id in `localStorage`; bumping the id in
    the source JSON re-shows it to everyone
    
    Used to announce en.dev, and any future cross-site announcements.
    
    ## Test plan
    - [ ] Run docs dev server, confirm banner appears at top of page
    - [ ] Click the \u00d7 \u2014 banner disappears and stays dismissed
    across reloads
    - [ ] Clear localStorage `jdx-banner-dismissed`, reload \u2014 banner
    returns
    
    \U0001F916 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Adds client-side runtime code to the docs site that fetches remote
    JSON and injects DOM/CSS, which could affect layout/availability if the
    endpoint is slow/unavailable or serves unexpected content.
    > 
    > **Overview**
    > Adds a dismissible, fixed top announcement banner to the VitePress
    docs theme, driven by a remote `https://jdx.dev/banner.json` config and
    persisted per-banner via `localStorage`.
    > 
    > Wires the banner initialization into the theme’s `enhanceApp` hook and
    adjusts layout by setting/clearing `--vp-layout-top-height` based on the
    rendered banner height.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    2c70cbc. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    eb49d11 View commit details
    Browse the repository at this point in the history
  4. docs: polish banner + add en.dev footer (#110)

    Follow-ups to #109 that landed after the merge, plus the en.dev footer.
    
    ## Summary
    ### Banner polish
    - **Contrast**: switch to dark text on the pink brand bg (white text
    failed contrast)
    - **z-index**: bump to 1001 so the banner stays above the site's nav
    - **Centering**: message + link centered; dismiss button pinned to the
    right via absolute positioning
    - **Analytics**: drop `rel=noreferrer` so en.dev gets referrer
    attribution. Keep `rel=noopener`.
    
    ### Footer
    - Adds the en.dev footer matching the one on the mise docs, via
    VitePress's `layout-bottom` slot
    
    ## Test plan
    - [ ] Run docs dev server, confirm banner text is centered and readable
    - [ ] Confirm en.dev footer appears at the bottom of pages
    - [ ] Click the \u00d7 on the banner \u2014 dismisses and stays hidden
    across reload
    
    \U0001F916 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: docs-only theme/CSS tweaks plus a small `rel` attribute
    change on an external link; no backend or data model impact.
    > 
    > **Overview**
    > Polishes the docs site announcement banner styling to improve
    readability and layout (dark text, centered content, higher `z-index`,
    and an absolutely positioned dismiss button), with updated responsive
    padding.
    > 
    > Adds a new `EndevFooter` component and wires it into VitePress via the
    `layout-bottom` slot, and adjusts the banner link to use
    `rel="noopener"` (dropping `noreferrer`).
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    151266a. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    bfef7f6 View commit details
    Browse the repository at this point in the history
  5. docs: banner cache + fallback color tweaks (#111)

    Follow-ups after #110 merged.
    
    ## Summary
    - Drop \`cache: \"no-cache\"\` from the banner fetch. The server already
    sends \`Cache-Control: public, max-age=300, must-revalidate\`, so
    default browser caching gives 5-min freshness without a conditional GET
    on every page load.
    - Fix the banner background fallback color. Previously fell back to
    \`#3451b2\` (VitePress dark blue), which rendered black banner text
    unreadable if \`--vp-c-brand-1\` ever fails to resolve. Now falls back
    to \`#ff71ce\` (the actual communique brand).
    
    \U0001F916 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: only adjusts docs-site banner styling and removes a
    `no-cache` fetch option, which may slightly change how quickly banner
    updates propagate but doesn’t affect core app logic.
    > 
    > **Overview**
    > Updates the docs announcement banner to rely on default browser
    caching by removing `cache: "no-cache"` from the `fetch` in
    `initBanner()`.
    > 
    > Also changes the banner background fallback color in `banner.css` to
    `#ff71ce` to keep text readable if `--vp-c-brand-1` isn’t defined.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    67ff10a. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    ---------
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    5eaf571 View commit details
    Browse the repository at this point in the history
  6. docs: keep banner height in sync via ResizeObserver (#112)

    ## Summary
    Follow-up fix for the banner.
    
    \`--vp-layout-top-height\` was set once in a single rAF and never
    updated. On window resize, orientation change, or text reflow the banner
    height could change, leaving VitePress's nav offset stale and causing
    overlap or a visible gap. Observe the banner element and resync the
    variable whenever its size changes; disconnect the observer on dismiss.
    
    \U0001F916 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk docs-theme tweak that only affects banner layout; potential
    issues are limited to browsers without `ResizeObserver` support or
    unexpected observer behavior.
    > 
    > **Overview**
    > Keeps VitePress’s `--vp-layout-top-height` CSS var in sync with the
    announcement banner’s actual height by introducing a `syncHeight` helper
    and observing the banner with `ResizeObserver`.
    > 
    > On dismiss, the observer is disconnected and the layout height var is
    removed, replacing the previous one-time `requestAnimationFrame` height
    set with ongoing updates on resize/reflow.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    6393ae0. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    21267b3 View commit details
    Browse the repository at this point in the history
  7. fix(prompt): truncate recent release bodies on UTF-8 char boundary (#113

    )
    
    ## Summary
    
    `src/prompt.rs`'s style-reference truncation sliced `&body[..3072]`
    directly, which panics whenever byte 3072 falls inside a multi-byte
    UTF-8 character. aube's release-notes style uses the em-dash `—` (3
    bytes) heavily, so `communique generate` against
    [endevco/[email protected]](https://github.com/endevco/aube/releases/tag/v1.0.0)
    blew up with:
    
    ```
    thread 'main' panicked at src/prompt.rs:137:52:
    byte index 3072 is not a char boundary; it is inside '—' (bytes 3070..3073) of `aube v1.0.0-beta.12 is a reliability and reach release…`
    ```
    
    (See the failed [enhance-release
    job](https://github.com/endevco/aube/actions/runs/24854719507/job/72767529235).)
    
    Fix: walk back from 3072 to the nearest char boundary before slicing.
    
    ## Test plan
    
    - [x] New regression test
    `test_user_prompt_recent_releases_truncation_on_char_boundary`
    reproduces the aube panic (em-dash straddling the 3072 cutoff) and now
    passes
    - [x] `cargo test prompt::` — 8/8 pass
    - [x] `cargo clippy` / `cargo fmt --check` clean (pre-commit hooks
    passed on push)
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: change is limited to prompt-string truncation logic and adds
    a regression test; main risk is only in edge-case formatting of
    truncated output.
    > 
    > **Overview**
    > Fixes a panic in `user_prompt` when truncating "recent release" bodies
    by ensuring the 3072-byte cutoff is adjusted backward to a valid UTF-8
    character boundary before slicing.
    > 
    > Adds a regression test covering the multi-byte character boundary case
    to prevent future crashes during style-reference generation.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    c48ae1c. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    
    Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
    jdx and claude authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    5e74d55 View commit details
    Browse the repository at this point in the history
  8. v1.0.3: UTF-8 boundary fix + rustls-webpki security bump (#108)

    A small patch release that fixes a panic when generating notes against
    releases with multi-byte characters in their bodies, and picks up a
    security fix in `rustls-webpki`.
    
    ## Fixed
    
    - **Don't panic on multi-byte chars in style-reference bodies** —
    `communique generate` truncates each recent release body to 3072 bytes
    to keep the prompt small, but previously sliced `&body[..3072]`
    directly. If byte 3072 fell inside a multi-byte UTF-8 character (common
    with em-dashes, which are 3 bytes), the command would panic with `byte
    index 3072 is not a char boundary`. The truncation now walks back to the
    nearest char boundary before slicing, with a regression test covering
    the case. ([#113](#113)) (@jdx)
    
    ## Security
    
    - **`rustls-webpki` bumped to 0.103.13** — Addresses
    [RUSTSEC-2026-0104](https://rustsec.org/advisories/RUSTSEC-2026-0104), a
    reachable panic in certificate revocation list parsing. Lockfile-only
    change. ([#107](#107)) (@jdx)
    
    ## Docs
    
    - Added a dismissible cross-site announcement banner and an en.dev
    footer to the documentation site, with follow-up polish (contrast,
    centering, z-index), smarter caching, and `ResizeObserver`-based height
    syncing so VitePress's nav offset stays correct on resize.
    ([#109](#109),
    [#110](#110),
    [#111](#111),
    [#112](#112)) (@jdx)
    
    ---------
    
    Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    jdx and autofix-ci[bot] authored Apr 23, 2026
    Configuration menu
    Copy the full SHA
    8c2d1d5 View commit details
    Browse the repository at this point in the history
Loading