Security & Privacy7 min read•August 2026

Building an Ephemeral Code Review Pipeline with Zero Data Retention

How we process pull requests in temporary worker RAM and wipe runtime state instantly, ensuring customer code is never saved to disk or used for model training.

SC

Security & Compliance

Platform Security & Cryptography

Building an Ephemeral Code Review Pipeline with Zero Data Retention

The Core Prerequisite: Absolute Code Privacy

When evaluating developer tools, software engineering leaders and CISOs have one non-negotiable question: "What happens to our source code when your bot scans it?"

Too many SaaS platforms store repositories on persistent cloud storage, retain logs containing proprietary function logic, or feed customer source code into generalized model training corpuses. In regulated industries—fintech, healthcare, and enterprise infrastructure—this is an immediate deal-breaker.

From our first line of code, GitCaptain was engineered around a simple premise: your source code is analyzed strictly in temporary memory and disappears the moment the review is posted.

Zero-Retention Guarantee

GitCaptain operates on ephemeral Linux worker containers. We never write repository source code to persistent disk, and we have zero access to your code once the check run completes.

Lifecycle of an Ephemeral Review Run

Here is the step-by-step cryptographic and compute lifecycle of a GitCaptain review run:

1. GitHub sends a webhook payload over TLS 1.3 signed with an HMAC SHA-256 secret. We verify the signature before accepting the event.

2. An isolated Linux container mounts an in-memory `tmpfs` volume in RAM. The pull request diff and syntax trees are loaded solely into this volatile memory buffer.

3. Tree-sitter evaluates the syntax trees, computes cyclomatic metrics, and queries our AI gateway with isolated code subtrees.

4. Structured review comments are dispatched back to GitHub via authenticated API calls.

5. The `tmpfs` RAM volume is unmounted and overwritten, the container is destroyed, and all temporary runtime allocations are wiped clean.

ephemeral-sandbox-runner.ts
typescript
// Ephemeral container sandbox lifecycle
export async function executeEphemeralReview(
  payload: GitHubWebhookPayload
): Promise<void> {
  const sandbox = await allocateMemorySandbox({ ramLimitMb: 512 });

  try {
    // Ingest diff strictly into RAM buffer (tmpfs)
    const diffBuffer = await fetchSecureDiff(payload.diffUrl);
    const analysis = await sandbox.runASTAnalysis(diffBuffer);

    // Post comments back to GitHub API
    await postReviewAnnotations(payload.pullRequestId, analysis.comments);
  } finally {
    // Explicit, deterministic memory wipe and sandbox destruction
    await sandbox.zeroMemory();
    await sandbox.destroy();
  }
}

Zero Plaintext Key Storage at Rest

For developers who choose to supply their own LLM API keys via our `/apis` vault, keys are encrypted using AES-256-GCM with envelope encryption. Keys are decrypted exclusively in worker RAM during active requests and never appear in application logs or crash dumps.

This guarantees that even in the theoretical event of a database compromise, no third-party keys or customer source code can be extracted.

Key Architectural Takeaways

  • Stateless ephemeral RAM sandboxes ensure customer source code never touches persistent disks.
  • TLS 1.3 encryption in transit with HMAC SHA-256 webhook authenticity checks.
  • Zero model training on customer code—private repositories stay private.
  • AES-256-GCM envelope encryption for all user-supplied provider API keys.