Skip to content

chore: rebrand user-facing references to Altimate Code - #134

Merged
anandgupta42 merged 11 commits into
mainfrom
chore/rebrand-user-facing-to-altimate
Mar 15, 2026
Merged

chore: rebrand user-facing references to Altimate Code#134
anandgupta42 merged 11 commits into
mainfrom
chore/rebrand-user-facing-to-altimate

Conversation

@anandgupta42

Copy link
Copy Markdown
Contributor

What does this PR do?

Rebrands all user-facing references from OpenCode/anomalyco to Altimate Code/AltimateAI across the non-packages codebase while preserving internal code names for upstream compatibility.

Type of change

  • Refactor / internal change (no new features or bug fixes)

Issue for this PR

N/A — maintenance/branding task

How did you verify your code works?

  • Verified with rg that no opencode.ai, anomalyco, or altimate-code.sh references remain in non-packages files
  • CI typecheck passed (all 13 packages cached)

Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • New and existing tests pass locally with my changes

Scope: 49 files changed (non-packages only — .opencode/ and packages/ excluded)

Changes include:

  • URLs: opencode.aialtimate.ai
  • GitHub org: anomalyco/opencodeAltimateAI/altimate-code
  • Product name: "OpenCode" → "Altimate Code" in workflows, scripts, docs
  • CLI binary references: opencodealtimate-code in install script, nix configs
  • npm package: opencode-ai@altimateai/altimate-code
  • VSCode extension: name, publisher, repository
  • Social: X handle → @Altimateinc
  • Brew tap: AltimateAI/tap/altimate-code
  • Container registry: ghcr.io/AltimateAI
  • All 20 localized READMEs
  • Infra: domain, PlanetScale org

Preserved (internal):@opencode-ai/ npm scope, packages/opencode/ directory, OPENCODE_* env vars, .opencode/ config paths

🤖 Generated with Claude Code

Comprehensive rebranding of user-facing surfaces while preserving
internal code names for upstream compatibility:
- URLs: `opencode.ai` → `altimate.ai`
- GitHub org: `anomalyco/opencode` → `AltimateAI/altimate-code`
- Product name: "OpenCode" → "Altimate Code" in UI, prompts, docs
- CLI binary: `opencode` → `altimate-code` in install scripts, nix
- npm package: `opencode-ai` → `@altimateai/altimate-code`
- Extensions: VSCode rebranded
- Social: X handle → `@Altimateinc`
- Brew tap: `AltimateAI/tap/altimate-code`
- Container registry: `ghcr.io/AltimateAI`
- All 20 localized READMEs
Preserved internal names: `@opencode-ai/` scope, `packages/opencode/`
dir, `OPENCODE_*` env vars, `.opencode/` config paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Thanks for your contribution!

This PR doesn't have a linked issue. All PRs must reference an existing issue.

Please:

  1. Open an issue describing the bug/feature (if one doesn't exist)
  2. Add Fixes #<number> or Closes #<number> to this PR description

See CONTRIBUTING.md for details.

@github-actions

Copy link
Copy Markdown

This PR doesn't fully meet our contributing guidelines and PR template.

What needs to be fixed:

  • No issue referenced. Please add Closes #<number> linking to the relevant issue.

Please edit this PR description to address the above within 2 hours, or it will be automatically closed.

If you believe this was flagged incorrectly, please let a maintainer know.

Comment threadinfra/stage.ts Outdated
Comment on lines 1 to 7
export const domain = (() => {
if ($app.stage === "production") return "opencode.ai"
if ($app.stage === "dev") return "dev.opencode.ai"
return `${$app.stage}.dev.opencode.ai`
if ($app.stage === "production") return "altimate.ai"
if ($app.stage === "dev") return "dev.altimate.ai"
return `${$app.stage}.dev.altimate.ai`
})()

export const zoneID = "430ba34c138cfb5360826c4909f99be8"

This comment was marked as outdated.

- `.github/workflows/beta.yml`: "Install OpenCode" → "Install Altimate Code",
`bun i -g opencode-ai` → `bun i -g @altimateai/altimate-code`
- `.github/actions/setup-git-committer/action.yml`: descriptions updated
from "OpenCode GitHub App" → "Altimate Code GitHub App"
- `github/index.ts`: `spawn('opencode')` → `spawn('altimate-code')`
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comment threadgithub/index.ts
} else {
const oidcToken = await core.getIDToken("opencode-github-action")
response = await fetch("https://api.opencode.ai/exchange_github_app_token", {
const oidcToken = await core.getIDToken("altimate-code-github-action")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The OIDC token audience was updated to "altimate-code-github-action" on the client, but the server-side validation still expects the old "opencode-github-action" audience, causing authentication failures.
Severity: CRITICAL

Suggested Fix

Update the EXPECTED_AUDIENCE constant in the server-side code (e.g., in packages/function/src/api.ts) to match the new audience string used by the client: "altimate-code-github-action".

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: github/index.ts#L385
Potential issue: The GitHub Action client code was updated to request an OIDC token with
the audience `"altimate-code-github-action"`. However, the server-side validation logic
was not updated as part of this rebranding PR and still expects the old audience,
`"opencode-github-action"`. The `jwtVerify` function performs strict audience matching,
so this mismatch will cause token validation to fail. As a result, all GitHub Action
runs using OIDC authentication will fail with a 403 Forbidden error, rendering the
integration non-functional.

Comment threadnix/desktop.nix Outdated
postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
mv $out/bin/OpenCode $out/bin/opencode-desktop
sed -i 's|^Exec=OpenCode$|Exec=opencode-desktop|' $out/share/applications/OpenCode.desktop
mv "$out/bin/Altimate Code" $out/bin/altimate-code-desktop

This comment was marked as outdated.

Comprehensive automation for merging upstream OpenCode releases into
the Altimate Code fork, inspired by Kilo-Org/kilocode's approach.
Key scripts:
- `merge.ts` — 11-step merge orchestration with auto-conflict resolution,
branding transforms, version preservation, and `--continue` support
- `analyze.ts` — `altimate_change` marker integrity audit + branding
leak detection (CI-friendly exit codes)
- `list-versions.ts` — upstream tag listing with merge status indicators
- `verify-restructure.ts` — branch comparison verification
Transforms (10 files):
- Core branding engine with preservation-aware product name handling
- `keepOurs` / `skipFiles` / lock file conflict auto-resolution
- Specialized transforms for `package.json`, Nix, Tauri, i18n,
extensions, web docs, workflows, and build scripts
Configuration:
- All branding rules in TypeScript (`utils/config.ts`) for type safety
- URL, GitHub, registry, email, app ID, social, npm, brew mappings
- Preserve patterns protect internal refs (`@opencode-ai/`, `OPENCODE_`)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comment threadscript/upstream/merge.ts Outdated
Comment on lines +754 to +756
const versionSnapshot = snapshotVersions()

await postMergeTransforms(config, state.version, versionSnapshot)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: In the merge script's --continue flow, package versions are snapshotted after the merge commit, causing the version restoration logic to silently fail and not revert upstream version bumps.
Severity: MEDIUM

Suggested Fix

Persist the versionSnapshot in the MergeState file when the merge process is paused due to conflicts. When resuming with --continue, load this pre-merge snapshot from the state file instead of creating a new one. This will provide the postMergeTransforms function with the correct pre-merge versions to restore.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent.
Verify if this is a real issue. If it is, propose a fix; if not, explain why it's not
valid.
Location: script/upstream/merge.ts#L754-L756
Potential issue: When resuming a merge with the `--continue` flag after resolving
conflicts, the script takes a snapshot of package versions *after* the merge is
committed. The original pre-merge versions are not persisted in the state file. As a
result, when the `restoreVersions` logic runs, it compares the post-merge versions on
disk with a post-merge snapshot, finds no differences, and silently fails to restore the
original package versions. This leads to unintended upstream version bumps being kept,
contrary to the script's documented purpose.

anandgupta42and others added 4 commits March 14, 2026 10:36
…style cleanup)
Remove upstream platform packages (app, console, containers, desktop,
desktop-electron, docs, enterprise, extensions, function, identity,
slack, storybook, ui, web), translated READMEs, upstream-only workflows,
nix packaging (nix/, flake.nix, flake.lock), SST infra (sst.config.ts,
sst-env.d.ts), specs/, and .signpath/ config.
- Update workspaces from `packages/*` glob to explicit package list
- Remove unused catalog entries and devDependencies (sst, @aws-sdk/client-s3)
- Remove unused scripts (dev:desktop, dev:web, dev:storybook)
- Remove `electron` from trustedDependencies
- Remove `@opencode-ai/app#test` task from turbo.json
- Update merge-config.json and config.ts skipFiles with new patterns
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reorganized around the step-by-step workflow someone would follow
when doing an upstream merge. Covers fork strategy, prerequisites,
the full merge process, configuration reference, and troubleshooting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… guard tests
Add 141 tests across 3 test files to prevent regressions:
- `branding.test.ts` (33 tests): Verify all user-facing surfaces show
Altimate branding — package metadata, CLI entry points, logo, welcome
banner, install script, GitHub Action, VSCode extension, postinstall,
and a full codebase leak scanner for `opencode.ai`/`anomalyco`/`opncd.ai`
- `build-integrity.test.ts` (19 tests): Verify workspace config, turbo.json
validity, package dependencies, binary entry points, skip/keepOurs
consistency, and no orphaned package references
- `upstream-guard.test.ts` (89 tests): Verify skipFiles/keepOurs config
completeness, deleted upstream packages stay deleted, branding rules
coverage, preserve patterns, and no upstream artifacts reappear
Fix 14 upstream branding leaks found by the tests:
- Replace `opencode.ai` URLs with `altimate.ai` in config.ts, retry.ts,
dialog-provider.tsx, oauth-provider.ts, migrate-tui-config.ts
- Replace `opncd.ai` with `altimate.ai` in share-next.ts and import.ts
- Replace "OpenCode Go" with "Altimate Code Go" in dialog-provider.tsx
Add CI enforcement:
- New `branding-check.yml` workflow with branding audit + test jobs
- Add `branding` job to existing `ci.yml` for PR checks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This pull request has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.

Feel free to open a new pull request that follows our guidelines.

The branding unit tests already run as part of the existing `typescript`
CI job via `bun test`. A separate workflow and branding audit on every
commit is overkill — the `analyze.ts --branding` audit is a merge-time
tool, not a per-commit check.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This pull request has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.

Feel free to open a new pull request that follows our guidelines.

@anandgupta42

Copy link
Copy Markdown
ContributorAuthor

Addressing Sentry bot review comments:

  1. infra/stage.ts (zoneID) — File deleted in Kilo-style cleanup. We don't use upstream SST infrastructure. N/A.

  2. github/index.ts (OIDC audience) — Server-side validation was in packages/function/ (deleted, upstream-only). Audience string is only used client-side, already updated. OIDC validation happens in our own backend.

  3. nix/desktop.nix (binary name) — File deleted in cleanup. We don't use Nix packaging. N/A.

  4. merge.ts (version snapshot in --continue) — Valid catch, fixed: pre-merge versionSnapshot is now persisted in the state file and restored when resuming with --continue.

The `--continue` handler was re-snapshotting versions after the merge
commit, capturing upstream versions instead of our pre-merge versions.
Now the snapshot is saved in `.upstream-merge-state.json` and restored
when resuming.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

This pull request has been automatically closed because it was not updated to meet our contributing guidelines within the 2-hour window.

Feel free to open a new pull request that follows our guidelines.

@kulvirgit

kulvirgit commented Mar 15, 2026

Copy link
Copy Markdown
Collaborator

Multi-Model Code Review: chore/rebrand-user-facing-to-altimate

Verdict: APPROVE with required fixes
Major Issues: 3 | Minor Issues: 3 | NITs: 3

Reviewed by 7 AI models: Claude, Gemini, Kimi, Grok, MiniMax, GLM-5, Qwen. Convergence: 1 round. 5 approvals, 2 with corrections (incorporated).


Major Issues

2. Branding leaks in OAuth (Branding)

packages/opencode/src/mcp/oauth-provider.ts:41 + packages/opencode/src/mcp/oauth-callback.ts:10,21,30

client_name: "OpenCode" (visible on consent screens) and HTML titles/text show "OpenCode" instead of "Altimate Code".

Fix: Replace all with "Altimate Code".

Flagged by: Kimi, MiniMax, GLM-5, Qwen.


3. Anthropic plugin regex without word boundaries (Logic Error)

packages/opencode/src/altimate/plugin/anthropic.ts:170

/opencode/gi replaces inside URLs, paths, identifiers. opencode.ai becomes Claude.ai.

Fix: /\bOpenCode\b/g and /\bopencode\b/gi.

Flagged by: Claude. Confirmed by: Kimi, Grok, MiniMax, GLM-5 during convergence.


Minor Issues

#IssueLocation
4isUpgrade variable name misleading (logic is correct — fires on fresh install too)welcome.ts:38
5User-agent hardcoded to "claude-cli/2.1.2" instead of Installation.VERSIONanthropic.ts:155
6Token refresh error detected via brittle string matchingmessage-v2.ts:888

NITs

#IssueLocation
7Hardcoded repo "AltimateAI/altimate-code" — could be a constantfeedback-submit.ts:111
8Error swallowed without logging in gh --version catchfeedback-submit.ts:52
9extractChangelog("0.0.0") parses full changelog when only latest section is usedwelcome.ts:55

Positive Observations

  • Branding tests (842 lines) — CI guardrails against upstream branding leaks. Universally praised.
  • Upstream merge tooling — production-grade with dry-run, --continue, auto-conflict resolution.
  • Feedback tool tests (747 lines) — comprehensive coverage.
  • OAuth retry — proper 4xx/5xx distinction with backoff.
  • Welcome banner — fully wrapped in try/catch, can never break the CLI.

Missing Tests

  • Anthropic system prompt rewriting regex
  • OAuth callback server edge cases (timeout, CSRF, port-in-use)
  • Upstream merge transform unit tests

Convergence Summary

IssueGeminiKimiGrokMiniMaxGLM-5QwenClaude
#1 XSSMAJORMAJORMAJORMAJORMAJORMAJORMAJOR
#2 BrandingMAJORMAJORMAJORMAJORMAJORMAJORMAJOR
#3 RegexMAJORMAJORMAJORMAJORMAJORMAJOR
#4 isUpgradeNITMINORNITMAJORMAJORMINORMINOR
VerdictAPPROVEAPPROVEAPPROVEAPPROVE*CHANGES*CHANGES*APPROVE

*MiniMax/GLM-5/Qwen corrections incorporated.

Finding Attribution

IssueOriginType
XSS in OAuth error pagesClaudeUnique
Branding leaks in OAuthKimi, MiniMax, GLM-5, QwenConsensus
Anthropic regex without word boundariesClaudeUnique
Welcome banner namingClaude, GeminiConsensus
User-agent hardcodedClaudeUnique
Token refresh string matchingGeminiUnique

anandgupta42and others added 2 commits March 14, 2026 22:26
- Fix XSS in OAuth error page: escape HTML in error parameter
- Fix branding: `client_name` and HTML titles/text in OAuth pages
now show "Altimate Code" instead of "OpenCode"
- Fix Anthropic plugin regex: add word boundaries (`\b`) to prevent
replacing "opencode" inside URLs, paths, and identifiers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@anandgupta42
anandgupta42 merged commit f5466e7 into mainMar 15, 2026
7 of 14 checks passed
anandgupta42 added a commit that referenced this pull request Mar 17, 2026
* chore: rebrand all user-facing references from OpenCode to Altimate Code
Comprehensive rebranding of user-facing surfaces while preserving
internal code names for upstream compatibility:
- URLs: `opencode.ai` → `altimate.ai`
- GitHub org: `anomalyco/opencode` → `AltimateAI/altimate-code`
- Product name: "OpenCode" → "Altimate Code" in UI, prompts, docs
- CLI binary: `opencode` → `altimate-code` in install scripts, nix
- npm package: `opencode-ai` → `@altimateai/altimate-code`
- Extensions: VSCode rebranded
- Social: X handle → `@Altimateinc`
- Brew tap: `AltimateAI/tap/altimate-code`
- Container registry: `ghcr.io/AltimateAI`
- All 20 localized READMEs
Preserved internal names: `@opencode-ai/` scope, `packages/opencode/`
dir, `OPENCODE_*` env vars, `.opencode/` config paths
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: additional user-facing branding fixes missed from upstream rebase
- `.github/workflows/beta.yml`: "Install OpenCode" → "Install Altimate Code",
`bun i -g opencode-ai` → `bun i -g @altimateai/altimate-code`
- `.github/actions/setup-git-committer/action.yml`: descriptions updated
from "OpenCode GitHub App" → "Altimate Code GitHub App"
- `github/index.ts`: `spawn('opencode')` → `spawn('altimate-code')`
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* feat: add upstream merge automation tooling
Comprehensive automation for merging upstream OpenCode releases into
the Altimate Code fork, inspired by Kilo-Org/kilocode's approach.
Key scripts:
- `merge.ts` — 11-step merge orchestration with auto-conflict resolution,
branding transforms, version preservation, and `--continue` support
- `analyze.ts` — `altimate_change` marker integrity audit + branding
leak detection (CI-friendly exit codes)
- `list-versions.ts` — upstream tag listing with merge status indicators
- `verify-restructure.ts` — branch comparison verification
Transforms (10 files):
- Core branding engine with preservation-aware product name handling
- `keepOurs` / `skipFiles` / lock file conflict auto-resolution
- Specialized transforms for `package.json`, Nix, Tauri, i18n,
extensions, web docs, workflows, and build scripts
Configuration:
- All branding rules in TypeScript (`utils/config.ts`) for type safety
- URL, GitHub, registry, email, app ID, social, npm, brew mappings
- Preserve patterns protect internal refs (`@opencode-ai/`, `OPENCODE_`)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove upstream-only packages, workflows, and artifacts (Kilo-style cleanup)
Remove upstream platform packages (app, console, containers, desktop,
desktop-electron, docs, enterprise, extensions, function, identity,
slack, storybook, ui, web), translated READMEs, upstream-only workflows,
nix packaging (nix/, flake.nix, flake.lock), SST infra (sst.config.ts,
sst-env.d.ts), specs/, and .signpath/ config.
- Update workspaces from `packages/*` glob to explicit package list
- Remove unused catalog entries and devDependencies (sst, @aws-sdk/client-s3)
- Remove unused scripts (dev:desktop, dev:web, dev:storybook)
- Remove `electron` from trustedDependencies
- Remove `@opencode-ai/app#test` task from turbo.json
- Update merge-config.json and config.ts skipFiles with new patterns
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove upstream SST `infra/` directory and add to skipFiles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* docs: rewrite upstream merge README as a practical runbook
Reorganized around the step-by-step workflow someone would follow
when doing an upstream merge. Covers fork strategy, prerequisites,
the full merge process, configuration reference, and troubleshooting.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* test: add comprehensive branding, build integrity, and upstream merge guard tests
Add 141 tests across 3 test files to prevent regressions:
- `branding.test.ts` (33 tests): Verify all user-facing surfaces show
Altimate branding — package metadata, CLI entry points, logo, welcome
banner, install script, GitHub Action, VSCode extension, postinstall,
and a full codebase leak scanner for `opencode.ai`/`anomalyco`/`opncd.ai`
- `build-integrity.test.ts` (19 tests): Verify workspace config, turbo.json
validity, package dependencies, binary entry points, skip/keepOurs
consistency, and no orphaned package references
- `upstream-guard.test.ts` (89 tests): Verify skipFiles/keepOurs config
completeness, deleted upstream packages stay deleted, branding rules
coverage, preserve patterns, and no upstream artifacts reappear
Fix 14 upstream branding leaks found by the tests:
- Replace `opencode.ai` URLs with `altimate.ai` in config.ts, retry.ts,
dialog-provider.tsx, oauth-provider.ts, migrate-tui-config.ts
- Replace `opncd.ai` with `altimate.ai` in share-next.ts and import.ts
- Replace "OpenCode Go" with "Altimate Code Go" in dialog-provider.tsx
Add CI enforcement:
- New `branding-check.yml` workflow with branding audit + test jobs
- Add `branding` job to existing `ci.yml` for PR checks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* chore: remove separate branding CI workflow — tests run with `bun test`
The branding unit tests already run as part of the existing `typescript`
CI job via `bun test`. A separate workflow and branding audit on every
commit is overkill — the `analyze.ts --branding` audit is a merge-time
tool, not a per-commit check.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: persist version snapshot in merge state for `--continue` flow
The `--continue` handler was re-snapshotting versions after the merge
commit, capturing upstream versions instead of our pre-merge versions.
Now the snapshot is saved in `.upstream-merge-state.json` and restored
when resuming.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix: address code review — XSS, branding leaks, regex safety
- Fix XSS in OAuth error page: escape HTML in error parameter
- Fix branding: `client_name` and HTML titles/text in OAuth pages
now show "Altimate Code" instead of "OpenCode"
- Fix Anthropic plugin regex: add word boundaries (`\b`) to prevent
replacing "opencode" inside URLs, paths, and identifiers
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* ci: retry CI run
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@anandgupta42
anandgupta42 deleted the chore/rebrand-user-facing-to-altimate branch March 17, 2026 00:58
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@anandgupta42@kulvirgit