prepare
Introduce a new attachment generation, serialized through the log (EntitlementLedger.prepare).
This is the only way to create a generation, and it proposes no seat (issue #1752). There used to be a second entry point, prepareNeutral, which read parentVirtualTime here and froze ⌈V⌉ into the committed bytes — and which therefore needed a readIndex() authority fence and an applied-prefix freshness gate, because a proposer reading a view that had not yet applied its siblings would otherwise freeze an origin seat that every peer then applied permanently (issue #1713). A record no longer carries a seat, so a stale proposer's Prepare is inert: the fence, both of its documented residuals — the unfenced partial-view case, and the false refusal right after an election, when a withheld internal entry legitimately leaves the applied prefix behind the fenced index — and the method itself are all gone, rather than left as a name that still says "neutral" while doing nothing of the kind.
Where the child starts competing is decided afterwards and by everybody: schedule's seat bump writes the Gauge at the front the edge is actually joining, on every peer that still sees it unseated, and the componentwise join resolves those readings by max instead of preserving one of them.
The log still orders two concurrent proposals for one id first-wins, answering the loser with a ControlConflict.Refused naming the bound id — that is about the record's intent (its parent, child and weight), which two honest proposers can still disagree on.