Owner-ratified 2026-07-17 (after the v0.0.1-beta.10 partial publish, second occurrence of the dry-run-blind registry rejection class — see #810 lineage, denoland/deno#35546).
1. Canary channel (the structural fix)
The only honest test of registry acceptance is an authenticated publish. Establish a canary channel as a MANDATORY gate before every stable-channel publish:
deno task release:canary + dedicated CI (.github/workflows/release-canary.yml): cut a -canary.N prerelease of the upcoming version (real @netscript scope, so the cross-package dependency graph is exercised unmodified; canary versions are never marked Latest and may be yanked after validation), publish the full workspace via the same OIDC path as production.
- Post-canary live production CI: on canary-publish success, automatically run the artifact-pinned
e2e-cli-prod suite against the canary version (the existing workflow_dispatch published-version path) — install from JSR, scaffold, full runtime validation. Green pair (canary publish + canary prod E2E) is the precondition for cutting the stable version.
- Documented in the
netscript-release skill as a mandatory step: no release:publish without a green canary pair for the same content.
2. Publish-readiness automation (.llm/tools/release/ as the official home)
Extend the existing release toolbelt with publish-readiness.ts, run inside the canary workflow and as a standalone task:
Promoted as the official/mandatory publish workflow; ad-hoc publishing documented as prohibited.
Acceptance
Refs #810, #143, #139. Would have caught: alpha.5 half-publish, beta.10 partial publish.
Acceptance evidence (2026-07-17, PR #812 @ 64184de): IMPL-EVAL cycle 2 PASS (Fable 5 medium, .llm/runs/beta10-cli--orchestrator/slices/811-canary/evaluate.md): all three seeded violations proven-to-fail LIVE against deno task publish:readiness (text-import attribute w/ denoland/deno#35546 sunset + generated-constant guidance, versionless specifier, README standard), clean tree back to 8/8 PASS; unit test exercises the real preflight subprocess; release suite 61/61; canary workflow + canary-prod E2E pinning and skill (source+mirror) canary-first flow verified on the merged head.
Owner-ratified 2026-07-17 (after the v0.0.1-beta.10 partial publish, second occurrence of the dry-run-blind registry rejection class — see #810 lineage, denoland/deno#35546).
1. Canary channel (the structural fix)
The only honest test of registry acceptance is an authenticated publish. Establish a canary channel as a MANDATORY gate before every stable-channel publish:
deno task release:canary+ dedicated CI (.github/workflows/release-canary.yml): cut a-canary.Nprerelease of the upcoming version (real@netscriptscope, so the cross-package dependency graph is exercised unmodified; canary versions are never marked Latest and may be yanked after validation), publish the full workspace via the same OIDC path as production.e2e-cli-prodsuite against the canary version (the existingworkflow_dispatch published-versionpath) — install from JSR, scaffold, full runtime validation. Green pair (canary publish + canary prod E2E) is the precondition for cutting the stable version.netscript-releaseskill as a mandatory step: norelease:publishwithout a green canary pair for the same content.2. Publish-readiness automation (
.llm/tools/release/as the official home)Extend the existing release toolbelt with
publish-readiness.ts, run inside the canary workflow and as a standalone task:Promoted as the official/mandatory publish workflow; ad-hoc publishing documented as prohibited.
Acceptance
release:canarycuts + publishes a-canary.Nversion end-to-end via CI (OIDC), never marked Latest.release:publishpath documents (and where practical, checks) the green-canary-pair precondition.publish-readiness.tscatches: a seeded new package with no README sections, a seeded versionless specifier, a seeded import attribute — each proven-to-fail.Refs #810, #143, #139. Would have caught: alpha.5 half-publish, beta.10 partial publish.
Acceptance evidence (2026-07-17, PR #812 @ 64184de): IMPL-EVAL cycle 2 PASS (Fable 5 medium,
.llm/runs/beta10-cli--orchestrator/slices/811-canary/evaluate.md): all three seeded violations proven-to-fail LIVE againstdeno task publish:readiness(text-import attribute w/ denoland/deno#35546 sunset + generated-constant guidance, versionless specifier, README standard), clean tree back to 8/8 PASS; unit test exercises the real preflight subprocess; release suite 61/61; canary workflow + canary-prod E2E pinning and skill (source+mirror) canary-first flow verified on the merged head.