Release channels for trunk-based promotion.
All channels release from the same branch — channels control the release
strategy (stable vs prerelease vs draft), not the branch.
Per-package publish configuration. Typed enum — the user picks a
known publisher (cargo, npm, docker, pypi, go) and sr handles
both the “is it already published?” check (registry API call) and the
actual publish command (shelled out). The custom variant is the escape
hatch for arbitrary shell commands + a user-supplied state check.