Skip to content

feat!: publish as @deepcode/cli and release on partial credentials - #249

Merged
oratis merged 1 commit into
mainfrom
feat/scoped-cli-and-partial-release
Aug 8, 2026
Merged

feat!: publish as @deepcode/cli and release on partial credentials#249
oratis merged 1 commit into
mainfrom
feat/scoped-cli-and-partial-release

Conversation

@oratis

@oratis oratis commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Summary

Implements the two decisions that were blocking v0.3.0.

⚠️ BREAKING. The CLI publishes as @deepcode/cli. Install with npm i -g @deepcode/cli. The binary is still deepcode; no behaviour changes.

1. Rename to @deepcode/cli

The unscoped deepcode-cli on npm belongs to an unrelated project — guocong199708, guocong-bincai/deepcode-cli, currently 1.3.2, a Doubao-based CLI. apps/cli/package.json claimed that exact name, so pnpm publish would have 403'd. It was never ours to publish to.

A scope we control also removes the squatting risk permanently.

Updated: the package name, the install line in README.md / quickstart.md / MIGRATION_FROM_CLAUDE_CODE.md / apps/cli/README.md, the /upgrade and deepcode upgrade hints, and RELEASING.md's verification command.

Historical snapshots keep the old nameMORNING_REPORT.md, DEVELOPMENT_PLAN.md, HANDOFF.md, BEHAVIOR_PARITY.md, release-artifacts/README.md. They record what was true when written, and check-docs.mjs already marks them as such.

pnpm install --frozen-lockfile still resolves: pnpm keys importers by path, not package name.

2. Release on the credentials that exist

validate now detects which secret sets are configured and publishes them as outputs. The check lives in a step because the secrets context isn't available in a job-level if.

Missing Effect
Apple secrets build-mac skipped — no DMG
NPM_TOKEN publish-cli skipped — nothing published to npm
Neither GitHub Release still ships, with the VSIX and source

Skipped, not failed. A red release for a missing credential teaches people to ignore red releases. A job that actually fails still blocks the release — github-release's guard is needs.build-mac.result != 'failure', not == 'success', so a broken build never becomes a release while an unattempted one doesn't hold it hostage.

The anti-partial-release rule stands: npm publication still waits on both installable artifacts. It just additionally requires a token to exist.

The release page says what's missing

> **No macOS build in this release.** Apple signing credentials were not
> configured when it was cut; see docs/RELEASING.md.

Without this, a release page missing a DMG reads as "there is no Mac build for this project" rather than "it wasn't produced this time".

Test plan

  • pnpm test1414 passed, 16 skipped
  • pnpm typecheck · pnpm lint · pnpm format:check · pnpm build · node scripts/check-docs.mjs
  • pnpm install --frozen-lockfile clean after the rename
  • Grepped every deepcode-cli reference and classified each as user-facing (renamed) or historical (kept)

Typecheck caught a real one: /npm i -g @deepcode/cli@latest/ — the / in the scope terminates the regex literal. That assertion is now a toContain. Worth flagging because a scoped rename inside regexes is exactly what slips through a find-and-replace.

Documentation

  • docs/RELEASING.md — partial-credential behaviour table, and a note that the @deepcode scope must exist and the token must publish into it (the workflow already passes --access public, which scoped packages need)
  • CHANGELOG.md — rename under Breaking

Release notes label

  • release-notes:breaking — the install command changes

Related

Follows #246, #247, #248. Unblocks the v0.3.0 release (#245).

🤖 Generated with Claude Code

BREAKING CHANGE: the CLI publishes as @deepcode/cli. Install with
`npm i -g @deepcode/cli`. The binary is still `deepcode`.

The unscoped `deepcode-cli` on npm belongs to an unrelated project
(guocong-bincai/deepcode-cli, currently 1.3.2), so publishing under that name
was never possible — `pnpm publish` would have 403'd. A scope we control also
removes the squatting risk permanently.

Historical snapshots (MORNING_REPORT, DEVELOPMENT_PLAN, HANDOFF,
BEHAVIOR_PARITY, release-artifacts) keep the old name; they record what was true
when written.

Separately, the release graph no longer requires every credential to exist.
validate detects which secrets are configured and skips the legs that cannot
run: no Apple secrets skips build-mac, no NPM_TOKEN skips publish-cli. Skipped
rather than failed — a red release for a missing credential teaches people to
ignore red releases. A job that actually fails still blocks the release, and
the anti-partial-release rule stands: npm publication still waits on both
installable artifacts.

github-release now runs on what was actually built, and states in the release
body which artifacts are absent and why. A release page missing a DMG otherwise
reads as "there is no Mac build" rather than "it was not produced this time".

Caught by typecheck: `@deepcode/cli` inside a regex literal terminates it early.
That assertion is now a toContain.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@oratis
oratis merged commit 5856ad9 into main Aug 8, 2026
5 checks passed
@oratis
oratis deleted the feat/scoped-cli-and-partial-release branch August 8, 2026 14:11
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.

1 participant