Skip to content

ci: parallelize test steps and fold check into test - #1381

Merged
ryoppippi merged 12 commits into
mainfrom
ci/parallel-steps
Jun 27, 2026
Merged

ci: parallelize test steps and fold check into test#1381
ryoppippi merged 12 commits into
mainfrom
ci/parallel-steps

Conversation

@ryoppippi

@ryoppippi ryoppippi commented Jun 27, 2026

Copy link
Copy Markdown
Member

What

Apply the new GitHub Actions parallel steps feature (background: true + wait-all) to the CI workflow to cut wall time and a duplicated runner.

This is an experiment to observe — the feature shipped 2026-06-25 and isn't in the official workflow-syntax reference yet, and our heavy jobs run on Blacksmith runners whose agent support for it is unverified. The action-timeline job will show whether it actually helps.

Changes

  1. test job: run Node and Rust tests in parallel (d065a10)

    • just test-node (mostly single-threaded) and nix build .#ccusage-tests (CPU-heavy) are independent with different resource profiles, so they overlap well on one runner instead of running back-to-back.
  2. Fold nix flake check into the test job (8d132f3)

    • The standalone check job only re-paid the checkout + Nix cache restore on a second runner to run one command. It now runs as an early background step in test, overlapping the JS toolchain install and the test runs.
    • ⚠️ Removes the check status checktest now covers it. Branch-protection required-checks may need updating.

Deliberately NOT done

  • ccusage-perf-comment left as a matrix. Parallelizing the js/rust legs on one runner would make them contend for CPU and corrupt the hyperfine benchmark numbers; serializing them on one runner would be slower than the current two-machine matrix. Separate machines are correct here.
  • npm publish / release untouched (per request) and other jobs with strictly sequential dependencies.

What to observe

  • Does Blacksmith accept the background: / wait-all: syntax at all?
  • action-timeline: is the merged test job faster than the old check + test, or does CPU/memory contention (flake check + node + rust on one 32-vCPU box) eat the saving?
  • Are the parallel step logs cleanly separated in the Actions UI?

View with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is enabled.


Summary by cubic

Parallelized the test job and folded nix flake check into it to cut CI wall time and remove a duplicated runner. Added global actionlint ignores for the new parallel-step keys so checks stay green with background/wait-all.

  • Refactors

    • Run nix flake check as an early background step in test; removed the check job and its action-timeline dependency.
    • Run just test-node and nix build .#ccusage-tests in parallel, start the Rust build before JS setup, then join with wait-all.
    • Add global actionlint ignores for background and the wait-all syntax-check message; inline/file-scoped suppression isn’t supported for this error, and the risk is bounded by runtime failures.
  • Migration

    • Update branch protection required checks: replace check with test.

Written for commit d0975d6. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Chores
    • Streamlined the CI workflow by removing the standalone checks job and running nix flake check within the main test job.
    • Improved CI throughput by running related validations/builds concurrently and synchronizing completion.
    • Updated workflow job dependencies to match the simplified pipeline.
    • Adjusted formatting/lint settings to suppress actionlint false warnings for newly used parallel-step keys (background / wait-all).

The Node tests (`just test-node`) and the Rust test build
(`nix build .#ccusage-tests`) in the `test` job are independent and have
different resource profiles (Node is mostly single-threaded; the Rust build
is CPU-heavy). Run them as concurrent background steps joined by `wait-all`
so they overlap on the runner instead of executing back-to-back.

Uses the GitHub Actions parallel-steps feature:
https://github.blog/changelog/2026-06-25-actions-steps-can-now-be-run-in-parallel/
The standalone `check` job duplicated the `test` job's checkout and Nix
cache restore on a second runner just to run `nix flake check`. Move the
check into the `test` job as an early background step so it overlaps the JS
toolchain install and the test runs, and drop the separate job (and its
`action-timeline` dependency).

Note: this removes the `check` status check; `test` now covers it. Branch
protection required-checks may need updating.

Uses the GitHub Actions parallel-steps feature:
https://github.blog/changelog/2026-06-25-actions-steps-can-now-be-run-in-parallel/
@pullfrog

pullfrog Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

no API key found — this repo is configured to use deepseek/deepseek-v4-pro, which needs DEEPSEEK_API_KEY, but the runner has no key for it.

To fix: add the key as a GitHub Actions secret (referenced from your workflow's env: block) or as a Pullfrog secret in the console — or switch this repo to a different model (free models need no key).

Open repo secrets → · Configure model → · Setup docs → · Ask in Discord →

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | Rerun failed job ➔View workflow run | via Pullfrog | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The workflow removes the standalone check job, runs nix flake check inside test, executes Node and Rust checks concurrently, and updates action-timeline plus actionlint handling for the new step key.

Changes

CI workflow changes

Layer / File(s) Summary
Job graph update
.github/workflows/ci.yaml
The check job is removed, and action-timeline no longer lists check in needs.
Parallel test execution
.github/workflows/ci.yaml, nix/treefmt.nix
nix flake check, just test-node, and nix build .#ccusage-tests --print-build-logs run as background steps in test, followed by wait-all, and actionlint ignores the new background and wait-all keys.

Estimated review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • ccusage/ccusage#1258: Also changes .github/workflows/ci.yaml around the check job and test job orchestration.
  • ccusage/ccusage#1260: Also changes what nix flake check runs in CI and how the workflow logs those checks.
  • ccusage/ccusage#1268: Also restructures CI execution within .github/workflows/ci.yaml by shifting work between the check and test jobs.

Suggested reviewers

  • pullfrog

Poem

A bunny hopped through CI night,
With Nix and Node all set just right.
Rust dug holes, checks ran in sync,
wait-all kept the build on link.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main CI change: parallelizing tests and moving the check into the test job.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/parallel-steps

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 27, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
ccusage-guide d0975d6 Commit Preview URL

Branch Preview URL
Jun 27 2026, 01:17 PM

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/workflows/ci.yaml (1)

24-45: 🩺 Stability & Availability | 🔵 Trivial

Update required status checks alongside this job removal.

Protected branches and merge queues can require specific named status checks. Once the standalone check job disappears, any rule that still requires check will block merges until it is removed or replaced with test. (docs.github.com)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yaml around lines 24 - 45, The CI workflow is removing
the standalone check job, so any branch protection or merge queue rule still
requiring check will block merges. Update the required status checks
configuration to remove check and require test instead, using the test job in
.github/workflows/ci.yaml as the new named status check to locate the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/ci.yaml:
- Around line 24-45: The CI workflow is removing the standalone check job, so
any branch protection or merge queue rule still requiring check will block
merges. Update the required status checks configuration to remove check and
require test instead, using the test job in .github/workflows/ci.yaml as the new
named status check to locate the change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 0ff21e27-5b89-4e7c-be9a-3a5d12d9e685

📥 Commits

Reviewing files that changed from the base of the PR and between a98e374 and 8d132f3.

📒 Files selected for processing (1)
  • .github/workflows/ci.yaml

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 1 file

Re-trigger cubic

actionlint does not yet know about the background: parallel-step key
introduced in GitHub Actions on 2026-06-25. Add an -ignore pattern so
treefmt-check (and therefore nix flake check) stops failing on the
three occurrences in ci.yaml.

Co-authored-by: Codesmith <[email protected]>
@pkg-pr-new

pkg-pr-new Bot commented Jun 27, 2026

Copy link
Copy Markdown

Open in StackBlitz

ccusage

npx https://pkg.pr.new/ccusage@1381

@ccusage/ccusage-darwin-arm64

npx https://pkg.pr.new/@ccusage/ccusage-darwin-arm64@1381

@ccusage/ccusage-darwin-x64

npx https://pkg.pr.new/@ccusage/ccusage-darwin-x64@1381

@ccusage/ccusage-linux-arm64

npx https://pkg.pr.new/@ccusage/ccusage-linux-arm64@1381

@ccusage/ccusage-linux-x64

npx https://pkg.pr.new/@ccusage/ccusage-linux-x64@1381

@ccusage/ccusage-win32-x64

npx https://pkg.pr.new/@ccusage/ccusage-win32-x64@1381

commit: 9a8e0da

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 8d132f3a4a0d
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 279.4ms 3.60 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 264.1ms 3.81 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 114.1ms 8.83 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 89.2ms 11.28 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 35.9ms 7.0ms 5.13x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.22 MiB/s
claude session --offline --json 0.00 MiB 35.4ms 3.4ms 10.29x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.45 MiB/s
codex daily --offline --json 0.00 MiB 30.3ms 3.2ms 9.35x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.26 MiB/s
codex session --offline --json 0.00 MiB 33.1ms 3.0ms 10.85x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.28 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 319.1ms 268.0ms 1.19x 920.34 MiB 930.34 MiB 1.01x 3.15 GiB/s 3.76 GiB/s
codex --offline --json 1.01 GiB 117.4ms 92.0ms 1.28x 407.29 MiB 413.30 MiB 1.01x 8.58 GiB/s 10.94 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 8d132f3a4a0d
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 289.2ms 3.48 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 229.9ms 4.38 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 113.3ms 8.89 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 89.5ms 11.24 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 33.5ms 38.7ms 0.86x 53.75 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.04 MiB/s
claude session --offline --json 0.00 MiB 31.0ms 32.0ms 0.97x 53.75 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 28.9ms 31.7ms 0.91x 53.75 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 32.8ms 30.2ms 1.08x 53.75 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 338.1ms 276.3ms 1.22x 962.34 MiB 948.34 MiB 0.99x 2.98 GiB/s 3.64 GiB/s
codex --offline --json 1.01 GiB 116.7ms 123.9ms 0.94x 415.29 MiB 409.29 MiB 0.99x 8.63 GiB/s 8.13 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@pullfrog

pullfrog Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

no API key found — this repo is configured to use deepseek/deepseek-v4-pro, which needs DEEPSEEK_API_KEY, but the runner has no key for it.

To fix: add the key as a GitHub Actions secret (referenced from your workflow's env: block) or as a Pullfrog secret in the console — or switch this repo to a different model (free models need no key).

Open repo secrets → · Configure model → · Setup docs → · Ask in Discord →

Pullfrog  | ⚠️ this action is pinned to a commit SHA, which freezes the cleanup step — switch to @v0 or keep the SHA fresh with Dependabot | Rerun failed job ➔View workflow run | via Pullfrog | Using DeepSeek Pro (free via Pullfrog for OSS) | 𝕏

ryoppippi and others added 2 commits June 27, 2026 12:41
actionlint requires every step to have a run: or uses: section, but the
new wait-all: parallel-step join syntax (GitHub Actions 2026-06-25) has
neither. Add an -ignore for that error too so nix flake check passes.

Co-authored-by: Codesmith <[email protected]>
The Rust test build (`nix build .#ccusage-tests`) does not depend on the JS
toolchain, so move its background step ahead of the JS-only setup (toolchain
install, pnpm install, fixture dirs). It now overlaps that setup alongside
`nix flake check` instead of starting only after it, with the Node tests
joining via `wait-all`.
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 4c31c4affddb
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 280.7ms 3.59 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 272.0ms 3.70 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 115.9ms 8.69 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 86.8ms 11.59 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 34.6ms 7.8ms 4.46x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.20 MiB/s
claude session --offline --json 0.00 MiB 33.5ms 3.8ms 8.85x 53.50 MiB 10.21 MiB 0.19x 0.05 MiB/s 0.41 MiB/s
codex daily --offline --json 0.00 MiB 31.6ms 2.8ms 11.08x 54.00 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.30 MiB/s
codex session --offline --json 0.00 MiB 30.7ms 2.8ms 11.08x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.31 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 317.7ms 258.7ms 1.23x 952.34 MiB 956.34 MiB 1.00x 3.17 GiB/s 3.89 GiB/s
codex --offline --json 1.01 GiB 112.7ms 88.8ms 1.27x 409.29 MiB 413.29 MiB 1.01x 8.93 GiB/s 11.33 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 4c31c4affddb
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 302.7ms 3.33 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 230.3ms 4.37 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 114.8ms 8.77 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.1ms 11.17 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 54.2ms 46.3ms 1.17x 53.50 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
claude session --offline --json 0.00 MiB 38.2ms 31.5ms 1.21x 53.75 MiB 53.75 MiB 1.00x 0.04 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 31.4ms 30.4ms 1.03x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 30.7ms 31.0ms 0.99x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 344.9ms 286.9ms 1.20x 930.33 MiB 958.35 MiB 1.03x 2.92 GiB/s 3.51 GiB/s
codex --offline --json 1.01 GiB 134.4ms 120.0ms 1.12x 439.30 MiB 425.30 MiB 0.97x 7.49 GiB/s 8.39 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/workflows/ci.yaml (1)

408-412: 🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

needs update is consistent, but update branch protection for the removed check status check.

Dropping check from action-timeline.needs correctly matches the removed standalone job. However, if check is a required status check in branch protection, PRs will block waiting on a check that never reports again. Update the protection rules to require the test job (which now runs nix flake check) instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/ci.yaml around lines 408 - 412, The workflow dependency
change in action-timeline is fine, but branch protection still appears to
require the removed check status. Update the repository protection rules to stop
requiring check and require the test job instead, since test now runs nix flake
check and is the status that will report for PRs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/workflows/ci.yaml:
- Around line 408-412: The workflow dependency change in action-timeline is
fine, but branch protection still appears to require the removed check status.
Update the repository protection rules to stop requiring check and require the
test job instead, since test now runs nix flake check and is the status that
will report for PRs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 3d06368e-aada-4282-9eff-4830e71d8671

📥 Commits

Reviewing files that changed from the base of the PR and between 8396440 and 26f762d.

📒 Files selected for processing (1)
  • .github/workflows/ci.yaml

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 2 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread nix/treefmt.nix
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 83964401dfb5
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 328.4ms 3.07 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 252.9ms 3.98 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 122.9ms 8.19 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 98.9ms 10.18 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 35.1ms 7.1ms 4.95x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.22 MiB/s
claude session --offline --json 0.00 MiB 32.9ms 5.7ms 5.82x 54.00 MiB 10.20 MiB 0.19x 0.05 MiB/s 0.27 MiB/s
codex daily --offline --json 0.00 MiB 33.9ms 2.9ms 11.72x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.30 MiB/s
codex session --offline --json 0.00 MiB 31.2ms 2.7ms 11.45x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.31 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 320.9ms 267.9ms 1.20x 952.34 MiB 940.34 MiB 0.99x 3.14 GiB/s 3.76 GiB/s
codex --offline --json 1.01 GiB 118.9ms 98.4ms 1.21x 413.29 MiB 393.29 MiB 0.95x 8.47 GiB/s 10.23 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 83964401dfb5
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 324.8ms 3.10 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 251.4ms 4.01 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.7ms 8.41 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 86.7ms 11.61 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 33.8ms 32.3ms 1.04x 53.75 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
claude session --offline --json 0.00 MiB 35.6ms 32.5ms 1.10x 53.75 MiB 53.75 MiB 1.00x 0.04 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 29.6ms 30.9ms 0.96x 54.00 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 29.9ms 31.8ms 0.94x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 313.8ms 290.3ms 1.08x 980.34 MiB 944.34 MiB 0.96x 3.21 GiB/s 3.47 GiB/s
codex --offline --json 1.01 GiB 113.9ms 120.3ms 0.95x 421.29 MiB 427.29 MiB 1.01x 8.84 GiB/s 8.37 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 26f762d69915
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 282.4ms 3.57 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 277.4ms 3.63 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 118.0ms 8.53 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 94.1ms 10.69 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 34.5ms 4.4ms 7.83x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.35 MiB/s
claude session --offline --json 0.00 MiB 32.3ms 4.5ms 7.22x 53.75 MiB 10.20 MiB 0.19x 0.05 MiB/s 0.35 MiB/s
codex daily --offline --json 0.00 MiB 29.6ms 2.9ms 10.23x 54.00 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.30 MiB/s
codex session --offline --json 0.00 MiB 31.9ms 3.0ms 10.79x 53.75 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.29 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 319.6ms 248.9ms 1.28x 938.34 MiB 958.34 MiB 1.02x 3.15 GiB/s 4.04 GiB/s
codex --offline --json 1.01 GiB 116.5ms 90.5ms 1.29x 405.29 MiB 403.30 MiB 1.00x 8.64 GiB/s 11.12 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 26f762d69915
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 284.6ms 3.54 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 227.6ms 4.42 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 116.5ms 8.64 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 87.4ms 11.52 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 33.4ms 32.1ms 1.04x 53.75 MiB 54.00 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
claude session --offline --json 0.00 MiB 34.8ms 34.8ms 1.00x 53.75 MiB 53.75 MiB 1.00x 0.04 MiB/s 0.04 MiB/s
codex daily --offline --json 0.00 MiB 32.0ms 32.7ms 0.98x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 29.0ms 30.7ms 0.94x 53.75 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 320.1ms 299.6ms 1.07x 948.34 MiB 948.34 MiB 1.00x 3.14 GiB/s 3.36 GiB/s
codex --offline --json 1.01 GiB 117.1ms 125.9ms 0.93x 421.29 MiB 411.29 MiB 0.98x 8.60 GiB/s 8.00 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

The global treefmt -ignore for 'step must run script with run/uses
section' was too broad: it would silently swallow that error for any
malformed step across all workflow files.

Replace it with an inline # actionlint:ignore:syntax-check comment on
the wait-all: step itself, where the suppression is intentional and
self-documenting. The global -ignore list stays narrow.

Co-authored-by: Codesmith <[email protected]>
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 0c7ab8ccf495
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 291.7ms 3.45 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 274.1ms 3.67 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 118.1ms 8.52 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.4ms 11.13 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 37.0ms 5.0ms 7.47x 53.75 MiB 10.20 MiB 0.19x 0.04 MiB/s 0.31 MiB/s
claude session --offline --json 0.00 MiB 41.3ms 4.2ms 9.86x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.37 MiB/s
codex daily --offline --json 0.00 MiB 30.5ms 2.9ms 10.40x 53.75 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.29 MiB/s
codex session --offline --json 0.00 MiB 32.0ms 2.9ms 10.91x 53.50 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.29 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 352.0ms 275.2ms 1.28x 948.33 MiB 958.34 MiB 1.01x 2.86 GiB/s 3.66 GiB/s
codex --offline --json 1.01 GiB 115.4ms 89.7ms 1.29x 425.30 MiB 407.29 MiB 0.96x 8.73 GiB/s 11.23 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 0c7ab8ccf495
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 334.4ms 3.01 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 229.6ms 4.39 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.3ms 8.44 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.3ms 11.15 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 34.7ms 35.1ms 0.99x 53.75 MiB 53.75 MiB 1.00x 0.04 MiB/s 0.04 MiB/s
claude session --offline --json 0.00 MiB 36.5ms 33.2ms 1.10x 53.75 MiB 53.75 MiB 1.00x 0.04 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 32.7ms 28.4ms 1.15x 54.00 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 28.6ms 30.9ms 0.93x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 332.6ms 287.8ms 1.16x 960.34 MiB 956.34 MiB 1.00x 3.03 GiB/s 3.50 GiB/s
codex --offline --json 1.01 GiB 117.7ms 122.0ms 0.96x 419.30 MiB 409.29 MiB 0.98x 8.55 GiB/s 8.25 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

The inline comment on the same line as the step was not being honoured
by actionlint. The canonical placement is the line before the offending
position, matching actionlint docs and other in-repo examples.

Co-authored-by: Codesmith <[email protected]>
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: f6be3f86692f
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 338.0ms 2.98 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 247.3ms 4.07 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 112.6ms 8.94 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 95.5ms 10.54 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 42.3ms 6.8ms 6.23x 54.00 MiB 10.20 MiB 0.19x 0.04 MiB/s 0.23 MiB/s
claude session --offline --json 0.00 MiB 32.2ms 3.5ms 9.26x 53.75 MiB 10.21 MiB 0.19x 0.05 MiB/s 0.44 MiB/s
codex daily --offline --json 0.00 MiB 34.0ms 2.8ms 12.28x 53.50 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.31 MiB/s
codex session --offline --json 0.00 MiB 28.7ms 2.8ms 10.33x 53.50 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.31 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 342.5ms 251.9ms 1.36x 946.34 MiB 954.34 MiB 1.01x 2.94 GiB/s 4.00 GiB/s
codex --offline --json 1.01 GiB 116.8ms 90.9ms 1.28x 403.29 MiB 411.30 MiB 1.02x 8.62 GiB/s 11.08 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: f6be3f86692f
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 283.4ms 3.55 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 237.6ms 4.24 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 114.2ms 8.82 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 87.6ms 11.49 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 32.6ms 33.8ms 0.97x 53.75 MiB 53.50 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
claude session --offline --json 0.00 MiB 33.3ms 36.1ms 0.92x 53.75 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.04 MiB/s
codex daily --offline --json 0.00 MiB 27.9ms 28.5ms 0.98x 54.00 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 29.6ms 28.2ms 1.05x 54.00 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 316.4ms 281.4ms 1.12x 1014.35 MiB 946.34 MiB 0.93x 3.18 GiB/s 3.58 GiB/s
codex --offline --json 1.01 GiB 115.2ms 118.0ms 0.98x 403.29 MiB 445.30 MiB 1.10x 8.74 GiB/s 8.53 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

actionlint:ignore inline comments cannot suppress syntax-check errors.
The docs state they only work for expression-evaluation and
job-dependency errors, confirmed by two failed attempts in this branch.

Restore the global -ignore pattern and add a detailed comment explaining:
- why inline suppression is not an option for this error kind
- why the risk of masking real errors is bounded (runtime always catches
  a step with no run:/uses:)

Co-authored-by: Codesmith <[email protected]>
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 3359a7886fcb
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 305.0ms 3.30 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 268.6ms 3.75 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 116.9ms 8.61 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.9ms 11.08 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 33.6ms 32.1ms 1.05x 53.75 MiB 53.50 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
claude session --offline --json 0.00 MiB 34.4ms 35.3ms 0.98x 53.50 MiB 53.75 MiB 1.00x 0.04 MiB/s 0.04 MiB/s
codex daily --offline --json 0.00 MiB 30.2ms 29.6ms 1.02x 53.75 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 30.4ms 30.3ms 1.00x 53.75 MiB 54.00 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 323.2ms 299.8ms 1.08x 944.34 MiB 932.33 MiB 0.99x 3.11 GiB/s 3.36 GiB/s
codex --offline --json 1.01 GiB 126.6ms 124.2ms 1.02x 415.29 MiB 409.29 MiB 0.99x 7.95 GiB/s 8.11 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 3359a7886fcb
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 274.6ms 3.67 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 227.1ms 4.43 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 112.1ms 8.98 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 85.6ms 11.77 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 39.2ms 5.6ms 6.95x 54.00 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.27 MiB/s
claude session --offline --json 0.00 MiB 36.9ms 4.3ms 8.69x 53.75 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.36 MiB/s
codex daily --offline --json 0.00 MiB 33.0ms 2.7ms 12.31x 53.50 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.32 MiB/s
codex session --offline --json 0.00 MiB 29.1ms 2.6ms 11.24x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.33 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 312.3ms 258.8ms 1.21x 952.34 MiB 932.34 MiB 0.98x 3.22 GiB/s 3.89 GiB/s
codex --offline --json 1.01 GiB 112.4ms 89.2ms 1.26x 407.29 MiB 403.29 MiB 0.99x 8.96 GiB/s 11.29 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 2 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread nix/treefmt.nix
The broad 'step must run script with run/uses section' pattern suppressed
that error across all workflow files. Narrow it by prefixing the regex
with 'ci\.yaml' so it only matches errors in the one file that
intentionally uses wait-all:. Missing run:/uses: in any other workflow
file will still be caught by actionlint.

Co-authored-by: Codesmith <[email protected]>
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 6d9aae8f7901
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 304.0ms 3.31 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 273.8ms 3.68 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 113.7ms 8.86 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 85.8ms 11.73 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 33.3ms 7.4ms 4.53x 53.50 MiB 10.20 MiB 0.19x 0.05 MiB/s 0.21 MiB/s
claude session --offline --json 0.00 MiB 36.3ms 4.4ms 8.20x 53.75 MiB 10.20 MiB 0.19x 0.04 MiB/s 0.35 MiB/s
codex daily --offline --json 0.00 MiB 31.9ms 2.6ms 12.37x 53.75 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.33 MiB/s
codex session --offline --json 0.00 MiB 31.1ms 2.5ms 12.41x 53.50 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.34 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 321.4ms 226.6ms 1.42x 946.34 MiB 960.33 MiB 1.01x 3.13 GiB/s 4.44 GiB/s
codex --offline --json 1.01 GiB 114.3ms 89.8ms 1.27x 421.29 MiB 411.29 MiB 0.98x 8.81 GiB/s 11.21 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 6d9aae8f7901
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 278.7ms 3.61 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 244.1ms 4.12 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 114.4ms 8.80 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 87.4ms 11.52 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 38.3ms 36.1ms 1.06x 53.50 MiB 54.00 MiB 1.01x 0.04 MiB/s 0.04 MiB/s
claude session --offline --json 0.00 MiB 33.4ms 32.0ms 1.04x 53.75 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 32.3ms 31.0ms 1.04x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 31.2ms 30.1ms 1.04x 53.75 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 321.9ms 285.6ms 1.13x 930.34 MiB 924.34 MiB 0.99x 3.13 GiB/s 3.53 GiB/s
codex --offline --json 1.01 GiB 113.1ms 116.1ms 0.97x 405.29 MiB 437.30 MiB 1.08x 8.90 GiB/s 8.67 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

The Nix indented string ci\.yaml was being double-escaped through the
Nix -> TOML -> actionlint pipeline, causing the Go regex to look for a
literal backslash before the dot (ci\.yaml) rather than the actual
filename (ci.yaml). Switching to an unescaped dot in a regular Nix
string fixes the match. The dot is a regex wildcard but functionally
only matches the literal dot in ci.yaml in practice.

Co-authored-by: Codesmith <[email protected]>
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 9a8e0da2da95
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 298.1ms 3.38 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 271.9ms 3.70 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 115.0ms 8.76 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 85.6ms 11.76 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 35.1ms 36.8ms 0.95x 53.75 MiB 53.50 MiB 1.00x 0.04 MiB/s 0.04 MiB/s
claude session --offline --json 0.00 MiB 30.1ms 31.6ms 0.95x 53.75 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 29.8ms 28.6ms 1.04x 53.50 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 30.3ms 29.9ms 1.01x 53.75 MiB 54.00 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 330.8ms 273.4ms 1.21x 944.34 MiB 954.33 MiB 1.01x 3.04 GiB/s 3.68 GiB/s
codex --offline --json 1.01 GiB 115.4ms 119.3ms 0.97x 423.29 MiB 425.30 MiB 1.00x 8.73 GiB/s 8.44 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 9a8e0da2da95
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 311.1ms 3.24 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 240.4ms 4.19 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 125.6ms 8.01 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 93.9ms 10.72 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 33.8ms 7.9ms 4.28x 53.75 MiB 10.20 MiB 0.19x 0.05 MiB/s 0.20 MiB/s
claude session --offline --json 0.00 MiB 33.3ms 4.8ms 6.92x 54.00 MiB 10.21 MiB 0.19x 0.05 MiB/s 0.32 MiB/s
codex daily --offline --json 0.00 MiB 32.9ms 3.1ms 10.76x 53.50 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.28 MiB/s
codex session --offline --json 0.00 MiB 30.6ms 2.8ms 10.84x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.30 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 346.1ms 291.2ms 1.19x 970.34 MiB 950.34 MiB 0.98x 2.91 GiB/s 3.46 GiB/s
codex --offline --json 1.01 GiB 121.3ms 97.2ms 1.25x 411.29 MiB 413.29 MiB 1.00x 8.30 GiB/s 10.36 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

actionlint's -ignore matches the error message text only, not the file
path, so a 'ci.yaml.*' regex prefix can never match and the wait-all
syntax-check error keeps resurfacing, failing nix flake check. Restore the
plain message regex (proven green at 6d9aae8). Narrowing the ignore to a
single file would need a real actionlint config (.github/actionlint.yaml
paths.ignore), not a -ignore regex prefix.
@ryoppippi
ryoppippi merged commit f5cd84c into main Jun 27, 2026
14 of 15 checks passed
@ryoppippi
ryoppippi deleted the ci/parallel-steps branch June 27, 2026 13:16
@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 0fe4e2495530
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 313.2ms 3.21 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 240.4ms 4.19 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 119.5ms 8.42 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 87.9ms 11.45 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 36.3ms 4.7ms 7.68x 54.00 MiB 12.21 MiB 0.23x 0.04 MiB/s 0.33 MiB/s
claude session --offline --json 0.00 MiB 34.9ms 4.8ms 7.23x 53.50 MiB 10.21 MiB 0.19x 0.04 MiB/s 0.32 MiB/s
codex daily --offline --json 0.00 MiB 30.7ms 2.6ms 11.71x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.33 MiB/s
codex session --offline --json 0.00 MiB 30.8ms 2.7ms 11.30x 53.75 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.32 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 328.0ms 241.5ms 1.36x 950.34 MiB 960.34 MiB 1.01x 3.07 GiB/s 4.17 GiB/s
codex --offline --json 1.01 GiB 116.3ms 89.0ms 1.31x 399.29 MiB 425.29 MiB 1.07x 8.66 GiB/s 11.31 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: 0fe4e2495530
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 259.4ms 3.88 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 263.3ms 3.82 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 123.0ms 8.19 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 90.4ms 11.14 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 39.6ms 30.7ms 1.29x 53.75 MiB 53.50 MiB 1.00x 0.04 MiB/s 0.05 MiB/s
claude session --offline --json 0.00 MiB 29.2ms 29.4ms 0.99x 53.50 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.05 MiB/s
codex daily --offline --json 0.00 MiB 32.9ms 32.4ms 1.02x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 29.0ms 32.0ms 0.91x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 335.1ms 284.0ms 1.18x 938.34 MiB 934.34 MiB 1.00x 3.00 GiB/s 3.54 GiB/s
codex --offline --json 1.01 GiB 113.1ms 118.5ms 0.96x 407.29 MiB 413.29 MiB 1.01x 8.90 GiB/s 8.50 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB -0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: d0975d66b4c7
Base SHA: a98e37476723

This compares the Rust PR release binary against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 283.4ms 3.55 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 260.0ms 3.87 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 114.0ms 8.83 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 87.0ms 11.57 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 32.8ms 6.9ms 4.74x 53.75 MiB 10.21 MiB 0.19x 0.05 MiB/s 0.22 MiB/s
claude session --offline --json 0.00 MiB 29.1ms 4.4ms 6.56x 53.50 MiB 10.20 MiB 0.19x 0.05 MiB/s 0.35 MiB/s
codex daily --offline --json 0.00 MiB 27.3ms 3.1ms 8.75x 53.75 MiB 8.20 MiB 0.15x 0.03 MiB/s 0.27 MiB/s
codex session --offline --json 0.00 MiB 28.1ms 2.8ms 10.20x 53.75 MiB 8.19 MiB 0.15x 0.03 MiB/s 0.31 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published native ccusage binary from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 302.7ms 271.5ms 1.11x 956.34 MiB 952.34 MiB 1.00x 3.33 GiB/s 3.71 GiB/s
codex --offline --json 1.01 GiB 112.9ms 94.4ms 1.20x 411.29 MiB 399.29 MiB 0.97x 8.92 GiB/s 10.66 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

@github-actions

Copy link
Copy Markdown
Contributor

ccusage performance comparison

PR SHA: d0975d66b4c7
Base SHA: a98e37476723

This compares the PR package against the configured base package on the same CI runner.

Package runtime diagnostics

Compares the PR package wrapper, the installed native optional dependency binary, and the workspace release binary on the same large fixture. This identifies whether slow package results come from JavaScript wrapper overhead, the published native binary build, or the Rust core itself.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
All rows run --offline --json, measured by hyperfine with 0 warmups and 1 runs. This isolates wrapper overhead from the installed native optional dependency and the workspace release binary built on the runner.

Command Runtime Input Median Throughput Samples
claude --offline --json Package wrapper 1.01 GiB 275.8ms 3.65 GiB/s 1
claude --offline --json Installed native binary 1.01 GiB 261.9ms 3.84 GiB/s 1
codex --offline --json Package wrapper 1.01 GiB 116.0ms 8.68 GiB/s 1
codex --offline --json Installed native binary 1.01 GiB 87.7ms 11.48 GiB/s 1

Committed fixture performance

Committed small fixtures for stable PR-to-PR feedback and explicit Claude/Codex command coverage.

Fixtures: Claude apps/ccusage/test/fixtures/claude (0.00 MiB, 2 files), Codex apps/ccusage/test/fixtures/codex (0.00 MiB, 1 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 2 warmups and 7 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude daily --offline --json 0.00 MiB 32.5ms 34.8ms 0.94x 53.50 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.04 MiB/s
claude session --offline --json 0.00 MiB 33.8ms 35.1ms 0.96x 53.50 MiB 53.75 MiB 1.00x 0.05 MiB/s 0.04 MiB/s
codex daily --offline --json 0.00 MiB 27.7ms 29.2ms 0.95x 53.75 MiB 53.75 MiB 1.00x 0.03 MiB/s 0.03 MiB/s
codex session --offline --json 0.00 MiB 30.4ms 30.7ms 0.99x 53.75 MiB 53.50 MiB 1.00x 0.03 MiB/s 0.03 MiB/s

Large real-world-shaped fixture performance

Generated fixtures shaped from aggregate local log statistics: thousands of JSONL files, many small sessions, and a long tail of larger sessions. No real prompts, paths, or outputs are stored in the fixtures.

Fixtures: Claude /home/runner/_work/_temp/ccusage-large-fixture (1.01 GiB, 2597 files), Codex /home/runner/_work/_temp/ccusage-large-codex-fixture (1.01 GiB, 2597 files)
Base runs the published ccusage package from pkg.pr.new, installed before measurement; PR runs the published ccusage package from pkg.pr.new, installed before measurement. Both run --offline --json, measured by hyperfine with 0 warmups and 1 runs.
Peak RSS is measured separately with /usr/bin/time using 1 runs. Lower RSS ratios are better.

Command Input Base median PR median PR vs base Base peak RSS PR peak RSS PR/base RSS Base throughput PR throughput
claude --offline --json 1.01 GiB 315.3ms 284.8ms 1.11x 952.34 MiB 924.34 MiB 0.97x 3.19 GiB/s 3.54 GiB/s
codex --offline --json 1.01 GiB 117.1ms 126.1ms 0.93x 415.29 MiB 397.29 MiB 0.96x 8.60 GiB/s 7.99 GiB/s

Artifact size

Artifact Base PR Delta Ratio
packed ccusage-*.tgz 18.25 KiB 18.25 KiB +0.00 KiB 1.00x
installed native package binary 4026.25 KiB 4026.25 KiB +0.00 KiB 1.00x

Lower medians and smaller artifacts are better. CI runner noise still applies; use same-run ratios as directional PR feedback, not release guarantees.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant