S251 Handoff

Documentation for Sessions

S251 Technical Handoff

Session: 251 | Date: 2026-03-21 | Branch: session-254-260 (shared, concurrent sessions) Agent: Claude Code (Opus 4.6) | Status: Complete — pending commit


1. What Was Done

3 Critical Pipeline Bugfixes (deployed to Hetzner)

# Bug Root Cause Fix File
1 Generation files silently lost Express body parser 100KB default rejects 136-file payloads json({ limit: '50mb' }) + NGINX client_max_body_size 50m APIs/sandbox-orchestrator/src/main.ts
2 VFS file-reads target wrong repo parseRepoPath('gograbspace/a/b') returns ['gograbspace','a'] not ['a','b'] Take last 2 segments: parts[parts.length-2], parts[parts.length-1] APIs/backend-api/src/app/git-provider/remote-git-provider.service.ts, local-git-provider.service.ts
3 Deploy phase hides git errors Catch block logs but never emits SSE Added module-gen.git-commit-failed SSE event APIs/backend-vitto-api/src/app/module-generation/phases/module-gen-phase.executor.ts

5 New Hetzner Endpoints (deployed)

Endpoint Method Purpose
/git/repos GET List ALL repos with stats
/git/repos/:org/:repo/commits GET Commit history (branch, limit params)
/git/repos/:org/:repo/commits/:sha GET Commit diff (files, insertions, deletions)
/git/repos/:org/:repo/branches/:branch DELETE Delete branch
Body parser fix — 100KB → 50MB

NX Library: @libs-structural/git-operations

libs/libs-structural/git-operations/src/
├── index.ts                                    # Public API
└── lib/
    ├── models/
    │   ├── git-operations.types.ts             # 15 interfaces
    │   └── git-operations-role.config.ts       # 4-tier role system, 10 feature flags
    ├── services/
    │   ├── git-operations-api.service.ts       # HTTP client (DI-injectable baseUrl + apiKey)
    │   ├── git-operations-state.service.ts     # Reactive state (30+ signals, polling, filtering)
    │   └── git-operations-format.utils.ts      # Pure formatting (timeAgo, shortenSha, fileSize, etc.)
    └── config/
        └── git-operations.providers.ts         # provideGitOperations() factory

Git Operations Dashboard (gograb-dev)


2. Current State

What Works

What Does NOT Work Yet

Uncommitted Changes

The following files were modified but NOT committed (per user instruction — concurrent sessions):

Sandbox Orchestrator:

Backend API:

Backend Vitto API:

Library (new):

Dashboard:

Config:


3. Two-Server Hetzner Infrastructure

AX42-U (Current) — Internal Dev Server

AX102-U (New) — Customer Sandbox Server


4. What the Next Agent Should Do First

Priority 1: Commit All Changes

All S251 changes are uncommitted. The next agent should:

  1. Check git status for the full list
  2. Commit with: [S251.1] feat: fix Hetzner pipeline + git-operations library + dashboard
  3. Include specific files (never git add .)

Priority 2: Redeploy Railway Backends

The parseRepoPath fix and SSE error events must reach production:

Priority 3: Build Git Graph Visualization

The user's top requested feature. Architecture decision already logged (MCP ID: dev_1774111802647_rc9smr0):

  1. Add parentShas[] to commit history endpoint response
  2. Build lane assignment algorithm (which visual column for each branch)
  3. Build git-graph standalone component with SVG (commit nodes, branch lines, merge arrows)
  4. Make interactive (click commit → expand diff, hover → tooltip)

Priority 4: Set Up AX102-U

The new server is ready for software setup:

  1. SSH into 178.63.165.83
  2. Install Node.js 20, yarn, simple-git
  3. Deploy sandbox-orchestrator
  4. Configure NGINX with SSL (Let's Encrypt)
  5. Set up Firecracker kernel + rootfs

5. Key Environment Variables

Hetzner Server (AX42-U)

SANDBOX_API_KEY=W8Wp0ltL8El_qRnXyoUoD0ffuSfZzmbn7Y7SVrx1k8s
PLATFORM_REPOS_ROOT=/data/platforms
PLATFORM_TEMPLATE_PATH=/data/templates/platform-base-template
PORT=3010

Railway (backend-api)

PLATFORM_GIT_SERVER_URL=https://sandbox.gograb.space
PLATFORM_GIT_API_KEY=W8Wp0ltL8El_qRnXyoUoD0ffuSfZzmbn7Y7SVrx1k8s

Railway (backend-vitto-api)

PLATFORM_GIT_SERVER_URL=https://sandbox.gograb.space
PLATFORM_GIT_API_KEY=W8Wp0ltL8El_qRnXyoUoD0ffuSfZzmbn7Y7SVrx1k8s

Dev Proxy (proxy.conf.json)

"/sandbox-api": {
  "target": "https://sandbox.gograb.space",
  "secure": true,
  "changeOrigin": true,
  "pathRewrite": { "^/sandbox-api": "" }
}

6. MCP Intelligence

Decisions Logged

ID Type Summary
dev_1774111649848_2r1kx44 bugfix Body parser + parseRepoPath + SSE fixes
dev_1774111671403_0kmixf8 architecture Library architecture with DI + role flags
dev_1774111695328_9o9y26a infrastructure CORS proxy solution
dev_1774111802647_rc9smr0 architecture Git graph decomposed component plan
dev_1774273643988_ub6gilg infrastructure Two-server Hetzner layout
dev_1774273666678_4vzdgd5 architecture Git-operations library 3-layer structure

Conventions Added

Category Rule
angular NX libraries must use InjectionToken + provideXxx() factory
infrastructure Hetzner body parser = 50MB, NGINX must match
git-provider parseRepoPath takes last 2 segments
infrastructure AX42-U = IDS, AX102-U = Customer Sandbox

How to Recall Context

// Start of next session
preflight({ task: "S252: Git graph + AX102-U setup" })
find_similar({ query: "git operations hetzner pipeline" })
intelligence({ action: "recall", situation: "git graph SVG visualization" })
convention({ action: "get", category: "infrastructure" })

7. Validation Checklist

Before Making Changes

After Changes


Generated by Claude Code (Session 251) — March 21, 2026