feat(brand): ship as Dreamforge - #3
Merged
Merged
Conversation
This fork is Dreamforge. The rename covers what a person reads and nothing else: RENAMED window title, product name, 228 user-visible strings UNCHANGED crate names (buzz-*), so upstream `use` paths resolve UNCHANGED BUZZ_* environment variables UNCHANGED wire tags (buzz-channel, buzz-protect, buzz-visibility) UNCHANGED event kinds and the app identifier The exclusions are the point. Upstream changed 367,825 lines in the last fortnight, 5,412 of which touch the name: 1,943 crate/module references and 870 environment variables, against ~350 mentions of the bare word. Renaming the first two categories is where a fork breaks. An environment variable is the worst case. Upstream adds BUZZ_NEW_THING, its code reads BUZZ_NEW_THING, and a renamed prefix means it reads a variable nobody sets — compiles, runs, silently takes a default. A wire tag is worse still: no error, just two systems that no longer agree. Display strings have no such coupling. Nothing reads them back. The app identifier stays xyz.block.buzz.app deliberately. Changing it moves the app data directory and keyring service, orphaning the identity and settings of anyone who has already onboarded. It is invisible to users, so the rebrand does not need it. Code comments keep saying Buzz — 108 of them. They are invisible to users and every one rewritten is a merge conflict against upstream for no reader's benefit. Identity surfaces (window title, terminal panel, shared compute) now read from shared/constants/brand.ts. Prose keeps the literal word: turning every sentence into a template literal would add conflict surface without making a future rename meaningfully easier. Verified: tsc clean, vite build clean, and biome flags exactly the same 7 pre-existing files as before the change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
"Buzz-native", "Buzz-hosted" and "Buzz-curated" survived the first sweep because the pattern excluded a trailing hyphen — deliberately, to keep wire tags like buzz-channel intact. These are safe: wire tags are lowercase, and a capital B never appears in one. All three are prose a person reads. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Three Windows setup files and 25 test artifacts were swept into the rename by `git add -A`. The setup scripts move to their own branch; the artifacts are ignored on the buzz-acp branch, where they originate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
`pnpm typecheck` writes desktop/tsconfig.tsbuildinfo and tsconfig.node.tsbuildinfo, and `git add -A` picked them up. They are machine-local incremental compiler state, not tracked upstream, and would churn on every typecheck. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
# Conflicts: # .gitignore
QuicksilverSlick
added a commit
that referenced
this pull request
Sep 3, 2026
…ripts `parsePromptText` finds the originating event by matching the section title against the literal `"buzz event"`. The rename in #3 changed the title that `semanticTurnTitle` produces to the product name but left that matcher alone, so `eventSection` came back undefined, `eventContent` was empty, and `agentSessionTranscript` skipped `upsertMessage` entirely — the person's own message vanished from the transcript, with no error anywhere. The title has two producers that legitimately disagree: - buzz-acp writes `[Buzz event: …]` on the wire, and `<buzz-event>` is a protocol tag. Sections parsed from that text carry the protocol spelling, which this fork deliberately does not rename. - `semanticTurnTitle` renders the same section for display, where the product name is correct. So the matcher accepts both spellings, and the display side now derives from PRODUCT_NAME rather than repeating a literal — the two can no longer drift apart the way they just did. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
QuicksilverSlick
added a commit
that referenced
this pull request
Sep 3, 2026
Eleven test files asserted the literal "Buzz" against copy the #3 rename had changed to "Dreamforge". They have been failing on main ever since; nobody saw it because CI path-gates the desktop job, and the small PRs that followed never triggered it. Nineteen assertions were dead the whole time — they would not have caught a real regression either. Each now derives its expectation from PRODUCT_NAME, TERMINAL_LABEL, or SHARED_COMPUTE_LABEL, so the next rename updates them with the product rather than orphaning them again. Deliberately left as literal "Buzz", because they are not brand copy: - `[Buzz event: …]` inputs — buzz-acp's wire format, and one expectation for a title parsed out of it (the sibling `<buzz-event>` case is titled for display and does use the constant; both are asserted, with a comment explaining why the two spellings are both correct). - "Buzz Patrol" and the repository named "Buzz" in the project fixtures, and "Buzz is visible" in the error-boundary fixture — arbitrary test data that happens to contain the word. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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 fork ships as Dreamforge. 231 user-visible strings across 95 files, and nothing else.
What is deliberately untouched
buzz-*usepaths keep resolvingBUZZ_*env vars (418 of them)buzz-channel,buzz-protect,buzz-visibilityxyz.block.buzz.appThe exclusions are the point. Upstream changed 367,825 lines in the last fortnight, 5,412 touching the name: 1,943 crate/module references and 870 environment variables, against ~350 mentions of the bare word.
Renaming an env var is the worst case — upstream adds
BUZZ_NEW_THING, its code readsBUZZ_NEW_THING, and a renamed prefix means it reads a variable nobody sets. It compiles, runs, and silently takes a default. A wire tag is worse: no error at all, just two systems that no longer agree. Display strings have no such coupling; nothing reads them back.Centralised, not scattered
Identity surfaces (window title, terminal panel, shared compute) read from
desktop/src/shared/constants/brand.ts. Prose keeps the literal word — turning every sentence into a template literal adds conflict surface without making a future rename meaningfully easier. The rule is written into the module header.Testing
tscclean,vite buildclean, and biome flags exactly the same 7 pre-existing files as before — measured by stashing and re-running, not assumed.Also drops two
.tsbuildinfofiles thatgit add -Apicked up and adds the ignore rule; they are machine-local compiler state and not tracked upstream.