Repository navigation
Ship the product as OpenFuse without breaking existing installs - #224
Merged
Merged
Conversation
Rename the product in docs, UI strings, the agent's default name and prompt, the API root, package names, the Expo app name, slug, scheme and bundle/package ids, Render services, disks and env names, compose, Docker image tags, test fixtures and temp prefixes. Rename the demo video file and its title metadata, and the PDF test fixture text. github.com URLs to the repository are unchanged; they redirect after the repository rename.
Existing installs keep what they already created under the old name: - OPENFUSE_ACCESS_KEY falls back to the previous variable name. - Without DATA_DIR or WORKER_DATA_DIR, an existing data directory under the previous name is still used, and it stays ignored by git and Biome. - Credentials encrypted under the previous associated data still decrypt. - Choice messages saved in older threads still parse and display. - An install that started before the rename keeps its computer's container, volume, labels, E2B metadata and files.py path; a new install records a computer-name file and uses the new names. Without COMPUTER_IMAGE it still accepts its existing containers' default image, and the image links the previous files.py path.
Runtime telemetry now carries accessibility_title "OpenFuse". The PostHog queries in docs/TELEMETRY.md filter on the new tag.
… hooks The demo videos, GIFs and cover images, and the document screenshot, show the old product name in the picture. They are removed along with every link to them, as are the two README videos hosted on GitHub. MuseApi and useMuseThread become FuseApi and useFuseThread.
tylerslaton
approved these changes
Nov 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The problem
The product is now called OpenFuse, and every surface still says OpenMuse: the app name and welcome screen, the agent's default name and the prompt it answers with, the API root, the PDF author, the Render services, the access-key variable, Docker image tags, package names and the docs. Anyone who deploys today sees the old name.
A find-and-replace is not enough here, because several of those strings are persisted identifiers. Google refresh tokens are encrypted with the product name as associated data. A self-hoster's
.envand every Render service holdOPENMUSE_ACCESS_KEY. The default data directory holds the database and the signing key. Each Docker computer's container, workspace volume and labels, and each E2B sandbox's metadata, are derived from the name. Choice messages saved in existing threads start with[OpenMuse choice]. Renaming those alone would sign people out, ask them to reconnect Google, hide their workspace files, and show raw choice payloads in old threads.The approach
Four commits, so each can be reviewed and reverted on its own.
The rename. Every form of the name changes in docs, UI copy, prompts, package names,
render.yaml, compose, the computer Dockerfile, image tags, env names and test fixtures. The Expo app changes name, slug, scheme and its iOS and Android ids (app.openfuse.mobile): nothing in the repository shows the app was submitted to the App Store, TestFlight or Google Play, and there is noeas.json.assets/openmuse-demo.mp4becomesassets/openfuse-demo.mp4; its title metadata is rewritten with a stream copy, so the decoded frames are byte-identical. The PDF worker fixture's text is updated. Links togithub.com/CopilotKit/OpenMusestay as they are, because they redirect once the repository is renamed and a later pass swaps them; their visible text changes. The talk-to-an-engineer link now carriesref=openfuse_hero.Existing installs keep working. Each fallback reads the new name first and carries a short legacy comment.
OPENFUSE_ACCESS_KEY, else the previous variable.DATA_DIRorWORKER_DATA_DIR, an existing old-named directory is used when.openfuse/does not exist. Both names stay in.gitignoreand Biome's excludes, so a contributor's old data directory, with its signing key and database, cannot be committed by accident.computer-namefile next tocomputer-deployment-id, before its signing key exists. An install with a signing key and no such file predates the rename, so it keeps its container, volume, labels, E2B metadata andfiles.pypath. This reuses the rule that already tells old installs apart for deployment ids, and it adds no Docker or E2B lookup to every call. The cost is real: an existing install keeps naming its computer resources the old way until its data directory is reset. WithoutCOMPUTER_IMAGE, such an install also accepts containers created from the old default image tag, and the image links the oldfiles.pypath, so rebuilding from the new Dockerfile does not break it. A new install never accepts the old tag.Telemetry, in its own commit:
accessibility_titleis now"OpenFuse", and the PostHog queries indocs/TELEMETRY.mdfilter on it.Media and client hooks. The demo videos, GIFs and cover images under
assets/demos/,assets/document.pngandassets/openfuse-demo.mp4show the old name in the picture, so they are removed along with every link to them, including the two README videos hosted as GitHub attachments and the alpha walkthrough on a personal release.MuseApianduseMuseThreadbecomeFuseApianduseFuseThread. This follows the media removal in #223.What is not covered
DATA_DIRnames inrender.yamlchanged. A Blueprint that re-syncs from this file may create new services instead of renaming the existing ones. Existing services keep working through the fallbacks if they are not re-synced.Verification
Local, Node 24 and pnpm 11.19:
pnpm lint,pnpm typecheck,pnpm --dir apps/worker typecheckandpnpm build:serverpass.pnpm test: 523 passed, 0 failed (main: 520), also after the media commit. The rename commit alone also passes lint, typecheck and all 520 existing tests.pnpm install --frozen-lockfilesucceeds with no lockfile change.tests/config.test.ts: the access key and data directory fallbacks, and that the new name wins when both exist.tests/vault.test.ts: a credential sealed with the old associated data decrypts; one sealed with any other does not.tests/jev.test.ts,apps/mobile/test/jev-actions.test.ts: old-prefix choices parse and display.tests/auth-startup.test.ts: a new install gets the new computer names and thecomputer-namefile, and keeps them after restart; an install with a signing key keeps the old names, with or withoutCOMPUTER_DEPLOYMENT_ID.tests/computer.test.ts: a pre-rename install attaches to its existing container on the old image and runs the oldfiles.pypath; a new install refuses that image.The remaining matches for the old name are the legacy fallbacks and their tests, and github.com URLs.
Merge notes
The telemetry tag is shared with CopilotKit/oss-path-to-production:
lib/common/signup-products.tsmust map"OpenFuse"too, or the weekly usage report drops these events. CopilotKit/Intelligence's ops telemetry catalog (RUNTIME_APPSinlibs/ops-contracts/src/telemetry-catalog.ts) needs the same change, or its chart for this app goes empty. The README'sref=openfuse_herorelies on the website accepting the new id.