A revision must leave unmentioned parts unchanged
Aliases: keep the rest still · span lock · freeze unselected text
What it is
Someone says “only change the third number.” After send the third number is right, and the wording of paragraph one, the order of section two, and the signature have all been redrawn. The act is named revision; it is another full-document sample that happened to move the named place too. Invariance of unmentioned parts is the invariant local revision needs in order to be real: characters, structure, and already-chosen facts the request did not point at should be bit-comparable, after this round, to what they were on the way in. Without the invariant, “local” is copy.
It does not explain why local is cheaper than a full redo — that is cost. It nails “if I didn’t ask you to move it, don’t.”
Why it happens
Autoregressive generation has no native “these paragraphs are locked.” Unless engineering treats unselected text as unwritable — constrained decoding, sending only the span into the model, or pasting the unselected region back after generation — the model will walk the whole document as a new conditional. With temperature above zero, every token outside the named span has a chance to swap to a neighbor. From the surface, people cannot tell “the system understood only-here” from “the system rewrote everything and also hit here.”
Once the invariant breaks, evaluation strategy is forced back to a full reread. The economy of the local act is emptied out. People copy-paste and edit themselves, which is exiting the generation loop.
Studying it
Diff the artifact before and after a local request. Gold standard: zero difference outside the span (whitespace normalization optionally allowed). Independent variables: implementation (constrained decoding / send span only / paste back), temperature, span size, whether surrounding text contains repetitive formulas the model likes to “polish.” Dependent variables: edit distance outside the span, type of change (wording / fact / order), whether users notice the periphery moving without a diff.
Do not pass on “close enough in meaning.” The invariant is literal, not semantic. A synonymous title swap still breaks it.
Where it stops holding
When the request is local on the surface and global in fact (“make the whole thing smoother, and incidentally that number”), the invariant conflicts with the request. Scope should be clarified first, not a silent full polish. Cross-span reference (the number in section three changes, so “as follows” in section one must follow) is legitimate coupling and should be marked as coupling, not an invisible peripheral edit. In code, whitespace moved to satisfy a formatter can be whitelisted. Local inpainting in images physically cannot be zero-diff at the seam; the invariant becomes “pixels outside the seam are locked.” This entry does not treat slow drift from the original goal across many rounds — that is drift. Here is one-round freeze of the periphery.
Applying it
- In implementation, treat the unselected region as a lock: send only the span (plus necessary context read-only) to the model, write back in place. Do not redraw the whole and hope the model “behaves.”
- After write-back, show a diff the user can see. If the periphery moved, the round should fail or roll back, not count as a polish gift.
- When scope in the request is vague, confirm “span only / coupling allowed.” Do not default to allowed.
- Check: select one number, local change, byte-level diff of the full text before and after. Non-whitespace difference outside the span must be zero. Then have someone who has not seen the diff read through: if they flag “the opening wording moved too,” the invariant is broken and already perceived. Put that diff check on the local-edit release list.
Related
- Same group: L2.05.1 Local revision beats regenerating the whole · L2.05.3 Iteration history must be revisitable
- Nearby: L2.12 Iterative Edits and Local Regeneration · L2.06 Granularity of Control · L3.12 Editing and Taking Over Generated Content
- Search terms:
invariance of unmentioned parts·constrained decoding·span-locked generation