atproto git client
atgc plan stacks.md
50 kB · 736 lines


id: stacks title: A change that is several pull requests stays one chain status: open repos: [atgc] dependsOn: [pull-requests, branch-pulls] exitCriterion: > A branch is cut into dependent pulls, rewritten, reconciled and merged bottom-up, and no rewrite loses a pull's number, rounds or review comments. #

stacks #

A Tangled stack is a chain of ordinary pull records, each dependentOn the pull beneath it. A member is a contiguous run of commits — nothing in the protocol ties one to a single commit — cut at the marks atgc stack mark records, and one per commit on a branch with none. Identity across rewrites is a Change-Id: mail header per commit in the round's patch. There is no stackId, no stack XRPC: the appview indexes the chain off the firehose and rejects would-be DAGs at ingest.

Design settled 2026-08-09: stack commands bail with a pointer when the situation is not stacked; pr commands keep working on stack members and warn where the stack command is better. Revised 2026-08-24: one-pull-per-commit was atgc's shape, not Tangled's, and it made agents file five pull requests for one change.

The reconcile is the whole risk. It plans a fate per member — keep, round, create, delete, relink — and writes them as one applyWrites, because a chain built a record at a time passes through a state the appview refuses. Two adversarial rounds against injected damage and against ordinary git shapes are under Done, and they are the reason the refusals are as loud as they are.

What it needs #

Done #