Review findings on the abandon prompt:
- The prompt approved one ref but `abandon()` re-read the remote and cleared
every outstanding attempt of that version, so a concurrent operator's
replacement attempt could be cancelled and its draft deleted. The remote
is now read again after the answer, and anything other than the same single
attempt is refused; only that attempt is abandoned.
- Abandonment ran before the ancestry, final-tag and draft-body checks, so a
yes could destroy the old attempt and then refuse the replacement. Those
checks now run first; the prompt is the last step before the claim. The
attempt number ignores markers, so abandoning does not change the tag.
- The prompt test now varies stdin and stdout separately and asserts `input`
is never called unless both are terminals.