Skip to content

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

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

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

Conversation

@anandgupta42
Copy link
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

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

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.

infra/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>
} 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

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.

nix/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 on lines +754 to +756
const versionSnapshot = snapshotVersions()

await postMergeTransforms(config, state.version, versionSnapshot)
Copy link

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.

anandgupta42 and 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

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

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
Contributor Author

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

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
Copy link
Collaborator

kulvirgit commented Mar 15, 2026

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

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

NITs

# Issue Location
7 Hardcoded repo "AltimateAI/altimate-code" — could be a constant feedback-submit.ts:111
8 Error swallowed without logging in gh --version catch feedback-submit.ts:52
9 extractChangelog("0.0.0") parses full changelog when only latest section is used welcome.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

Issue Gemini Kimi Grok MiniMax GLM-5 Qwen Claude
#1 XSS MAJOR MAJOR MAJOR MAJOR MAJOR MAJOR MAJOR
#2 Branding MAJOR MAJOR MAJOR MAJOR MAJOR MAJOR MAJOR
#3 Regex MAJOR MAJOR MAJOR MAJOR MAJOR MAJOR
#4 isUpgrade NIT MINOR NIT MAJOR MAJOR MINOR MINOR
Verdict APPROVE APPROVE APPROVE APPROVE* CHANGES* CHANGES* APPROVE

*MiniMax/GLM-5/Qwen corrections incorporated.

Finding Attribution

Issue Origin Type
XSS in OAuth error pages Claude Unique
Branding leaks in OAuth Kimi, MiniMax, GLM-5, Qwen Consensus
Anthropic regex without word boundaries Claude Unique
Welcome banner naming Claude, Gemini Consensus
User-agent hardcoded Claude Unique
Token refresh string matching Gemini Unique

anandgupta42 and 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 main Mar 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 free to 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