Outward: Activate a project and deliver it to members. It always opens now, and posts the invitation wherever the project names a place, today the Discord channel in `delivery.invitation.post_channel_id`, and nowhere else. Posts and direct messages reach real members and cannot be taken back, so confirm with the human first. A project answered on the web (`open_web`, or `private` with response_channel `web`) can open without posting anything: pass `delivery.invitation.post_channel_id: null`, then give the human `data.share_url` from the response (never build that link yourself); a `private` one then raises the MissingPostChannel warning, accepted once the human confirms they share the link. A project answered in Discord needs the channel. Go-live validation runs here: errors block the call (409 script_validation); so do unaccepted warnings, which the human can accept by passing their `fingerprint`s in `acknowledge`. Run validate_script first so you see them before the audience does. To open later, use update_project with a scheduled `delivery.opening` instead.