import InfoBox from '../components/InfoBox.astro';

The previous post moved through all three registry states. It was registered as a draft, closed without merging and therefore marked rejected, then reopened and published after I changed my mind. The content never changed. Only the editorial decision did.

## Observe the decision, do not invent permanence

The registry treats GitHub as the human gate: an open PR is pending, a merged PR is published, and a closed unmerged PR is rejected. That model correctly recorded each observation, but it quietly assumed the last one was permanent. GitHub does not make that promise. A closed PR can be reopened, and a rejected subject can become acceptable without needing a second draft or a new git range.

<InfoBox title="The corrected transition" variant="note">
  `draft → rejected → published` is valid when the same post PR is reopened and merged.
  The registry keeps the original subject, range, and PR link; only publish status changes.
</InfoBox>

The correction stayed deliberately small. The published file matched the original draft byte for byte, so there was nothing to learn for the voice, style, or sensitivity guides. The registry row changed from `rejected` to `published`, preserving the [same concurrency-lock story](/posts/the-lock-arrived-late#a-lock-only-works-when-others-can-see-it) and the same review record.

## Reversible human gates need reversible bookkeeping

The important boundary remains human control over publication. Closing the PR still signals rejection, and the next run should still advance the frontier rather than repeatedly offering the same subject. However, if the human later reopens and merges that exact PR, the bookkeeping must follow the new decision instead of defending an older interpretation as final.