diff --git a/TODOS.md b/TODOS.md index 114d40036..3f634b398 100644 --- a/TODOS.md +++ b/TODOS.md @@ -2,6 +2,31 @@ ## NEXT PRIORITY +### P1/P2: /cso capacity follow-ups (filed 2026-10-08) + +Left open by v1.91.37.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, + 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. +- **64 MiB aggregate source cap (#2993)** — files over 1 MiB are withheld from + the audit but still read and counted. Stream-hash them without counting + toward the cap, report them as unread coverage, and add an admission estimate + to `doctor`. grafana (211 MiB) and vscode (540 MiB) hit it once symlinks are + out of the way. A `GSTACK_CSO_SNAPSHOT_MAX_BYTES` knob was deferred with it. + **Effort:** L. **Priority:** P2. +- **`inspect` prints the whole public manifest** — about 2.8 MB of stdout for + 5,000 files, more than an agent's tool output keeps. The skill reads paths + from it, so trimming it is a skill-contract change with evals. + **Effort:** M. **Priority:** P2. +- **Repair bundles carry every transformation** — `lib/cso/verification.ts` + binds the full transformation list into a 1 MiB immutable bundle. Only + runtime verification writes bundles, and no qualified runtime catalog exists + yet. **Effort:** M. **Priority:** P3. + ### P2/P3: Oct 7 fix-wave follow-ups (filed 2026-10-07) Left open by the Oct 7 wave (docs/designs/FOLLOWUP_WAVE_2026_10_07.md), each with its reason. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 6aa2ceac9..2f28c7a53 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -674,6 +674,24 @@ Linux) with a local Docker socket. On Windows, static assessment is the supported mode; if the refusal named a user directory, install Docker Desktop under Program Files. + +### `Snapshot manifest cap exceeded: ...` / `64 MiB source cap exceeded: ...` / `Symlink or special source file: ` + +**Meaning.** /cso copies the repository into a private snapshot before any +audit starts, and refuses the whole run when the snapshot would be incomplete +or too large. Each message names the cap that applied: + +- **Snapshot manifest cap (16 MiB).** One entry per tracked or nonignored + untracked file; about 50,000 files fit. +- **64 MiB source cap.** The full size of every such file outside dependency + and VCS directories counts, including files over 1 MiB whose contents are + withheld from the audit. +- **Symlinks.** A tracked symlink anywhere in the repository stops the run. + +**Fix.** No setting raises these caps. Run /cso on a smaller checkout that +holds the code you want audited and no symlinks. Add your file count or size to +[#2993](https://github.com/garrytan/gstack/issues/2993). + ### `removed the AskUserQuestion preference hook: it breaks Conductor's native AskUserQuestion (#2207). ...`