From b129b90a8d36a5c67e7d992c7dbc90ea8b405896 Mon Sep 17 00:00:00 2001 From: Cameron Smith Date: Sat, 29 Aug 2026 14:38:28 -0400 Subject: [PATCH] atomic: 0.9.15 -> 0.9.16 Run via `nix run .#update-atomic`, which resolved npm's latest dist-tag to 0.9.16 (next is 0.9.17-alpha.1, out of scope: the script consumes the stable tag by construction and takes no version argument). All four artifacts the script derives moved together: manifest.json, the src hash, npmDepsHash, and a regenerated npm-dist-repairs.patch carrying 21 references to 0.9.16 and no 0.9.15 remnants. Fix the tests.help usage assertion, which upstream falsified. atomic 0.9.16 documents a `--` end-of-options separator, so the usage line at packages/coding-agent/src/cli/args.ts:262 went from atomic [options] [@files...] [messages...] to atomic [options] [--] [@files...] [messages...] The literal grep therefore failed while --version and the other two help assertions passed. Updating the literal keeps the assertion severe rather than loosening it to a substring: it is what caught this change. Correct two stale counts in the header comment. The patch backfills integrity for 10 shrinkwrap entries, not 9, and they are not all atomic-natives* - @bastani/pi-ai is among them, and already was at 0.9.15, so "the 9 @bastani/atomic-natives* entries" was wrong before this bump. The removed devDependencies were 12 at 0.9.15 and are 10 at 0.9.16 (upstream dropped @types/diff and @types/ms). Both counts are now stated as mechanism rather than as numbers, since update.sh selects entries by the absence of `integrity` rather than by name and any fixed count goes stale at the next bump. The "lockfileVersion 3, 359 packages" claim was re-checked against the 0.9.16 tarball and still holds. Verification: `nix build -L --no-link .#atomic .#atomic.tests.help` passes, with versionCheckHook reporting 0.9.16 from the built binary. Checks run: package-atomic, package-atomic-test-help, treefmt (a .nix and a .sh file changed), and atomic-agent-environment-structural as the only other atomic-named check. The full check set is deliberately not run: this change touches one package directory and no shared infrastructure, so the remaining checks could not fail on account of it. --- pkgs/by-name/atomic/manifest.json | 2 +- pkgs/by-name/atomic/npm-dist-repairs.patch | 66 +++++++++++----------- pkgs/by-name/atomic/package.nix | 18 +++--- pkgs/by-name/atomic/update.sh | 2 +- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/pkgs/by-name/atomic/manifest.json b/pkgs/by-name/atomic/manifest.json index 099f153dd..048bcb583 100644 --- a/pkgs/by-name/atomic/manifest.json +++ b/pkgs/by-name/atomic/manifest.json @@ -1,3 +1,3 @@ { - "version": "0.9.15" + "version": "0.9.16" } diff --git a/pkgs/by-name/atomic/npm-dist-repairs.patch b/pkgs/by-name/atomic/npm-dist-repairs.patch index 04561ee47..5373fa449 100644 --- a/pkgs/by-name/atomic/npm-dist-repairs.patch +++ b/pkgs/by-name/atomic/npm-dist-repairs.patch @@ -2,95 +2,93 @@ +++ b/npm-shrinkwrap.json @@ -519,6 +519,7 @@ "node_modules/@bastani/atomic-natives": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.15.tgz", -+ "integrity": "sha512-bxRSo4vHenFYMKyybnRbX89u887uyVttDu9cA0KcgJHv/6isORDOrHhxn54amWObyA7t/xIRLSjMwc9kT9VIpw==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives/-/atomic-natives-0.9.16.tgz", ++ "integrity": "sha512-bSVR578xAe0cOvNGie66xt5zRx282K/3E7OR8bioPJjnztmkdlCyPXfp9/tE/8gWiHtB+di1p43le6mzVBdNWg==", "license": "MIT", "optionalDependencies": { - "@bastani/atomic-natives-darwin-arm64": "0.9.15", + "@bastani/atomic-natives-darwin-arm64": "0.9.16", @@ -538,6 +539,7 @@ "node_modules/@bastani/atomic-natives-darwin-arm64": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.15.tgz", -+ "integrity": "sha512-WS/4DG8P9dp1DVQ/Y7SEBVF9bea00og9H25gl8ZzXzyb3neOsObnOa4Xll3KqACJLptWyTaAK5AqvxqLIQFiAQ==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-arm64/-/atomic-natives-darwin-arm64-0.9.16.tgz", ++ "integrity": "sha512-r/ZYrD/+2UULEOoQWXCSPkYUOosC3rmoMsWgNaZoPN63324B8kmvTYDAe4OzdF8+dHKd3/Ta5aLdp/Q1z/gOSA==", "license": "MIT", "os": [ "darwin" @@ -550,6 +552,7 @@ "node_modules/@bastani/atomic-natives-darwin-x64": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.15.tgz", -+ "integrity": "sha512-elhKF3SjE/DRHnDGTburYEl2/uqYmREcXjtjIxn/GXdh/K0sYdzrPNgzmyBesihJRRDOCzQYzT9LZU01/qFu/g==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-darwin-x64/-/atomic-natives-darwin-x64-0.9.16.tgz", ++ "integrity": "sha512-2/ISDvIBSjRdlYIU880A8OGF9BEemsf8+qp+IG2LtmELku1FPQd8JUvjlW6QQF5RMc3cd4o2vbUpV91FgGhWuQ==", "license": "MIT", "os": [ "darwin" @@ -562,6 +565,7 @@ "node_modules/@bastani/atomic-natives-linux-arm64-gnu": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.15.tgz", -+ "integrity": "sha512-CIRA3DyPw3NB5vBwBk60zf53+zRtEeesCZd/fFxwbvYypfqbjFxVjgSFqf2h/QP3S+Kdn5jOWuhNR/ZLaUL1cQ==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-gnu/-/atomic-natives-linux-arm64-gnu-0.9.16.tgz", ++ "integrity": "sha512-pq8ci66yTnzhtrg6P54KJj6hJoKlaYPcbd0U7TmKHazWSxJqoh+IU/JJXb2k25r1G1jIfMbGZEhe16sSqNHAsQ==", "license": "MIT", "os": [ "linux" @@ -577,6 +581,7 @@ "node_modules/@bastani/atomic-natives-linux-arm64-musl": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.15.tgz", -+ "integrity": "sha512-E6HNYncsh2ddU9THa4yWCF+2tE7H5lKnJdNlRAC/0nL6WmXYEDjMCqUtn7WssJfgj7AoA06Sm0bmjSQsdDjSjQ==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-arm64-musl/-/atomic-natives-linux-arm64-musl-0.9.16.tgz", ++ "integrity": "sha512-jSq26oc+EiQhp6jUkVY9iASF1nHYf6cYLJGNfj00G3jt437slfa0IKmSKK2fU2+DuiySRL7fNxmlrvtiLDCKMg==", "license": "MIT", "os": [ "linux" @@ -592,6 +597,7 @@ "node_modules/@bastani/atomic-natives-linux-x64-gnu": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.15.tgz", -+ "integrity": "sha512-dgVMJ87VGx/z2U1WYJGNXe5T+dsStGKuyg4Z3xftA/TMeNcVmZVd4fnh1GROfn8r3alF9rQ4llw/U9f/0nPNZA==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-gnu/-/atomic-natives-linux-x64-gnu-0.9.16.tgz", ++ "integrity": "sha512-ts/9jsfV1QdxfNyewcbFBPzo/3LeO9n1Ol+rz3+SumdWFvlYx3v37QbBm2hWJsAXQWYpHsbbCZAtNqvhIhfexw==", "license": "MIT", "os": [ "linux" @@ -607,6 +613,7 @@ "node_modules/@bastani/atomic-natives-linux-x64-musl": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.15.tgz", -+ "integrity": "sha512-8l3EcN4v+jc/X7BI8Afcp+LoYQb7ZpmwFfCUBDD40c0zUknnILxVy7B/xsVZQ8di3GReEFdmTbrAR+BfhVEvDA==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-linux-x64-musl/-/atomic-natives-linux-x64-musl-0.9.16.tgz", ++ "integrity": "sha512-G2bsvsBlJK2Jf/5O8cOQwjb/JlPHXCsKGNFjmHOz8f1zigogUad3zi0do8vy5pHF27QBeamYeQ0w1WhCohJtZA==", "license": "MIT", "os": [ "linux" @@ -622,6 +629,7 @@ "node_modules/@bastani/atomic-natives-win32-arm64-msvc": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.15.tgz", -+ "integrity": "sha512-yjPLs/QTzSOXTETJHcG32wLA8wimtnsGSMgDk513OS/jU6YXbyFR8+4+k9WfTE9gT24k33Om5VL0A9h2Ccz7KQ==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-arm64-msvc/-/atomic-natives-win32-arm64-msvc-0.9.16.tgz", ++ "integrity": "sha512-ELMYn1UhF9rLRIYq0Veyy1MOubPG/otJVAIPBGO75a+z3hcYg1De1tmQ29Z/pHudEaOYKgA098H6kCn1UQZZ+A==", "license": "MIT", "os": [ "win32" @@ -634,6 +642,7 @@ "node_modules/@bastani/atomic-natives-win32-x64-msvc": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.15.tgz", -+ "integrity": "sha512-1XMMujvnwkrQMxu9EmVyJ6mu7MpLOH7XHkjcY/ABRZvG5QX8Rib+o7Y02BKqCkFK8uH7HlRSt+0obzIUbD2aCg==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/atomic-natives-win32-x64-msvc/-/atomic-natives-win32-x64-msvc-0.9.16.tgz", ++ "integrity": "sha512-BSYQR7JP3sy/hh1kRARERUmVEof/Ke6hHIFJtRWYydSmLprQg5QWTVRhlamTZLRBUk8GZfd0SsXg0UqsxLhZ8Q==", "license": "MIT", "os": [ "win32" @@ -646,6 +655,7 @@ "node_modules/@bastani/pi-ai": { - "version": "0.9.15", - "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.15.tgz", -+ "integrity": "sha512-s8d0VlKN3iTwsp7mKcr1n4Ew+/XWxB4FZkEmTBMW2wV15nlSVtmuINHjCiSHGC8jlAANRLww+H8f+aVb44iD3w==", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@bastani/pi-ai/-/pi-ai-0.9.16.tgz", ++ "integrity": "sha512-HhbK3GzZs+71exTD76oT/Xi+Y98k0LsAYVIJe63ORDP7Wx9lI5LfEWk1PN086inSyxpOpFc1tJN0IsSEUcERng==", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "0.91.1", --- a/package.json +++ b/package.json -@@ -129,20 +129,7 @@ +@@ -125,18 +125,7 @@ "optionalDependencies": { "@mariozechner/clipboard": "0.3.9" }, - "devDependencies": { - "@types/cross-spawn": "6.0.6", -- "@types/diff": "7.0.2", - "@types/hosted-git-info": "3.0.5", -- "@types/ms": "2.1.0", - "@types/node": "24.12.4", - "@types/proper-lockfile": "4.1.4", - "@types/semver": "7.7.1", diff --git a/pkgs/by-name/atomic/package.nix b/pkgs/by-name/atomic/package.nix index 699cdeadc..630a35027 100644 --- a/pkgs/by-name/atomic/package.nix +++ b/pkgs/by-name/atomic/package.nix @@ -19,11 +19,13 @@ # over the shipped npm-shrinkwrap.json (lockfileVersion 3, 359 packages). # # Two upstream-shrinkwrap repairs live in npm-dist-repairs.patch: -# - the prepublishOnly generator emits the 9 @bastani/atomic-natives* -# entries without `integrity`, which nix's prefetch-npm-deps parser refuses -# outright ("non-git dependencies should have associated integrity"); the -# patch adds the registry's published sha512 for exactly those 9 tarballs. -# - the published package.json retains 12 devDependencies the generated +# - the prepublishOnly generator emits the workspace-internal @bastani/* +# entries (the atomic-natives* platform set plus pi-ai) without +# `integrity`, which nix's prefetch-npm-deps parser refuses outright +# ("non-git dependencies should have associated integrity"); the patch adds +# the registry's published sha512 for each. update.sh selects them by the +# absence of `integrity` rather than by name, so the set tracks upstream. +# - the published package.json retains devDependencies the generated # shrinkwrap does not cover, so `npm ci` tries to resolve them from the # registry and dies ENOTCACHED; dist/ is already built, so they are dead # weight and are removed. @@ -58,12 +60,12 @@ buildNpmPackage (finalAttrs: { src = fetchurl { url = "https://registry.npmjs.org/@bastani/atomic/-/atomic-${finalAttrs.version}.tgz"; - hash = "sha256-IUhR/RS0ZniCyKvsZwkGnRh+LCFI1Wq3k2IujX2+PvQ="; + hash = "sha256-eAgebHtzXCRvcMvEFzB/yDmf3HL5sksW/39iG/UhQBY="; }; sourceRoot = "package"; nodejs = nodejs_22; - npmDepsHash = "sha256-EHtSTNyzz3Ou8WXk+IRMWxg+rPPQ8EmFD8TDJ+jOnu0="; + npmDepsHash = "sha256-1UIAt5YDuL86AnAc38fwKsPDeuCIOBbd8oOec+FMLuM="; postPatch = '' patch -p1 < ${./npm-dist-repairs.patch} @@ -118,7 +120,7 @@ buildNpmPackage (finalAttrs: { ${lib.getExe finalAttrs.finalPackage} --help > help.txt grep -q "AI coding assistant" help.txt - grep -q "atomic \[options\] \[@files\.\.\.\] \[messages\.\.\.\]" help.txt + grep -q "atomic \[options\] \[--\] \[@files\.\.\.\] \[messages\.\.\.\]" help.txt grep -q "Install extension source and add to settings" help.txt touch "$out" diff --git a/pkgs/by-name/atomic/update.sh b/pkgs/by-name/atomic/update.sh index 4fba550ef..07081dac6 100755 --- a/pkgs/by-name/atomic/update.sh +++ b/pkgs/by-name/atomic/update.sh @@ -49,7 +49,7 @@ digest = "sha512-" + base64.b64encode( assert digest == meta["dist"]["integrity"], "tarball does not match registry integrity" # Repair 1: backfill integrity for entries the shrinkwrap generator left -# without one (all of them are @bastani/atomic-natives*). +# without one (the workspace-internal @bastani/* packages). shrink_src = open(f"{pkg_dir}/npm-shrinkwrap.json").read() shrink = json.loads(shrink_src) integ = {}