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/usage
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.2.1
Choose a base ref
...
head repository: jdx/usage
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v3.3.0
Choose a head ref
  • 20 commits
  • 42 files changed
  • 7 contributors

Commits on Apr 23, 2026

  1. chore(release): append en.dev sponsor blurb to release notes (#598)

    ## Summary
    
    - Appends a **Sponsor usage** section to every GitHub Release body, run
    after `communique generate` in the `enhance-release` job in
    [`.github/workflows/publish-cli.yml`](.github/workflows/publish-cli.yml).
    - Same pattern as [mise#9272](jdx/mise#9272),
    adapted for usage.
    
    ## What it looks like
    
    Rendered at the bottom of each release body:
    
    > ## 💚 Sponsor usage
    >
    > usage is built by [@jdx](https://github.com/jdx) at
    [**en.dev**](https://en.dev) — an independent developer-tooling studio
    behind [mise](https://mise.jdx.dev/), [aube](https://aube.en.dev/), hk,
    and more. Work on usage is funded by sponsorships.
    >
    > If \`usage\` powers CLI specs, docs, or completions for a tool you
    maintain or use, please consider [sponsoring at en.dev](https://en.dev).
    Every sponsorship helps the project stay independent and moving.
    
    ## 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]
    > **Low Risk**
    > Low risk: only adjusts the GitHub Actions release workflow to
    post-process release notes; no runtime or security-sensitive application
    code changes.
    > 
    > **Overview**
    > After `communique generate` runs in the `enhance-release` job, the
    workflow now *edits the GitHub Release body* to append a **“Sponsor
    usage”** section.
    > 
    > This is implemented by fetching the current release body via `gh
    release view`, concatenating the sponsor blurb, and updating the release
    with `gh release edit --notes-file`.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    d1de688. 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
    e6ef05c View commit details
    Browse the repository at this point in the history
  2. docs: add cross-site announcement banner (#600)

    ## Summary
    - Adds `docs/.vitepress/theme/banner.ts` + `banner.css` \u2014 fetches
    banner config from `https://jdx.dev/banner.json` and renders a
    dismissible announcement bar at the top of the docs
    - Wires it into `.vitepress/theme/index.ts` via `enhanceApp`
    - Link scheme is validated to `http:`/`https:` so a compromised upstream
    can't inject a `javascript:` URL
    - Dismissals persist per banner id in `localStorage`
    
    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**
    > Moderate risk because it introduces client-side fetching and DOM
    injection in the docs site (including localStorage persistence and
    layout offset adjustments), which could affect layout or reliability if
    the remote endpoint misbehaves.
    > 
    > **Overview**
    > Adds a docs-site announcement banner that **fetches remote config**
    from `https://jdx.dev/banner.json`, renders a fixed, dismissible top
    bar, and persists dismissal per-banner in `localStorage` (with
    `http/https` link validation).
    > 
    > Updates the VitePress theme to initialize the banner via
    `enhanceApp()` and adds a new `EndevFooter` component wired into
    `layout-bottom`.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    d869013. 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
    73df3ca View commit details
    Browse the repository at this point in the history
  3. docs: fix banner dark-mode contrast (#601)

    ## Summary
    White banner text was unreadable in dark mode because VitePress inverts
    \`--vp-c-brand-1\` per theme:
    - Light mode: \`#3451b2\` (dark indigo) \u2014 white text reads fine
    - Dark mode: \`#a8b1ff\` (light lavender) \u2014 white text is nearly
    invisible
    
    Hardcode the banner bg to \`#3451b2\` so it stays dark with white text
    in both themes.
    
    \U0001F916 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: a single CSS tweak hardcodes the banner background color to
    avoid theme-variable inversion; no logic or data flow changes.
    > 
    > **Overview**
    > For the docs site announcement banner, the background color is now
    hardcoded to `#3451b2` instead of using `var(--vp-c-brand-1)`, keeping
    white banner text readable in dark mode as well as light mode.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    9fa2bc1. 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
    2661934 View commit details
    Browse the repository at this point in the history
  4. docs: respect banner expires field (#602)

    ## Summary
    - Honors the new optional `expires` (ISO-8601) field in
    [jdx.dev/banner.json](https://jdx.dev/banner.json)
    - Banner is hidden once `Date.now() >= Date.parse(expires)`
    - No-op when `expires` is absent (preserves existing behavior)
    - Requires [jdx/blog#65](jdx/blog#65) to
    populate the field
    
    ## Test plan
    - [ ] Set an `expires` in the past → banner hidden
    - [ ] Set an `expires` in the future → banner shown
    - [ ] No `expires` field → banner shown as before
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: small, client-side docs banner change that only gates
    rendering based on an optional timestamp; no auth or data writes beyond
    existing localStorage usage.
    > 
    > **Overview**
    > Adds support for an optional `expires` field in `banner.json` so the
    docs site announcement banner will **not render once the timestamp has
    passed**.
    > 
    > Introduces `isExpired()` to safely parse the date (treating
    missing/invalid values as non-expired) and checks it during
    `initBanner()` before calling `render()`.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    b64256d. 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
    90ad7f1 View commit details
    Browse the repository at this point in the history

Commits on Apr 24, 2026

  1. fix(docs): stack banner and pin close button on mobile (#603)

    ## Summary
    - On narrow viewports the site banner rendered cramped: `flex-wrap:
    nowrap` forced the message onto two squeezed lines while the "Read more"
    link sat jammed against the text.
    - At `<=640px`, switch the banner to `flex-direction: column` so the
    message and link stack cleanly. Shrink font slightly, tighten
    line-height, add `text-wrap: balance` for even two-line breaks, and pin
    the close button flush to the top-right corner.
    
    Matches the same fix going out across the mise, hk, aube, pitchfork,
    usage, fnox, and communique docs.
    
    ## Test plan
    - [ ] Visit the docs site on a mobile device (or DevTools <=640px) after
    deploy and confirm the banner stacks cleanly with the × button in the
    top-right corner.
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk CSS-only change limited to docs banner layout on small
    viewports; main risk is minor visual regressions on mobile.
    > 
    > **Overview**
    > Adjusts `docs/.vitepress/theme/banner.css` for `<=640px` to **stack
    banner text/link vertically** (`flex-direction: column`), tighten
    spacing/typography, and add `text-wrap: balance` to avoid cramped
    wrapping.
    > 
    > Repositions the close button on mobile by pinning it to the top-right
    and removing the vertical centering transform.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    365d049. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    jdx authored Apr 24, 2026
    Configuration menu
    Copy the full SHA
    db5274d View commit details
    Browse the repository at this point in the history

Commits on Apr 25, 2026

  1. docs(site): show release version and github stars (#604)

    ## Summary
    
    - read the latest site release label from `usage/lib/Cargo.toml` and
    show it as the releases nav item
    - add a GitHub star counter to the VitePress social nav, matching the
    existing aube/mise pattern
    
    ## Validation
    
    - `npm run docs:build` in `/home/jdx/src/usage-release-version`
    
    _This PR was generated by Codex._
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk docs-only changes; main risk is minor build/CI variability
    from parsing `lib/Cargo.toml` and optionally fetching GitHub stars
    (guarded with fallbacks/timeouts).
    > 
    > **Overview**
    > Updates the VitePress docs navbar to display the current release label
    (e.g. `vX.Y.Z`) by reading and regex-parsing `lib/Cargo.toml` at build
    time.
    > 
    > Adds a GitHub star counter badge under the existing GitHub social
    link, backed by a new `stars.data.ts` loader that optionally fetches
    `stargazers_count` (with token/env gating, timeout, and
    offline/rate-limit fallback) and new CSS/DOM injection logic in the
    theme to render it.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    3068b8c. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    jdx authored Apr 25, 2026
    Configuration menu
    Copy the full SHA
    b32dc5b View commit details
    Browse the repository at this point in the history

Commits on Apr 26, 2026

  1. chore(deps): bump communique to 1.1.2 (#605)

    ## Summary
    - update the communique mise lock entry to v1.1.2
    - refresh release asset URLs and checksums, including musl assets
    
    ## Validation
    - monitored jdx/communique release workflow 24960017639 to success
    - `mise install --locked communique`
    - usage pre-commit hooks ran during commit
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: this only updates the `mise.lock` entry for the `communique`
    tool (version/asset URLs/checksums) and does not change
    application/runtime code.
    > 
    > **Overview**
    > Bumps the `communique` tool in `mise.lock` from `0.1.7` to `1.1.2`,
    refreshing the pinned release asset URLs, GitHub asset IDs, and
    checksums across supported platforms (including *musl* builds).
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    f9a26be. 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: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    jdx and autofix-ci[bot] authored Apr 26, 2026
    Configuration menu
    Copy the full SHA
    7743fe1 View commit details
    Browse the repository at this point in the history

Commits on Apr 27, 2026

  1. docs: prefix star count with ★ glyph and populate it on deploy (#606)

    ## Summary
    
    Three small changes to the docs:
    
    - **Wrap a ★ (U+2605) in a sans-serif `.star-glyph` span** before the
    count, so the badge reads "★ N" instead of just "N". Switching to
    sans-serif keeps the glyph crisp at 0.6rem — the mono digit font renders
    ★ as a smudge at this size.
    - **Add CSS** for the new `.star-glyph` span.
    - **Pass `GITHUB_TOKEN` to the VitePress build step.** Without it, the
    build-time data loader in `docs/.vitepress/stars.data.ts` falls back to
    0 and returns an empty string, so the badge currently renders blank on
    the live site (curl-verified). With the token set, the loader can hit
    the GitHub API and populate the count.
    
    ## Test plan
    
    - [ ] Merge → docs deploy runs → reload https://usage.jdx.dev/ → top-nav
    GitHub icon shows "★ N"
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk UI/CSS tweak plus a GitHub Actions env var change; main risk
    is only around the docs build step now relying on `GITHUB_TOKEN` for API
    calls/rate limits.
    > 
    > **Overview**
    > Docs Pages builds now pass `GITHUB_TOKEN` into the VitePress build so
    the `stars.data` loader can successfully query the GitHub API and
    populate the star badge.
    > 
    > The GitHub social link star badge UI is updated to render as `★ N` by
    inserting a dedicated `.star-glyph` element and styling it with a
    sans-serif font for crisp rendering at small sizes.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    90998ab. Bugbot is set up for automated
    code reviews on this repo. Configure
    [here](https://www.cursor.com/dashboard/bugbot).</sup>
    <!-- /CURSOR_SUMMARY -->
    jdx authored Apr 27, 2026
    Configuration menu
    Copy the full SHA
    e63c0be View commit details
    Browse the repository at this point in the history
  2. chore(deps): lock file maintenance (#607)

    This PR contains the following updates:
    
    | Update | Change |
    |---|---|
    | lockFileMaintenance | All locks refreshed |
    
    🔧 This Pull Request updates lock files to use the latest dependency
    versions.
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: (in timezone America/Chicago)
    
    - Branch creation
      - "before 4am on monday"
    - Automerge
      - At any time (no schedule defined)
    
    🚦 **Automerge**: Enabled.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    👻 **Immortal**: This PR will be recreated if closed unmerged. Get
    [config
    help](https://redirect.github.com/renovatebot/renovate/discussions) if
    that's undesired.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/jdx/usage).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNDEuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE0MS4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored Apr 27, 2026
    Configuration menu
    Copy the full SHA
    577390b View commit details
    Browse the repository at this point in the history
  3. chore: switch analytics from gtm to plausible (#609)

    ## Summary
    
    - Drops Google Tag Manager from the docs site
    - Adds Plausible Analytics via the shrill.en.dev Cloudflare worker proxy
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk: only updates a client-side analytics script in VitePress
    `head` metadata with no impact on core app logic or data handling beyond
    pageview tracking.
    > 
    > **Overview**
    > Switches the docs site analytics integration in
    `docs/.vitepress/config.mts` by removing the inline Google Tag
    Manager/`gtag` setup and loading a deferred Plausible-style script
    instead.
    > 
    > The new script is configured via `data-domain` and a custom `data-api`
    endpoint pointing at the `shrill.en.dev` proxy.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    83af975. 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 27, 2026
    Configuration menu
    Copy the full SHA
    86b24de View commit details
    Browse the repository at this point in the history

Commits on Apr 30, 2026

  1. ci: pin taiki-e/install-action to commit SHA (#610)

    ## Summary
    - Pin `taiki-e/install-action@cargo-llvm-cov` to a full-length commit
    SHA in `coverage.yml`. The `cargo-llvm-cov` ref is a tool-alias tag the
    action's CI auto-bumps; SHA-pinning is required by org policy
    regardless.
    
    ## Test plan
    - [ ] coverage workflow still installs cargo-llvm-cov and reports
    coverage on next push
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Low risk CI-only change that pins a GitHub Action to a specific
    commit; impact is limited to whether the coverage job can still install
    `cargo-llvm-cov`.
    > 
    > **Overview**
    > Pins the coverage workflow’s `taiki-e/install-action` step for
    installing `cargo-llvm-cov` from the moving `@cargo-llvm-cov` ref to a
    specific commit SHA, improving supply-chain/CI determinism.
    > 
    > No other workflow behavior changes (coverage generation and Codecov
    upload remain the same).
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    252557c. 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 30, 2026
    Configuration menu
    Copy the full SHA
    c6dc7ae View commit details
    Browse the repository at this point in the history

Commits on May 1, 2026

  1. chore(deps): update autofix-ci/action action to v1.3.4 (#611)

    This PR contains the following updates:
    
    | Package | Type | Update | Change |
    |---|---|---|---|
    | [autofix-ci/action](https://redirect.github.com/autofix-ci/action) |
    action | patch | `v1.3.3` → `v1.3.4` |
    
    ---
    
    ### Release Notes
    
    <details>
    <summary>autofix-ci/action (autofix-ci/action)</summary>
    
    ###
    [`v1.3.4`](https://redirect.github.com/autofix-ci/action/releases/tag/v1.3.4):
    autofix-ci/action 1.3.4
    
    [Compare
    Source](https://redirect.github.com/autofix-ci/action/compare/v1.3.3...v1.3.4)
    
    #### What's Changed
    
    - Update action to use Node 24
    
    **Full Changelog**:
    <autofix-ci/action@v1...v1.3.4>
    
    </details>
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: (in timezone America/Chicago)
    
    - Branch creation
      - Only on Friday (`* * * * 5`)
    - Automerge
      - At any time (no schedule defined)
    
    🚦 **Automerge**: Enabled.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    🔕 **Ignore**: Close this PR and you won't be reminded about this update
    again.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/jdx/usage).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored May 1, 2026
    Configuration menu
    Copy the full SHA
    41727f3 View commit details
    Browse the repository at this point in the history
  2. chore(deps): update apple-actions/import-codesign-certs action to v7 (#…

    …612)
    
    This PR contains the following updates:
    
    | Package | Type | Update | Change |
    |---|---|---|---|
    |
    [apple-actions/import-codesign-certs](https://redirect.github.com/apple-actions/import-codesign-certs)
    | action | major | `v6` → `v7` |
    
    ---
    
    ### Release Notes
    
    <details>
    <summary>apple-actions/import-codesign-certs
    (apple-actions/import-codesign-certs)</summary>
    
    ###
    [`v7`](https://redirect.github.com/apple-actions/import-codesign-certs/compare/v7.0.0...v7.0.0)
    
    [Compare
    Source](https://redirect.github.com/apple-actions/import-codesign-certs/compare/v7.0.0...v7.0.0)
    
    ###
    [`v7.0.0`](https://redirect.github.com/Apple-Actions/import-codesign-certs/releases/tag/v7.0.0)
    
    [Compare
    Source](https://redirect.github.com/apple-actions/import-codesign-certs/compare/v6.1.0...v7.0.0)
    
    #### What's Changed
    
    - Switch from `ncc` to `esbuild`
    - Bump flatted from 3.4.1 to 3.4.2 by
    [@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
    [Apple-Actions#166](https://redirect.github.com/Apple-Actions/import-codesign-certs/pull/166)
    - Bump actions/setup-node from 6.2.0 to 6.3.0 by
    [@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
    [Apple-Actions#167](https://redirect.github.com/Apple-Actions/import-codesign-certs/pull/167)
    - Bump picomatch from 2.3.1 to 2.3.2 by
    [@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
    [Apple-Actions#168](https://redirect.github.com/Apple-Actions/import-codesign-certs/pull/168)
    - Bump knip from 5.78.0 to 6.2.0 by
    [@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
    [Apple-Actions#173](https://redirect.github.com/Apple-Actions/import-codesign-certs/pull/173)
    
    **Full Changelog**:
    <Apple-Actions/import-codesign-certs@v6.1.0...v7.0.0>
    
    ###
    [`v6.1.0`](https://redirect.github.com/apple-actions/import-codesign-certs/compare/v6.0.0...v6.1.0)
    
    [Compare
    Source](https://redirect.github.com/apple-actions/import-codesign-certs/compare/v6...v6.1.0)
    
    </details>
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: (in timezone America/Chicago)
    
    - Branch creation
      - Only on Friday (`* * * * 5`)
    - Automerge
      - At any time (no schedule defined)
    
    🚦 **Automerge**: Enabled.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    🔕 **Ignore**: Close this PR and you won't be reminded about this update
    again.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/jdx/usage).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored May 1, 2026
    Configuration menu
    Copy the full SHA
    13d3c1d View commit details
    Browse the repository at this point in the history

Commits on May 2, 2026

  1. chore(deps): update taiki-e/install-action digest to fc9eae0 (#613)

    This PR contains the following updates:
    
    | Package | Type | Update | Change |
    |---|---|---|---|
    |
    [taiki-e/install-action](https://redirect.github.com/taiki-e/install-action)
    ([changelog](https://redirect.github.com/taiki-e/install-action/compare/d79fce544138636ae8155ecac335f73c98e3b198..fc9eae0a7877a2f4152f841721d1d1aa8c3f1a27))
    | action | digest | `d79fce5` → `fc9eae0` |
    
    ---
    
    ### Configuration
    
    📅 **Schedule**: (in timezone America/Chicago)
    
    - Branch creation
      - Only on Friday (`* * * * 5`)
    - Automerge
      - At any time (no schedule defined)
    
    🚦 **Automerge**: Enabled.
    
    ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
    rebase/retry checkbox.
    
    🔕 **Ignore**: Close this PR and you won't be reminded about this update
    again.
    
    ---
    
    - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
    this box
    
    ---
    
    This PR was generated by [Mend Renovate](https://mend.io/renovate/).
    View the [repository job
    log](https://developer.mend.io/github/jdx/usage).
    
    <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
    
    Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
    renovate[bot] authored May 2, 2026
    Configuration menu
    Copy the full SHA
    cae041f View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    874b964 View commit details
    Browse the repository at this point in the history

Commits on May 3, 2026

  1. docs: integrate Commander.js, oclif and yargs (#616)

    https://github.com/gaojunran/usage-integrations 
    
    a monorepo that shares Node.js lib integrations. 50+ tests for each
    integration to make it workable.
    
    ---------
    
    Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
    3 people authored May 3, 2026
    Configuration menu
    Copy the full SHA
    9213dfe View commit details
    Browse the repository at this point in the history
  2. chore: rename CLAUDE.md to AGENTS.md and symlink (#618)

    ## Summary
    - Renames `CLAUDE.md` to `AGENTS.md` so the project instructions live
    under the standard agents file
    - Replaces `CLAUDE.md` with a symlink to `AGENTS.md` so Claude Code
    keeps loading the same content
    
    ## Test plan
    - [ ] `readlink CLAUDE.md` resolves to `AGENTS.md`
    - [ ] Claude Code in this repo still picks up the project instructions
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Low Risk**
    > Documentation-only change that renames the agent instructions file and
    introduces a `CLAUDE.md` symlink; no runtime code paths are affected,
    with minimal risk aside from tooling that doesn’t follow symlinks.
    > 
    > **Overview**
    > Moves the Claude Code repository instructions from `CLAUDE.md` to a
    new `AGENTS.md` (same content) to match the standard agents filename.
    > 
    > Replaces `CLAUDE.md` with a symlink-style stub pointing at `AGENTS.md`
    so existing tooling that reads `CLAUDE.md` continues to work.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    fb6d811. 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 May 3, 2026
    Configuration menu
    Copy the full SHA
    f9ea78b View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    7f29f3c View commit details
    Browse the repository at this point in the history
  4. feat(complete): auto-completion for usage shebang scripts (#620)

    ## Summary
    
    Adds `usage g completion-init <shell>` (bash/zsh/fish) — a one-time init
    script users source from their shell rc to enable `<Tab>` completion for
    any command on `\$PATH` whose first line is a `usage` shebang. No
    per-script `usage g completion bash <bin> -f <script>` generation
    required.
    
    ```bash
    # bash:  ~/.bashrc
    source <(usage g completion-init bash)
    
    # zsh:   ~/.zshrc
    source <(usage g completion-init zsh)
    
    # fish:  ~/.config/fish/conf.d/usage.fish
    usage g completion-init fish | source
    ```
    
    Closes the docs gap reported in #617 where users expected shebang
    scripts on \$PATH to gain completion automatically.
    
    ## Mechanism per shell
    
    - **bash**: registers `complete -D` default handler. On `<Tab>`,
    resolves the candidate command, peeks line 1 for `#!*usage*`, and
    dispatches to `usage complete-word`. Chains to `_completion_loader` for
    non-usage commands so bash-completion's dynamic loader still works.
    - **zsh**: registers `compdef -default-` fallback. Same shebang
    detection. Falls back to `_files` for non-usage commands.
    - **fish**: fish has no `-default-` equivalent, so the init scans
    `\$PATH` once at shell startup and registers `complete -c <name>` per
    usage shebang script. One-time cost proportional to `\$PATH` size.
    
    ## Tests
    
    Three integration tests in `cli/tests/shell_completions_integration.rs`
    drive each shell against a staged usage shebang script and assert on the
    resulting completion candidates (positional, flag, partial flag).
    
    The existing \"skip if shell missing\" pattern was bumped:
    `skip_if_shell_missing()` now **panics under `CI=1`** to prevent silent
    false-positives if a shell is missing in CI.
    
    ## Test plan
    
    - [x] `cargo test --all --all-features` passes
    - [x] `cargo clippy --all --all-features -- -D warnings` clean
    - [x] `mise run ci` green
    - [x] `CI=1 cargo test -p usage-cli --test
    shell_completions_integration` — all 9 pass
    - [x] Manual smoke test: stage `examples/example.sh` as `ex` on PATH,
    source init in each shell, verify `<Tab>` produces `val-1 val-2 val-3`
    and flag completion
    - [ ] Reviewer: confirm zsh \`compdef -default-\` doesn't conflict with
    reviewer's existing zsh setup
    - [ ] Reviewer: confirm fish startup-scan cost is acceptable for typical
    \$PATH sizes
    
    <!-- CURSOR_SUMMARY -->
    ---
    
    > [!NOTE]
    > **Medium Risk**
    > Adds new shell init scripts that install default completion handlers
    (bash `complete -D`, zsh `compdef -default-`) and a fish `$PATH` scan,
    which could interfere with users’ existing completion setups or impact
    shell startup performance. CI changes also alter workflow behavior by
    requiring additional packages and making missing shells in CI a hard
    failure.
    > 
    > **Overview**
    > Adds a new `usage generate completion-init` (alias `ci`) subcommand
    that outputs a one-time init script for `bash`/`zsh`/`fish`, enabling
    tab-completion for any executable on `$PATH` whose first line is a
    `usage` shebang by dispatching to `usage complete-word`.
    > 
    > Implements shell-specific init generators in `lib/src/complete/`
    (including bash default-handler chaining and fish startup `$PATH`
    scanning), wires them into the CLI, and expands integration tests to
    cover `completion-init` behavior plus stricter “skip” logic (panic when
    shells are missing under `CI`).
    > 
    > Updates generated docs/manpage/Fig spec/reference JSON and adjusts
    GitHub Actions workflows to install `zsh`, `fish`, and ensure `pwsh` is
    available so the new integration tests run reliably in CI.
    > 
    > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
    55c1d36. 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 May 3, 2026
    Configuration menu
    Copy the full SHA
    03b2a70 View commit details
    Browse the repository at this point in the history
  5. chore: release v3.3.0 (#599)

    ### 🚀 Features
    
    - **(complete)** auto-completion for usage shebang scripts by
    [@jdx](https://github.com/jdx) in
    [#620](#620)
    
    ### 🐛 Bug Fixes
    
    - **(docs)** stack banner and pin close button on mobile by
    [@jdx](https://github.com/jdx) in
    [#603](#603)
    
    ### 📚 Documentation
    
    - **(site)** show release version and github stars by
    [@jdx](https://github.com/jdx) in
    [#604](#604)
    - add cross-site announcement banner by [@jdx](https://github.com/jdx)
    in [#600](#600)
    - fix banner dark-mode contrast by [@jdx](https://github.com/jdx) in
    [#601](#601)
    - respect banner expires field by [@jdx](https://github.com/jdx) in
    [#602](#602)
    - prefix star count with ★ glyph and populate it on deploy by
    [@jdx](https://github.com/jdx) in
    [#606](#606)
    - integrate Commander.js, oclif and yargs by
    [@gaojunran](https://github.com/gaojunran) in
    [#616](#616)
    - integrate Typer and Click by
    [@gaojunran](https://github.com/gaojunran) in
    [#619](#619)
    
    ### 🔍 Other Changes
    
    - **(docs)** remove shrill.en.dev analytics script by
    [@jdx](https://github.com/jdx) in
    [#614](#614)
    - **(release)** append en.dev sponsor blurb to release notes by
    [@jdx](https://github.com/jdx) in
    [#598](#598)
    - switch analytics from gtm to plausible by
    [@jdx](https://github.com/jdx) in
    [#609](#609)
    - pin taiki-e/install-action to commit SHA by
    [@jdx](https://github.com/jdx) in
    [#610](#610)
    - rename CLAUDE.md to AGENTS.md and symlink by
    [@jdx](https://github.com/jdx) in
    [#618](#618)
    
    ### 📦️ Dependency Updates
    
    - bump communique to 1.1.2 by [@jdx](https://github.com/jdx) in
    [#605](#605)
    - lock file maintenance by
    [@renovate[bot]](https://github.com/renovate[bot]) in
    [#607](#607)
    - update autofix-ci/action action to v1.3.4 by
    [@renovate[bot]](https://github.com/renovate[bot]) in
    [#611](#611)
    - update apple-actions/import-codesign-certs action to v7 by
    [@renovate[bot]](https://github.com/renovate[bot]) in
    [#612](#612)
    - update taiki-e/install-action digest to fc9eae0 by
    [@renovate[bot]](https://github.com/renovate[bot]) in
    [#613](#613)
    
    ---------
    
    Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
    mise-en-dev and autofix-ci[bot] authored May 3, 2026
    Configuration menu
    Copy the full SHA
    f8fa60b View commit details
    Browse the repository at this point in the history
Loading