graft

Examples · a real benchmark sync

Stayed: the agent asked where a change should go

inspectorG4dget/tqdm, a fork of tqdm/tqdm with 5 changes on commit ebda712, between releases, synced onto upstream's v4.70.1. Measured 2026-10-28.

Stayed on commit ebda712, between releases

1 change could not be carried. Three changes kept (they add a new file, tqdm/patch.py, correct); the fourth edits tqdm/_tqdm.py, which upstream moved to std.py, and the agent asked whether to port it.

What the person would do next. Three changes carried cleanly, but the fourth edits tqdm/_tqdm.py, which upstream has since moved into tqdm/std.py. The agent wasn't going to guess whether the change still matters, so it asked, and the copy stayed where it was. The person answers the question in the dashboard (drop it, or port it into std.py); Graft then runs the tests again and opens the pull request only if they pass.

Each change

ChangeOutcomeWhy
Added Additional Base Functionalitykeptapplies to the new release as is
Added current timekeptapplies to the new release as is
Printing also conforms to bar formatkeptapplies to the new release as is
Hardening the last commitstuckagents could not settle it: tqdm/_tqdm.py: it needs your decision: Our right-aligned n_fmt change targets code that now lives in tqdm/std.py, which is not part of this change. Should it be dropped, or ported into std.py as a separate follow-up?
Fixes #1,2not triedan earlier change is stuck

Tests

The sync stopped before the tests ran: a change was stuck, so nothing could move whatever the tests said.

Agents

1 agent call (12 s): Claude Code (opus, high effort). On Graft, Premium does that work automatically, and your first conflict is free.

From data/bench/sync-real.json, run with scripts/bench-sync-real.ts on 2026-10-28. Every result on the results page, moved or stayed. Try your own fork.