diff --git a/Session_Summaries/2026-03-01_Upload-Pipeline-Filesystem-Consolidation.md b/Session_Summaries/2026-03-01_Upload-Pipeline-Filesystem-Consolidation.md new file mode 100644 index 0000000..7b39528 --- /dev/null +++ b/Session_Summaries/2026-03-01_Upload-Pipeline-Filesystem-Consolidation.md @@ -0,0 +1,62 @@ +# Session Summary: Upload Pipeline & Filesystem Consolidation + +Date: 2026-03-01 + +--- + +## Summary + +This session consolidated the file system architecture and resolved issues in the upload pipeline from browser to agent. + +--- + +## Filesystem Architecture + +Game server filesystem operations are handled exclusively by the agent. The API proxies all requests — it never touches the filesystem directly. + +Capabilities documented: + +- Read (list, stat, read, download) +- Write (server.properties, config/*.toml, config/*.json, config/*.properties) +- Delete (constrained to mods-removed/, mods-uploaded/, logs/) +- Upload (mods/*.jar, world/datapacks/*.zip) +- Revert (shadow backup restore) + +Shadow backups created on first write. 7-day retention, 6h cleanup cycle. + +--- + +## Provenance Tracking + +`.zlh_metadata.json` written after every upload: + +```json +{ + "mods/sodium.jar": { + "source": "user", + "uploaded_at": "2026-03-01T22:37:01Z" + } +} +``` + +`stat` responses include `source: "user" | null`. No curated inference implemented. + +--- + +## Upload Transport Fix (API Layer) + +Uploads initially failed with `502` errors when proxied from the API to the agent. + +Root cause: +The Node API upload proxy was forwarding `Content-Length` incorrectly while streaming the request body. + +Resolution: +The upload route now uses a raw Node `http.request` stream: + +- `req.pipe(proxyReq)` +- `proxyRes.pipe(res)` +- `Content-Type` preserved +- `Content-Length` not forwarded +- Upload timeout extended to 5 minutes + +This allows large multipart uploads to stream directly from the client → API → agent without buffering.