prepare and publishes it. Run only after the user approved that exact manifest.
Safety properties
- What was approved is what ships. The package is rebuilt and compared against the draft’s manifest; if any file changed since
prepare, the publish fails withmanifest_mismatchinstead of uploading bytes nobody reviewed. - The server has the last word. Its authoritative secret scan runs on the uploaded package; findings reject the publish with a
422and are shown — no version is created. - Drafts are bound to their creator and expire; a stale
draftIdfails cleanly and a freshpreparerestarts the flow.