Skip to content

feat(ENG-017): local-git DeliveryAdapter — commit without GitHub - #7

Merged
tobyvee merged 2 commits into
mainfrom
eng-017-local-git-delivery
Jun 27, 2026
Merged

tobyvee merged 2 commits into
mainfrom
eng-017-local-git-delivery

Conversation

@tobyvee

@tobyvee tobyvee commented Jun 27, 2026

Copy link
Copy Markdown
Owner

ENG-017 — Local-git DeliveryAdapter (commit without GitHub)

A first live run surfaced that a no-GitHub run produces no verifiable code: delivery is
GitHub-API-only, so with GITHUB_* unset the coding agent's files are discarded and QA (tool-less
api backend) has nothing to verify — every ticket reworks to the cap and blocked (6/6 in the run).

This adds a LocalGitDeliveryAdapter behind the existing DeliveryAdapter port — no GitHub
account/remote needed; a ticket can reach done offline with real, inspectable code on disk.

  • packages/integrations/src/local/delivery.ts — full port via local git: createBranch,
    commitFiles (write → add → commit, returns SHA), openPullRequest (synthetic file:// ref),
    getChecks → success, merge (local --no-ff); deploy hooks no-op. Per-commit identity (no global
    git config needed), path-traversal-guarded writes.
  • Concurrency-safe: in-process queue + self-contained checkout -f → write → commit units, so the
    heartbeat auto-starting all backlog tickets can't corrupt the shared repo.
  • localGitBranchFiles() reads a branch's committed files via git (not the working tree).
  • Wiring: deliveryFromEnv() returns the local adapter when DELIVERY_BACKEND=local;
    implementTicket is unchanged (the port abstraction commits to the local repo). QA now verifies
    real code
    — verifyTicket injects the committed files into the assess prompt (and says "nothing to
    verify" when none), fixing the doomed-rework cost.
  • Ops: DELIVERY_BACKEND passthrough + a ./workspace bind-mount in compose; .env.example documents
    it.

Verification

Real-git unit tests (commit→branch→merge, concurrent commits isolated, traversal rejected, missing
repo → []); typecheck · lint · 98 tests green.

Notes

  • A live run also needs the worker fix (separate PR fix/worker-temporal-connection) to reach Temporal
    in Docker. Both PRs touch docker-compose.yml in different sections (restart policy vs. volume/env).
  • Follow-up: run the target repo's tests as the local "CI" check before the merge gate.

🤖 Generated with Claude Code

tobyvee and others added 2 commits June 27, 2026 15:16
…thout GitHub

Adds LocalGitDeliveryAdapter behind the DeliveryAdapter port: commits the coding agent's files to a local git repo (DELIVERY_BACKEND=local) in the working-code workspace, with an in-process serialization queue for concurrent tickets. verifyTicket now feeds the committed files to the QA agent so it can verify real code (api backend is tool-less), addressing the doomed-rework cost. Real-git unit tests; typecheck + lint + 98 tests green. Live run also needs fix/worker-temporal-connection.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@tobyvee
tobyvee merged commit d3d4487 into main Jun 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant