Repository navigation
fix(nix): stop the dev shell from copying the whole repository - #1917
Conversation
The agent-skills source was built with nix-filter rooted at the repository, which forces the entire checkout into the store during every dev shell evaluation. Any edited file therefore produced a new root store path and the dev shell evaluation had to start from scratch. Use lib.fileset.toSource so only .agents/skills is read. The resulting agent-skills bundle store path is unchanged.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Merge Risk: ⚪ Minimal · up to
|
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
ccusage-guide | 7383ff5 | Commit Preview URL Branch Preview URL |
Oct 18 2026, 12:39 PM |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes cover the dev-shell store-copy fix in this run:
- Scoped skills source to fileset —
nix/agent-skills.nixnow buildslocalSkillswithlib.fileset.toSourceover../.agents/skillsinstead ofnix-filterfrom the repository root, so unrelated edits no longer invalidate the dev-shell evaluation. - Preserved bundle layout —
sources.localkeepssubdir = ".agents/skills"against a root-anchored source, so discovery, allowlist, selection, and bundle outputs are unchanged.
muse-spark-1.3-contributor (free via Pullfrog for OSS) | 𝕏
ccusage
@ccusage/ccusage-darwin-arm64
@ccusage/ccusage-darwin-x64
@ccusage/ccusage-linux-arm64
@ccusage/ccusage-linux-x64
@ccusage/ccusage-win32-x64
commit: |
The remaining nix-filter uses map directly onto nixpkgs lib: the Rust build subset becomes a lib.fileset union, and the repository-wide check source becomes lib.cleanSourceWith with the same directory excludes. The resulting sources contain the same file lists as before.
ccusage performance comparisonPR SHA: Performance comparison skipped. Base package URL was not ready before 300.000s. Fixture performance comparison requires a base package when --base-dir is not provided. Base package: |
ccusage performance comparisonPR SHA: Performance comparison skipped. Base package URL was not ready before 300.000s. Fixture performance comparison requires a base package when --base-dir is not provided. Base package: |
There was a problem hiding this comment.
Caution
This PR introduces a Nix evaluation break in the new cleanSourceWith filter that must be fixed before merging.
Reviewed changes since the prior pullfrog review (afc6080):
- Dropped the
nix-filterflake input — removed fromflake.nixandflake.lock. - Rewrote the Rust source subset on
lib.fileset—nix/rust-src.nixnow useslib.fileset.toSourcewith alib.fileset.unionsoverrust,flake.lock,ccusage.example.json, andpackage.json, and both call sites threadlibinstead ofnixFilter. - Rewrote the repo-wide check source on
lib.cleanSourceWith—repoSrcinnix/checks.nixkeeps the samenode_modules/target/dist/coveragedirectory excludes via a basename filter. - Updated the skill-creator doc wording —
.agents/skills/skill-creator/SKILL.mdnow references thelib.filesetsource instead ofnix-filter.
muse-spark-1.3-contributor (free via Pullfrog for OSS) | 𝕏
ccusage performance comparisonPR SHA: Performance comparison skipped. Base package URL was not ready before 300.000s. Fixture performance comparison requires a base package when --base-dir is not provided. Base package: |
ccusage performance comparisonPR SHA: Performance comparison skipped. Base package URL was not ready before 300.000s. Fixture performance comparison requires a base package when --base-dir is not provided. Base package: |
Upstream tip: c76874e (2026-10-20, chore(pricing): update models.dev snapshot) Previous fork base: 0c58b88 (the upstream commit this fork was synced to) Synced 83 upstream commits on top of 0c58b88: 56 automated pricing snapshot refreshes and the following meaningful ones: 1cd29f5 chore(deps): update pnpm to v12.13.0 (ccusage#1907) e4f63ba chore(deps): update node.js to >=24.22.0 (ccusage#1908) 130e502 ci: regenerate bun.nix automatically (ccusage#1909) 259ec33 feat(adapter): report stored cost in JSON model breakdowns (ccusage#1903) c1eb448 chore: release v20.0.35 (ccusage#1901) 2a0875f ci(pricing): update snapshots on push to main and daily instead of hourly (ccusage#1914) b090428 chore(deps): update github/codeql-action action to v4.39.0 (ccusage#1912) 4dcf7f5 fix(nix): pin models-dev-gen remeda to models.dev's version and stop Renovate drift (ccusage#1915) 46edb28 fix(nix): stop the dev shell from copying the whole repository (ccusage#1917) 58ec8f1 fix(nix): let commits succeed in worktrees without a loaded dev shell (ccusage#1920) a570a6f fix(nix): vendor Cargo deps without import-from-derivation (ccusage#1918) f6d28c5 fix(antigravity): map model IDs 1418/1419 to gemini-4-argon (ccusage#1905) ce439e5 fix(antigravity): map model ID 1050 to gemini-3.1-flash-lite (ccusage#1902) e62a66f chore(deps): update pnpm to v12.14.0 (ccusage#1923) 117ae68 ci(nix): make the macOS Nix cache save a trimmed store with the Crane layers (ccusage#1921) 7a063a0 ci: shorten the Windows native build critical path (ccusage#1924) 85ebca3 perf(rust): move pricing snapshots into a leaf crate (ccusage#1922) 8fe3f47 perf(nix): build Crane layers with the binary's feature resolution (ccusage#1925) ac289aa perf(pricing): give the pricing refresh a verify-only TLS 1.3 rustls provider (ccusage#1927) d097f74 chore(deps): update rust crate rustls to 0.23.46 (ccusage#1928) f8aaf89 docs: use the compact pkg.pr.new URL for bunx previews [ci skip] (ccusage#1929) f56bb3d chore: release v20.0.36 (ccusage#1916) aaafb41 chore(deps): update dependency vitepress-plugin-group-icons to ^1.8.1 (ccusage#1931) 0861e7f fix(claude): count requestless resp_ content blocks once (ccusage#1935) 867c9f3 chore: release v20.0.37 (ccusage#1933) fa40bfd chore(deps): update songmu/tagpr action to v1.21.3 (ccusage#1937) de99d15 chore(deps): update rust crate zstd to 0.14.3 (ccusage#1936) Fork wins kept: the SQLite on-disk cache with --live-only and the per-namespace ledger, the pi adapter and its per-path namespaces, the OpenCode V2 loader, the FxHash/Cow hot paths, the table renderer, clear-cache, and the tag-only release workflow. Upstream's own release and tagpr machinery stays out. Hand-resolved conflicts: rust/adapters/claude/src/lib.rs: upstream's resp_ message-id dedupe (ccusage#1935) lands beside the fork's requestless replay and collapse_replays rules. rust/adapters/claude/src/README.md: upstream's wording for the msg_/resp_ exception. rust/Cargo.toml: zstd 0.14.3, keeping the fork's exact `=` pin style. .github/workflows/release.yaml: the fork's tag-only release, without upstream's tagpr job or the songmu/tagpr action bump. apps/ccusage/package.json, docs/package.json, package.json: keep 20.0.34; upstream's 20.0.37 bump is dropped. packages/ccusage-*/package.json (6 files): stay deleted; the fork ships no npm wrapper packages and the release workflow does not read them. rust/adapters/claude/src/daily.rs: stays deleted; the fork's daily path lives in lib.rs and shares the dedupe helper the fix changes. Fixes made while landing this sync, folded in so the merge stands green on its own: fix(ci): save the Nix store from the native build composites. The nested cache-nix-action read an empty primary-key at post-job and every native build failed; upstream's defer-save pattern is the fix. fix(rust): keep the agent-recorded cost for deleted sources. The recorded_cost ledger column carries it, so storedCost survives a deleted file. The ledger schema version stays at 2: the column is not a LedgerEntry field, so the blob layout is unchanged and the previously released binary keeps working. fix(rust): make the file fingerprint helper private, the one hawk finding. It is inherited from the pre-sync master, not introduced here. Keep 20.0.34 numbering; DO NOT push a v20.0.34 tag from this fork (release.yaml would publish fork bytes under upstream identity).

Summary
nix/agent-skills.nixbuilt the local skills source withnix-filterusing the repository root (root = ./..). That makes Nix copy the whole checkout into the store on every dev shell evaluation (source path '<repo>/' is uncacheablein-vvvvvlogs). So editing any file gave a new root store path, and the dev shell evaluation had to start from scratch.This switches to
lib.fileset.toSource { root = ./..; fileset = ../.agents/skills; }, so evaluation only reads.agents/skills.Verification
nix eval .#devShells.aarch64-darwin.default.drvPath -vvvvvafter editing an unrelated file no longer copies the repository root.drvPathis unchanged..#agent-skills-bundlebuilds to the same store path before and after the change (h5gr2073…-ccusage-agent-skills-bundle).Summary by cubic
Fixes the Nix dev shell from copying the whole repository into the store on every evaluation, and drops the
nix-filterinput entirely.nix/agent-skills.nixbuilt the local skills source withnix-filterrooted at the repository, so editing any file produced a new root store path and dev shell evaluation restarted from scratch. It now useslib.fileset.toSourceconstrained to.agents/skills; theagent-skills-bundlestore path is unchanged.nix-filteruses map onto nixpkgslib:nix/rust-src.nixbecomes alib.filesetunion andnix/checks.nixbecomeslib.cleanSourceWithwith the same directory excludes.nix-filterflake input is removed fromflake.nixandflake.lock.Written for commit 7383ff5. Summary will update on new commits.
Summary by CodeRabbit
node_modules,target,dist, andcoverage.Drop
nix-filterThe remaining
nix-filteruses are replaced with nixpkgslib, and the input is removed fromflake.nix/flake.lock:nix/rust-src.nix:lib.fileset.unionsoverrust,flake.lock,ccusage.example.json,package.json.repoSrcinnix/checks.nix:lib.cleanSourceWithwith the samenode_modules/target/dist/coveragedirectory excludes.The
srcfile lists forccusage-clippy,config-schema, andoxlintare the same as onmain.config-example,bun-nix, andagent-skillsbuild, andnix flake check --no-buildpasses.