B-JKXY-arm-the-outbound-publish-channel-and-cut-the-first-library
The repo side of the snapshot-mirror channel is complete and merged; everything
remaining is account-level and cannot be done from inside the repo. The channel
has never been armed for ANY library — intersect piloted the pattern but has
never published either.
Already done (no repo work remains)
Section titled “Already done (no repo work remains)”publish-libs.jsonis the roster;publish-lib.ymlresolves against it withjqand triggers on the generic*/v*;release-lib.tsimports it.- Six libraries declared: intersect, agent-call, command-seam, easy-git-ts,
dir-aspect, markdown-util. Each has a LICENSE, a mirror
release.yml, and (for TS)tsconfig.build.jsonwithrewriteRelativeImportExtensions. - Snapshot assembly carries
tsconfig.base.jsoninto the stage and repoints theextends, then install/build/tests the stage standalone.
What is left, in order
Section titled “What is left, in order”- Mirror repos. Create
sksizer/command-seamandsksizer/easy-git-tsas public. Flipsksizer/agent-callfrom private to public. (sksizer/intersect,sksizer/rust-dir-aspect,sksizer/rust-markdown-utilalready exist.) OSS_PUBLISH_TOKEN. A fine-grained PAT over the mirror repos with Contents R/W and Workflows R/W — the snapshot contains.github/workflows/, which a contents-only token cannot push. Store as an Actions secret onsksizer/dev. Until it exists, a tag push validates and assembles, then skips the push with a message.- Registry auth per mirror. npm trusted publishing (repo +
release.yml) is preferred; a temporaryNPM_TOKENon the mirror is the bootstrap path for a package that does not exist yet. - Rehearse.
gh workflow run publish-lib -f lib=<lib>runs validation and snapshot assembly and never pushes. Worth doing per library before the first real tag. - Cut releases.
just release-lib <lib> patch --push. Order matters: command-seam before easy-git-ts, because the standalone snapshot build installs outside the monorepo and resolves@sksizer/command-seamfrom the registry. Declared asneedson the roster, which today logs a notice rather than enforcing an order.
Why it stalled
Section titled “Why it stalled”GitHub Actions billing failed 2026-08-29 through 2026-09-01, so no workflow ran at all. That is resolved. The channel is a GitHub Actions workflow, so arming it during the outage would have produced a confusing dead end.