Skip to content

feat(brand): ship as Dreamforge - #3

Merged
QuicksilverSlick merged 5 commits into
mainfrom
feat/dreamforge-brand
Aug 31, 2026
Merged

feat(brand): ship as Dreamforge#3
QuicksilverSlick merged 5 commits into
mainfrom
feat/dreamforge-brand

Conversation

@QuicksilverSlick

Copy link
Copy Markdown
Owner

The fork ships as Dreamforge. 231 user-visible strings across 95 files, and nothing else.

What is deliberately untouched

Untouched Why
crate names buzz-* upstream use paths keep resolving
BUZZ_* env vars (418 of them) upstream code reads them by name
wire tags buzz-channel, buzz-protect, buzz-visibility protocol interop with other Buzz relays and clients
app identifier xyz.block.buzz.app changing it moves the app data dir and keyring, orphaning an existing install
108 code comments invisible to users; every one rewritten is a merge conflict for no reader's benefit

The 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 reads BUZZ_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

tsc clean, vite build clean, and biome flags exactly the same 7 pre-existing files as before — measured by stashing and re-running, not assumed.

Also drops two .tsbuildinfo files that git add -A picked up and adds the ignore rule; they are machine-local compiler state and not tracked upstream.

QuicksilverSlick and others added 4 commits August 31, 2026 10:41
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>
@QuicksilverSlick
QuicksilverSlick merged commit 26ab5c1 into main Aug 31, 2026
@QuicksilverSlick
QuicksilverSlick deleted the feat/dreamforge-brand branch August 31, 2026 22:14
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant