feat: rebrand Chorus → Polyphony (npm @crypticpy/polyphony)#8
Conversation
The fork has diverged enough to be its own project. New product name is
Polyphony — same multi-voice metaphor but more distinct (Chorus = unison;
polyphony = multiple independent voices interleaving, which is actually
a better fit for the multi-LLM-disagreement-as-signal product).
What this changes:
- package.json: name → @crypticpy/polyphony, repo/homepage → crypticpy/chorus,
bin entries: `polyphony` and `chorus` both point to the same launcher
- README: title, tagline, badges, install command, product-name prose
- Visible CLI strings: "Welcome to Chorus" banner → Polyphony
- Visible daemon strings: startup banner, "daemon not running" errors
in the API route, MCP client, fetch client, page.tsx, onboarding
Backward compat (deliberate, all preserved):
- `chorus` CLI binary still works (added as bin alias)
- `~/.chorus/` config directory unchanged (chorus.db, templates, logs,
install-id, no-telemetry, secrets all live here)
- MCP server still registers under the name `chorus` so prompts like
"ask chorus to review …" and `chorus.create_chat` tool calls keep
working in Claude Code / Codex / Cursor / etc.
- Env vars (CHORUS_TELEMETRY, CHORUS_DB_PATH, CHORUS_CODEX_HOME,
CHORUS_LOG_LEVEL) unchanged
- GitHub repo stays at crypticpy/chorus for now
Out of scope (separate follow-ups):
- Rename ~/.chorus/ → ~/.polyphony/ (needs migration)
- Rename the GitHub repo (breaks every clone URL in the wild)
- ROADMAP.md prose ("Chorus's depth comes from…") — wait until repo
rename so it's one sweep
- Internal symbol/comment/log-namespace renames
Tests: 1085/1085 pass. Typecheck clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Sorry @crypticpy, you have reached your weekly rate limit of 2500000 diff characters.
Please try again later or upgrade to continue using Sourcery
There was a problem hiding this comment.
crypticpy has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughThis PR rebrands the project from Chorus to Polyphony across documentation, package identity, CLI/help text, onboarding/home UI copy, daemon/API messages, and the CLI update flow (now targeting ChangesChorus to Polyphony rebrand
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4a72f2f859
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -1,15 +1,16 @@ | |||
| { | |||
| "name": "chorus-codes", | |||
| "name": "@crypticpy/polyphony", | |||
There was a problem hiding this comment.
Point self-update at the renamed npm package
Now that the published package is renamed to @crypticpy/polyphony, the existing update paths still target chorus-codes: chorus update fetches that package and runs npm install -g chorus-codes@..., chorus start uses the same default check, and /update-check explicitly calls fetchLatestVersion('chorus-codes'). For users who install this scoped package, update banners will compare against the wrong registry entry and the update command will install/conflict with the old package instead of upgrading Polyphony.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in ef877bf — fetchLatestVersion now defaults to @crypticpy/polyphony and the daemon's /update-check route passes the same scoped name, so chorus update, the start-up nudge, and the cockpit banner all compare/install the right package. Update command now runs npm install -g @crypticpy/polyphony@<latest>.
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/app/onboarding/page.tsx`:
- Around line 308-311: Replace the old brand name "Chorus" with "Polyphony" in
the onboarding intro paragraph: locate the JSX paragraph element with className
"mb-8 text-sm leading-relaxed text-muted-foreground" (the <p> that starts
"Chorus runs your prompt...") in the onboarding page component and change the
leading word to "Polyphony" so the copy matches the rest of the rebrand.
In `@src/cli/commands/start.ts`:
- Line 47: Update the rebrand strings in the start command so runtime
banners/help no longer reference "Chorus" or "chorus-codes": in
src/cli/commands/start.ts (the start command’s .description and any banner/help/
recovery/install messages in that module) replace occurrences of "Chorus" with
"Polyphony" and replace "chorus-codes" with the new package/CLI name used across
the repo (e.g., "polyphony" or "polyphony-cli"), ensuring all banner text, help
text, and recovery/install prompts in functions like the start command handler,
banner printer, and recovery/installer messages are updated for consistency.
In `@src/cli/commands/stop.ts`:
- Line 29: Update the CLI strings in src/cli/commands/stop.ts so all user-facing
text uses the new product name "Polyphony" instead of "Chorus": change the
.description("Stop the Polyphony daemon and cockpit") entry and replace any
remaining "Chorus" occurrences used in status or error output (e.g., in the stop
command handler/runner, status messages, and error messages) to "Polyphony" to
ensure consistent messaging across the command (look for the .description call
and the stop command's status/error logging statements).
In `@src/cli/index.ts`:
- Line 42: Update the remaining help strings in this file that still reference
“Chorus” so they consistently say “Polyphony”; locate the help text for the CLI
commands (look for the UI and MCP command descriptions / variables referenced by
identifiers like the ui command help, mcp command help, or any constants near
the welcome line such as the array of help lines) and replace “Chorus” with
“Polyphony” in those string literals, ensuring casing matches existing branding
and preserving any surrounding punctuation or dim/bold styling calls.
In `@src/mcp/client.ts`:
- Around line 178-179: Update the rebranded error string in src/mcp/client.ts to
use Polyphony-first wording: replace "Run 'chorus start' first" with "Run
'polyphony start' first (or 'chorus start' for compatibility)" so users see the
new command but compatibility alias is preserved; keep the existing
CHORUS_AUTOSTART reference unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 8e174bc1-e05c-4376-9e1a-4f2799a7b836
📒 Files selected for processing (12)
README.mdpackage.jsonsrc/app/api/daemon/[...path]/route.tssrc/app/onboarding/page.tsxsrc/app/onboarding/submit.tssrc/app/page.tsxsrc/cli/commands/start.tssrc/cli/commands/stop.tssrc/cli/index.tssrc/daemon/index.tssrc/lib/api/client.tssrc/mcp/client.ts
…te target - update.ts: fetchLatestVersion defaults to @crypticpy/polyphony so `chorus update`, `chorus start` checkForUpdate, and the daemon's /update-check route compare/install the right scoped package (Codex P1). - start/stop/update/index CLI strings: rebrand user-visible banners, recovery prompts, install commands, and command descriptions to Polyphony with chorus shown as compat alias where the user is expected to retype the command. - mcp/client.ts: error message recommends `polyphony start` first with `chorus start` as compatibility alias. - onboarding/page.tsx: intro paragraph rebranded. - system.ts: update-check route queries @crypticpy/polyphony, not chorus-codes. Out-of-scope per PR: did NOT rename chorus CLI binary, ~/.chorus/ config dir, MCP server registration name, env vars, or GitHub repo (see PR body for the deliberate compat invariants).
There was a problem hiding this comment.
crypticpy has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/cli/commands/update.ts (1)
212-220:⚠️ Potential issue | 🟠 Major | ⚡ Quick winEncode scoped package names before calling npm dist-tags endpoint.
The code interpolates
@crypticpy/polyphonydirectly into the URL path without encoding. According to the npm registry API specification, scoped packages must have their forward slash encoded as%2Fin URL paths; failure to do so results in 404 errors as the registry interprets the slash as a directory separator. SincefetchLatestVersion("@crypticpy/polyphony")is actively called insrc/daemon/routes/system.ts, this bug manifests in production.Use
encodeURIComponent(packageName)before URL interpolation:Suggested fix
export async function fetchLatestVersion( packageName = "`@crypticpy/polyphony`", ): Promise<string | null> { try { + const escapedPackageName = encodeURIComponent(packageName); const ac = new AbortController(); const timer = setTimeout(() => ac.abort(), 5000); const res = await fetch( - `https://registry.npmjs.org/-/package/${packageName}/dist-tags`, + `https://registry.npmjs.org/-/package/${escapedPackageName}/dist-tags`, { signal: ac.signal }, );🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/cli/commands/update.ts` around lines 212 - 220, The fetchLatestVersion function currently injects packageName directly into the npm dist-tags URL causing 404s for scoped packages; update the URL construction in fetchLatestVersion to use encodeURIComponent(packageName) (i.e., encode the packageName before interpolating into `https://registry.npmjs.org/-/package/.../dist-tags`) so scoped names like "`@crypticpy/polyphony`" have their slash encoded as %2F; keep the AbortController/timer logic and existing fetch call otherwise unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@src/cli/commands/update.ts`:
- Around line 212-220: The fetchLatestVersion function currently injects
packageName directly into the npm dist-tags URL causing 404s for scoped
packages; update the URL construction in fetchLatestVersion to use
encodeURIComponent(packageName) (i.e., encode the packageName before
interpolating into `https://registry.npmjs.org/-/package/.../dist-tags`) so
scoped names like "`@crypticpy/polyphony`" have their slash encoded as %2F; keep
the AbortController/timer logic and existing fetch call otherwise unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 4206b913-3bed-46b1-848c-3e0bda30aaad
📒 Files selected for processing (7)
src/app/onboarding/page.tsxsrc/cli/commands/start.tssrc/cli/commands/stop.tssrc/cli/commands/update.tssrc/cli/index.tssrc/daemon/routes/system.tssrc/mcp/client.ts
Scoped npm names (`@scope/pkg`) need the `/` percent-encoded as `%2F` for the dist-tags endpoint to resolve them. encodeURIComponent is a no-op for unscoped names, so the legacy `chorus-codes` callsite stays correct. Found by CodeRabbit on review of the prior commit.
There was a problem hiding this comment.
crypticpy has reached the 50-review limit for trial accounts. To continue receiving code reviews, upgrade your plan.
|
@coderabbitai re: |
|
Tip For best results, initiate chat on the files or code changes.
|
Summary
The fork has diverged enough to be its own project. New product name is Polyphony — same multi-voice metaphor as Chorus but more distinct (Chorus = unison; polyphony = multiple independent voices interleaving, which is actually a better fit for the multi-LLM-disagreement-as-signal product).
package.json: name →@crypticpy/polyphony, repo/homepage →crypticpy/chorus, bin entries: bothpolyphonyandchoruspoint to the same launcher.npm i -ginstall command, product-name prose throughout, and a new Compatibility section explaining what still works after the rename.Backward compatibility (deliberate, all preserved)
chorusstill works (added as a bin alias alongsidepolyphony).~/.chorus/unchanged.chorus.db, templates, logs, install-id, no-telemetry, secrets all stay where they were.chorusin editors, so prompts like "ask chorus to review …" andchorus.create_chattool calls keep working.CHORUS_TELEMETRY,CHORUS_DB_PATH,CHORUS_CODEX_HOME,CHORUS_LOG_LEVELunchanged.crypticpy/chorusfor now.Out of scope (separate follow-ups)
~/.chorus/→~/.polyphony/(needs migration logic).Test plan
pnpm typecheck— cleanpnpm test— 1085/1085 passnpm packproduces a tarball namedcrypticpy-polyphony-0.8.26.tgzwith bothchorusandpolyphonybins (will be verified locally before npm publish in a follow-up)🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
polyphonyCLI provided alongside legacychorusfor compatibility.Documentation
Chores
@crypticpy/polyphonyand update flows now target the new package.