# HTTP 413 Resolution — Vault Git Push Failure ## Observed Problem ``` error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly ``` ## Root Cause The vault `.git/objects` pack file exceeded the Gitea server's payload size limit because it contained large binary assets alongside source code: - Binary assets: `.png`, `.jpg`, `.jpeg`, `.pdf`, `.ico` (product images, screenshots, logos, price lists) - Data files: `.csv`, `.csv.gz` (tick data, sample data) - Agent state: `.omc/` directories with session checkpoints Initial pack size: **175MB** After splitting: **193MB** (all assets successfully pushed) ## Resolution Path (used in practice — June 2026) ### Key Insight: The user wants vault to track EVERYTHING Do NOT add broad `.gitignore` patterns like `*.png`, `*.pdf`, `*.csv`. The vault is a complete snapshot — clone once and you have all files. ### Step 1 — Tighten .gitignore to build artifacts only ```gitignore # Python build __pycache__/ .venv/ venv/ *.egg-info/ dist/ build/ # Node build node_modules/ # OS / IDE .DS_Store .idea/ .vscode/ # AI agent state .omc/ .hermes/ ``` REMOVE any broad patterns: `*.csv`, `*.pdf`, `*.png`, `*.jpg`, `*.mq5`, `20_Projects/*/`. ### Step 2 — Remove nested .git from project copies Nested `.git` directories cause gitlinks (mode 160000) which break clone. Remove them before first commit: ```bash for d in ~/vault/20_Projects/*/; do [ -d "$d.git" ] && rm -rf "${d}.git" done ``` ### Step 3 — Split push per-file When the vault has 200+ files of all types, push one file at a time: ```bash for f in $(git diff --cached --name-only); do git add "$f" && git commit -m "add: $(basename "$f")" && git push done ``` This produces ~600 small commits — acceptable for initial setup. Can squash later. ### Step 4 — Verify despite false errors `git push` may show HTTP 413 even when the push actually succeeded — the server accepts the pack but the sideband connection closes before the client receives the success response. ```bash git fetch origin git log origin/main --oneline | head -3 ``` If the commit appears on origin, the push succeeded despite the error message. ## Prevention - **Check size before push**: `du -sh .git/` - **Increase post buffer**: `git config http.postBuffer 524288000` - **Push incrementally** for initial full-vault upload - **Never nuke .git**: `rm -rf .git && git init` destroys history — only use when local state is irrecoverable - **Expected vault size**: 150-200MB (normal for complete workspace with assets)