cli.sgit.ai / Research / Response to "sgit issues found on 14 October 2026", and the comms-vault performance report

Response to "sgit issues found on 14 October 2026", and the comms-vault performance report

Date2026-10-14 · 21:40 UTCKindfixTopicspull fetch large-filesWritten bythe sgit-ai CLI team (Claude Code sessions), for Dinis CruzSourceteam/humans/dinis_cruz/claude-code-web/10/14/response__sgit-issues-2026-10-14.md in SGit-AI__CLI at 5597526. Published here as written; the CLI repository is where the work happened.

Date: 14 Oct 2026. Code: dev at 5e85205 plus the fixes on claude/charming-babbage-5hzcxq. Vault used: the comms / DC collaboration vault (y8pwtjlw on dev.send.sgraph.ai), read-only: cloned, measured, nothing pushed.

The comms vault today

6 Oct14 Oct
Objects in the store18,72035,423
Commits6261,227
Trees—16,391
Blobs9,40416,315
Files in the working copy—5,101
On disk after a full clone173 MB527 MB

Listing the store takes 21 s on its own. It is a different vault from a week ago.

What was sequential, and what was not

A full sgit clone was not the slow path. With 0.21.0's code it took about 3½ minutes for 35,423 objects: the listing (21 s), the bulk sweep (about 140 s, 50 objects per request, 16 requests in flight), then a local tree walk (33 s of decrypting 16,391 trees), 47 late blobs (1.3 s) and the checkout (3.6 s). The progress bar moves in steps of 50, which is the batch size.

sgit pull was. Everything that goes through the pull path (pull, fetch, status's chain fetch, widen) had two sequential loops:

  1. One request per commit. The commit walk fetches wave by wave, each wave being the previous wave's parents, so a linear history of N new commits is N round trips before a single tree arrives. On the comms vault that is 1,227 requests.
  2. One request per blob. After the graph walk, blobs were fetched with api.read() one at a time, inside a loop. 16,315 requests.

Measured on the live vault, fetching the whole head into an empty store (the worst case of a pull far behind), unmodified 0.21.0 code against the fix:

Before (0.21.0)After
Commit and tree walk189 sincluded below
Blobs5.4 per second: 818 in 150 s, so about 50 min for 16,315included below
Whole fetchabout 53 minutes (projected from the capped run)186 s
Objects fetched—35,423, every one verified before it was written

An agent that is a day behind on this vault is behind by hundreds of commits and thousands of blobs. That is what they were reporting.

The fix

The four reported issues

#IssueSideStatus
1Disk mode: every append-lane write scans the whole storeserverConfirmed from the server code: Storage_FS__Local_Disk.folder__files__all iterates the entire store and filters by prefix; append() calls it on every write for the 1,000-entry cap. In the brief to the SG/Send team.
2Files over 4 MB cannot be pushed to, or fetched on demand from, a server without S3clientFixed. presigned initiate / read-url answer 400 S3 storage mode required on memory and disk servers. Push now falls back to the batch; clone, pull, fetch and cat fall back to the read route (Vault__API.read_large). A 401/403/5xx still surfaces. Reproduced and proven on the real in-memory server with a 4.25 MB file: tests/integration/test_Large_Blob__No_S3__Integration.py fails on 0.21.0 at the push, passes now (push, full clone, sparse fetch).
3clone-headless then fetch always failsclientFixed. A headless clone holds keys and config only; fetch, ls and cat now bring the tracked head down first (index, ref, commits and trees, never blobs), the way clone --sparse does. tests/unit/sync/test_Sparse__Headless_Fetch.py. Note: on a vault with a long linear history that first fetch walks the commits one request each, as clone --sparse does; the sweep is for whole-vault clones only.
4Concurrent full clones queue on one server processserverDeployment note: the Docker entry point runs one uvicorn worker. In the brief.

The smaller observations in the report (access token on every route including append writes, caps holding under concurrency, refusals correct) need nothing from the CLI.

Verification

CheckResult
Unit4232 passed
Securitypassed
Bandit (baseline)clean
Integration, large blob on the real in-memory serverpassed (fails on 0.21.0)
Live comms vaultfull clone 3½ min; pull-path fetch of the whole head 186 s (was ~53 min)

Files

This page as markdown · its source, admin/content/articles/sgit-issues-2026-10-14.md