From d8b1c01ff0e028ea1bcdbbaf24af7b1ca41c2a27 Mon Sep 17 00:00:00 2001 From: garrytan Date: Thu, 8 Oct 2026 06:38:13 +0000 Subject: [PATCH] chore(release): v1.91.42.0 /cso lifts its file-count ceiling Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++ TODOS.md | 4 ++-- VERSION | 2 +- agents-digest/gstack-AGENTS.md | 2 +- package.json | 2 +- 5 files changed, 47 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d215eff5d..187f74de0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,47 @@ # Changelog +## [1.91.42.0] - 2026-10-08 + +**/cso lifts its file-count ceiling: repositories with tens of thousands of files reach the audit.** +**Repositories with more than 64 MiB of tracked source, or with a tracked symlink, are still refused, and the message now says which limit applied and what to do.** + +/cso refused any repository with more than about 3,100 files before an audit started, with "Snapshot manifest exceeds the 1 MiB private-state admission limit" (#3068). The snapshot's file list shared a 1 MiB limit with every other private file /cso keeps, and so did the report it writes, the list of files with secret-like findings, and Git's own file listing. The snapshot list now has its own 16 MiB limit (about 50,000 files) and is written compactly. Per-file lists in the report and the evidence file keep their first entries and end with one line saying how many more there are. The counts in the report stay exact. + +### The numbers that matter + +Shallow clones measured on 2026-10-08 with `start --offline`, before and after this release: + +| Repository | Files | Tracked source | Before | After | +|---|---|---|---|---| +| sveltejs/svelte | 9,182 | 6.9 MiB | refused (file list over 1 MiB) | audit starts; 2.8 MiB file list, 10 KB report | +| facebook/react | 7,252 | 38.7 MiB | refused (file list over 1 MiB) | audit starts; 2.3 MiB file list, 53 KB report | +| laravel/framework | 3,439 | 25.7 MiB | refused (file list over 1 MiB) | audit starts; 1.0 MiB file list, 30 KB report | +| django/django | 7,085 | 44.0 MiB | refused (4 tracked symlinks) | refused (symlinks); starts once they are removed | +| rails/rails | 5,007 | 38.1 MiB | refused (1 tracked symlink) | refused (symlink); starts once it is removed | +| hashicorp/terraform | 5,562 | 25.6 MiB | refused (10 tracked symlinks) | refused (symlinks); starts once they are removed | +| grafana/grafana | 23,749 | 210.7 MiB | refused (Git file listing over 1 MiB) | refused (symlinks); then the 64 MiB source cap | +| microsoft/vscode | 20,238 | 540.0 MiB | refused (Git file listing over 1 MiB) | refused (symlink); then the 64 MiB source cap | + +On a synthetic 5,000-file repository with long nested paths, where most files are excluded or withheld and 1,000 files carry secret-like strings, the report is 267 KB and the evidence file 524 KB. Unbounded, the same lists took 1.97 MB and 1.68 MB, over the 1 MiB limit. A free test drives that shape through start, inspect, findings, finish and recheck. + +### What this means for you + +Run `/gstack-upgrade`, then run `/cso` on a repository with more than 3,100 files: the audit starts instead of stopping at the snapshot. If /cso still refuses, the message names the limit (the 16 MiB snapshot list, the 64 MiB source cap, or a symlink), the measured size, what counts toward it and the next step. No setting raises these limits yet; the 64 MiB source cap is tracked in #2993, and `docs/troubleshooting.md#cso-capacity` explains all three. + +### Itemized changes + +#### Fixed +- /cso refused repositories with more than about 3,100 files before an audit. The snapshot file list is written compactly and capped at 16 MiB; every other private file keeps its 1 MiB limit. Snapshot lists written by earlier releases still load in recheck and inspect. (#3068) +- Report coverage gaps, exclusions and transformations, and the evidence file of secret-like findings, keep their first entries and end with an omitted count, so a large repository no longer overflows the report partway through an audit. +- Git's file listings during capture are allowed up to the snapshot list size, so repositories past roughly 11,000 to 23,000 files, depending on path length (7,000 to 10,000 with `--diff` or `--base`), no longer fail with "Could not read bounded Git metadata: ls-tree exceeded the output limit". +- The snapshot-list and 64 MiB source-cap errors state the measured value, the limit, what counts toward it, the next step and the #2993 link. A single file that would cross 64 MiB now gets the same message before it is read. (#2993) + +#### For contributors +- `readJson` takes a per-artifact size cap. `readSnapshotManifest(dir)` is the only reader of `snapshot.json`, and a source test fails on a direct read. +- `boundedList` in `lib/cso/state.ts` bounds a per-entry list by the pretty-printed bytes it adds and appends one omitted-count item. +- `runProcess` lets raw callers opt in to up to 16 MiB of output; everything else keeps the `MAX_OUTPUT` clamp, which stays 1 MiB. +- Thanks to @almoatasemm for the report (#3068) and @saanjay for the capacity diagnosis of the manifest, reader and source caps (#2993). + ## [1.91.36.0] - 2026-10-07 **Python and Rails repairs can now reach `runtime_tested` and replay, and a killed verification leaves nothing behind.** diff --git a/TODOS.md b/TODOS.md index 3f634b398..ad50e32dd 100644 --- a/TODOS.md +++ b/TODOS.md @@ -4,11 +4,11 @@ ### P1/P2: /cso capacity follow-ups (filed 2026-10-08) -Left open by v1.91.37.0, which lifted the snapshot file-count ceiling. +Left open by v1.91.42.0, which lifted the snapshot file-count ceiling. - **Tracked symlinks refuse the whole /cso run** — `capture()` fails closed on any tracked symlink ("Symlink or special source file"). 5 of 8 mid-size OSS - repos measured for v1.91.37.0 stop there (django, rails, terraform, grafana, + repos measured for v1.91.42.0 stop there (django, rails, terraform, grafana, vscode; 1-10 symlinks each, mostly test fixtures). Recording them as unread exclusions in the manifest, like dependency trees, is a security design call for Garry. **Effort:** M. **Priority:** P1. diff --git a/VERSION b/VERSION index fe477d414..4db65be2e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.91.36.0 +1.91.42.0 diff --git a/agents-digest/gstack-AGENTS.md b/agents-digest/gstack-AGENTS.md index 291e0e985..46c28c53b 100644 --- a/agents-digest/gstack-AGENTS.md +++ b/agents-digest/gstack-AGENTS.md @@ -1,4 +1,4 @@ -# gstack digest v1.91.36.0 — regenerate/re-copy after upgrading gstack +# gstack digest v1.91.42.0 — regenerate/re-copy after upgrading gstack Behavioral rules from gstack (https://github.com/garrytan/gstack), compressed for agent hosts without a full skill install. The full skills add workflows, diff --git a/package.json b/package.json index 8b401f41a..15c4c9010 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.91.36", + "version": "1.91.42", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module",