Skip to content

chore(ci): switch npm to unscoped plumb-cli + enable in cargo-dist installers - #246

Merged
aram-devdocs merged 1 commit into
mainfrom
chore/npm-unscoped-plumb-cli
May 7, 2026
Merged

chore(ci): switch npm to unscoped plumb-cli + enable in cargo-dist installers#246
aram-devdocs merged 1 commit into
mainfrom
chore/npm-unscoped-plumb-cli

Conversation

@aram-devdocs

Copy link
Copy Markdown
Owner

Summary

  • The @plumb npm scope was never reserved. Switch to publishing the unscoped plumb-cli package to the npm account associated with the repo's NPM_TOKEN secret. cargo-dist 0.28.0 emits an unscoped npm package when npm is in installers and npm-scope is left unset — the package name comes from the cargo package name (plumb-cli).
  • dist-workspace.toml: add npm to installers; rewrite the npm comment block to describe the unscoped path and drop the @plumb prerequisite text.
  • .github/workflows/install-smoke.yml: ungate the npm rows on ubuntu/macOS/windows; install command becomes npm install -g plumb-cli.
  • Docs (README.md, docs/src/install.md, docs/src/introduction.md, docs/src/ci/release-prep.md): document the npm i -g plumb-cli install path; rewrite the release-prep "npm activation" section to record npm as wired (no scope reservation needed).
  • Validators (tests/install-smoke-validate.sh, tests/release-security-validate.sh, tests/release-readiness-matrix-validate.sh) and the v0 release-readiness runbook: assert the new shape — npm ungated, install string plumb-cli, installers includes npm, npm-scope unset, and brew is the only remaining gated channel.
  • .github/workflows/release.yml: header comment updated to describe the unscoped npm publish.

dist plan --tag v0.0.1 now lists plumb-cli-npm-package.tar.gz alongside the existing platform archives, installer scripts, and Homebrew formula.

just check and the full nextest suite (510 tests) pass locally.

Closes #52.

Test plan

  • just check (all validators green, including the updated install-smoke / release-security / release-readiness asserts).
  • cargo nextest run --workspace --all-features — 510 passed.
  • dist plan --tag v0.0.1 --output-format=json includes plumb-cli-npm-package.tar.gz in artifacts.
  • After merge: tag-driven publish run lights up the install-smoke npm legs on ubuntu/macOS/windows.
  • After merge: smoke-test npm i -g plumb-cli against the published package.

🤖 Generated with Claude Code

…st installers

The `@plumb` npm scope was never reserved. Switch to publishing the
unscoped `plumb-cli` package to the npm account associated with the
repo's `NPM_TOKEN` secret. cargo-dist 0.28.0 emits an unscoped
package when `npm` is in `installers` and `npm-scope` is left unset.

- dist-workspace.toml: add `npm` to `installers`; drop the @plumb
  prerequisite block from the comment.
- install-smoke.yml: ungate npm rows on ubuntu/macos/windows; install
  command becomes `npm install -g plumb-cli`.
- tests/install-smoke-validate.sh: assert `npm_gated == 0`, install
  string is `plumb-cli` (unscoped), and the workflow header docs
  describe cargo/curl/npm as non-manual paths with brew gated.
- tests/release-security-validate.sh: replace gating asserts with
  wiring asserts (`installers` includes `npm`, `npm-scope` unset,
  install-smoke installs `plumb-cli`).
- tests/release-readiness-matrix-validate.sh + runbook: record
  cargo/curl/brew/npm as the active non-manual channels and the first
  tag-driven publish as the remaining verification gate.
- docs/src/{install,introduction}.md + README.md: add the
  `npm i -g plumb-cli` install path.
- docs/src/ci/release-prep.md: replace the "@plumb scope must be
  reserved" prerequisite block with the maintenance steps for the
  unscoped publish.
- .github/workflows/release.yml: header comment updated to reflect
  the unscoped publish.

`dist plan --tag v0.0.1` now lists `plumb-cli-npm-package.tar.gz`
alongside the existing platform archives, installer scripts, and
Homebrew formula.

Closes #52.
@aram-devdocs aram-devdocs changed the title chore(release): switch npm to unscoped plumb-cli + enable in cargo-dist installers chore(ci): switch npm to unscoped plumb-cli + enable in cargo-dist installers May 7, 2026
@github-actions

github-actions Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

I have all the context needed. Here is the full review:


Code review summary

PR: #246 — chore(release): switch npm to unscoped plumb-cli + enable in cargo-dist installers
Author: chore/npm-unscoped-plumb-cli branch
Base: main (a9a2146)


Blockers

# Severity File Line Issue Suggestion
None

No Rust source files changed. Zero blocker-class findings apply.


Warnings

# Severity File Line Issue Suggestion
1 Warning tests/release-security-validate.sh 238–278 The old section 6 verified that no active npm publish or npm-scope lines existed in the release workflow (belt-and-suspenders guard). The replacement removes that workflow-level grep entirely and relies on dist-workspace.toml shape checks only. If a future dist generate re-run emits an explicit npm publish step, there's no validator catching it. Add a check: `grep -v '^\s*#' "$RELEASE_WORKFLOW"
2 Warning docs/src/install.md 80–91 The npm section says the install script "verifies the platform archive's checksum before extracting it." This is cargo-dist's built-in behavior, not Plumb's, and it will be silently wrong if cargo-dist changes that behavior. Qualify with "cargo-dist's install script" or link to cargo-dist docs.

Architecture compliance

  • [✓] No new unsafe outside plumb-cdp
  • [✓] No new unwrap / expect / panic! in library crates
  • [✓] No new println! / eprintln! outside plumb-cli
  • [✓] No new wall-clock or HashMap in observable-output paths
  • [✓] No new todo! / unimplemented! / dbg!

No Rust code changed. All architecture invariants are vacuously satisfied.


Anti-pattern scan

Pattern Status Details
AI-flavored prose in docs/src/** Clean New install.md and introduction.md prose is factual and direct. No "dive in", "seamless", "leverage", etc.
Open-ended TODO without issue ref Clean No new TODO markers introduced.
#[allow(...)] without rationale N/A No Rust changes.
Exact-string grep assertions Watch Seven validation scripts use -Fq substring matches against workflow comment text. If those comments are reworded without updating the validators, the validators silently pass or fail erroneously. This is structural fragility inherited from the existing test style, not introduced here.

Internal consistency audit

All changed files were cross-checked for mutual consistency:

  • dist-workspace.toml: installers = ["shell", "powershell", "npm"], npm-scope absent. ✓
  • .github/workflows/install-smoke.yml: All three npm matrix entries flipped to gated: false; install command is npm install -g plumb-cli. ✓
  • tests/install-smoke-validate.sh: Checks npm_gated -eq 0, count = 3, and npm install -g plumb-cli in the workflow. ✓
  • tests/release-security-validate.sh: Checks npm-scope absent, npm in installer list, plumb-cli in install-smoke. String match at line 272–274 verified against actual file content — all three grep targets (install-smoke \brew` legs stay gated and the docs MUST NOT claim, ## npm activation for `plumb-cli`, Issue feat(release): @plumb npm org + @plumb/cli wrapper package #52 is wired in this repo state.) exist verbatim in docs/src/ci/release-prep.md` lines 16, 32, 34. ✓
  • tests/release-readiness-matrix-validate.sh: New grep strings match the docs/runbooks/v0-release-readiness-spec.yaml change verbatim. ✓
  • README.md, docs/src/install.md, docs/src/introduction.md: All consistently document npm i -g plumb-cli. ✓

Quality assessment

This is a CI/docs-only PR. No library or binary Rust code was touched. The change correctly promotes npm from a prep-only/gated channel to an active (non-gated) channel backed by cargo-dist's unscoped package emission, with NPM_TOKEN as the publish credential. The prose in the release-prep doc is appropriately hedged — it names the remaining open item (first tag-driven live verification) without overstating readiness. The validation scripts are updated atomically with the config changes they test.

The one genuine risk is that the npm publish path is untested until the first tagged release. This is acknowledged in docs/src/ci/release-prep.md:43–44 and is an acceptable pre-release state.


Scope check

  • Changes match PR description: Yes — exclusively npm activation across dist config, CI workflow, smoke tests, and docs.
  • Scope creep detected: None.

Verdict: APPROVE

@aram-devdocs
aram-devdocs merged commit 26e48d0 into main May 7, 2026
28 of 35 checks passed
@aram-devdocs
aram-devdocs deleted the chore/npm-unscoped-plumb-cli branch May 7, 2026 06:21
aram-devdocs added a commit that referenced this pull request May 7, 2026
Pre-V0 (0.0.2) docs sweep: align every public doc surface with the
actual binary behavior, drop pre-alpha hedging now that the four
install channels are wired, and remove the duplicated install
copy that drifted between README, install, and introduction.

- README.md: drop the aram-ai-global tagline, "walking skeleton"
  status, "coming soon"/"placeholder" hedges, and the pre-release
  install caveat. Install section is now four lines (curl, cargo,
  brew, npm) plus a link to the canonical install page.
- docs/src/install.md: drop the pre-release notice block and the
  "Status" column. Keep per-channel notes; bump the cargo pin
  example to 0.0.2; add the npm channel.
- docs/src/introduction.md: drop the pre-alpha Status section,
  add the npm install link, point "build from source" at the
  hacking-on-Plumb path instead of "the only path available today".
- docs/src/configuration.md: drop "walking skeleton" framing on
  the default-viewport note.
- docs/src/cli.md: add `--auto-fetch-chromium` to the lint flag
  table; remove the hidden `--once` from the watch flag table.
- docs/src/blog/launch-v0.6.md: drop the "supported path is still
  build from source" claim now that brew/npm/curl/cargo are wired;
  trim the install duplication and link to install.md.
- docs/src/ci/github-code-scanning.md, ci/reviewdog.md: replace
  `cargo install --git ... plumb` with the canonical
  `cargo install plumb-cli`.
- docs/src/mcp/compare-viewports.md: fix the broken `lint_url.md`
  link and the `local/prd.md` link (PRD is gitignored).
- docs/src/mcp/claude.md: drop the long "Verified locally" JSON
  blob and the "walking-skeleton URL" framing — the canonical
  example already lives in mcp.md.
- docs/src/rules/baseline-rhythm.md: fix `PRD SS11.3 -- ` typo to
  `PRD §11.3 — `.

Note: docs/src/ci/release-prep.md is intentionally untouched. The
install-smoke validator (`tests/install-smoke-validate.sh`) on
origin/main pins the exact "#51 wired / #52 prep-only" wording in
that page; the unscoped-npm switch (PR #246) updates both files
together and will replace the prep-only block.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(release): @plumb npm org + @plumb/cli wrapper package

1 participant