Skip to content

refactor(pusher): push ordered batches, return per-batch outcomes#222

Draft
behinddwalls wants to merge 1 commit into
preetam/ext/buildrunnerfrom
preetam/ext/pusher
Draft

refactor(pusher): push ordered batches, return per-batch outcomes#222
behinddwalls wants to merge 1 commit into
preetam/ext/buildrunnerfrom
preetam/ext/pusher

Conversation

@behinddwalls

@behinddwalls behinddwalls commented Jun 8, 2026

Copy link
Copy Markdown
Collaborator

Summary

Change Pusher.Push to take ordered []entity.Batch instead of controller-pre-resolved []entity.Change, per the extension contract. The git pusher and the fake gain an injected changeset.Resolver and resolve each batch's changes themselves; the merge controller drops its private collectChanges walk and passes the single batch (the list designs for a future merge-train).

This is the one extension whose output shape also changes: Result now groups outcomes per batch — Result{Batches []BatchOutcome}, where BatchOutcome{BatchID, Outcomes []ChangeOutcome} — so each landed batch stays correlatable, the way conflict.Conflict carries its BatchID. ChangeOutcome (per-change commit detail) is unchanged. No per-batch status: push atomicity stays all-or-nothing across the whole call.

Test Plan

Issues

Stack

  1. docs(rfc): extension contract — identity in, resolve internally #214
  2. feat(changeset): shared batch→changes resolver in core #216
  3. refactor(mergechecker): accept entity.Request, resolve change internally #217
  4. refactor(changeprovider): accept entity.Request, resolve change internally #218
  5. refactor(scorer): score entity.Batch, resolve changes internally #219
  6. refactor(buildrunner): trigger on batches, resolve changes internally #221
  7. @ refactor(pusher): push ordered batches, return per-batch outcomes #222
  8. feat(conflict): target-overlap analyzer using changeset resolver #223

Change Pusher.Push to take ordered []entity.Batch instead of controller-pre-resolved []entity.Change, per the extension contract. The git pusher and the fake gain an injected changeset.Resolver and resolve each batch's changes themselves; the merge controller drops its private collectChanges walk and passes the single batch (the list designs for a future merge-train).

This is the one extension whose output shape also changes: Result now groups outcomes per batch — Result{Batches []BatchOutcome}, where BatchOutcome{BatchID, Outcomes []ChangeOutcome} — so each landed batch stays correlatable, the way conflict.Conflict carries its BatchID. ChangeOutcome (per-change commit detail) is unchanged. No per-batch status: push atomicity stays all-or-nothing across the whole call.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants