fix(brand): stop claiming a domain the project does not own - #32
Merged
Merged
Conversation
|
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
G9 decision by the owner (2026-08-11): no domain is acquired, the project publishes no website, and its canonical location is github.com/Rwanbt/unifia. The starting point was worse than "packages/web quotes opencode.ai". The rebrand had *fabricated* unifia.ai — a domain nobody has registered, and therefore claimable by a third party — inside executable surfaces: - infra/stage.ts used it as the production domain. It now sits behind UNIFIA_ALLOW_UPSTREAM_DEPLOY, mirroring script/publish.ts, and the production domain reverts to upstream's real one, reachable only under that opt-in. - deploy.yml fired on `push: [dev, production]`. Merging PR #23 into `dev` would therefore have launched `sst deploy` against Cloudflare hostnames, a Stripe webhook and PlanetScale branches that are not ours. It is now workflow_dispatch with an explicit confirmation input. - CODE_OF_CONDUCT.md and SECURITY-INCIDENT-RESPONSE.md routed abuse and vulnerability reports to conduct@/security@unifia.ai — addresses that cannot receive anything. They now use GitHub private reporting. - Both desktop menus opened https://unifia.ai/docs. - 17 app locales labelled the link "unifia.ai/zen" while the href pointed at opencode.ai/zen. - entry.tsx branched on hostname "unifia.ai": dead code, since the fork serves from no domain. - Synthetic git identities used @unifia.ai; they now use .invalid (RFC 2606), which cannot resolve by construction. One pattern recurred: the rebrand renamed the *text* without the *link*. Check both directions when renaming. packages/web and packages/console stay out of scope by decision — they are website surfaces the fork does not publish, and their deploy is neutralised above. Remaining mentions elsewhere are descriptive (audit reports, plans, explicit prohibitions) and direct nobody to the domain. Evidence: typecheck 35/35; identity gate "7 surfaces agree"; brand gate "30/30 masters, 208/208 generated"; packages/app 686 pass / 0 fail.
Rwanbt
force-pushed
the
fix/unifia-domain-decision
branch
from
August 11, 2026 19:34
64511e8 to
e5083f7
Compare
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.
Issue for this PR
Closes #31
Type of change
What does this PR do?
The owner decided G9 on 2026-08-11: no domain is acquired, the project ships no
website, and its canonical location is
github.com/Rwanbt/unifia.The problem was not that
packages/webquotesopencode.ai. It is that therebrand invented
unifia.ai— a domain nobody has registered — and put it inplaces that execute. Anyone can register it, so each of these is a handle on
our users rather than a cosmetic typo.
What changes, and why each works:
infra/stage.tsnow refuses to build a domain unlessUNIFIA_ALLOW_UPSTREAM_DEPLOYis set, the same guardscript/publish.tsalready uses for the same reason. The production domain reverts to upstream's
real one, so no Unifia domain is fabricated in source at all.
deploy.ymlwas triggered bypush: [dev, production]. Since PR feat: complete the Unifia rebrand and repair the desync it left behind #23 mergesinto
dev, that merge would have runsst deployagainst Cloudflarehostnames, a Stripe webhook and PlanetScale branches we do not own. It is now
workflow_dispatchwith an explicit confirmation input, and only that pathsets the env var above. This was the concrete hazard, not a hypothetical one.
conduct@andsecurity@unifia.ai. Those mailboxes cannot exist. They nowuse GitHub private reporting, so a report reaches someone.
https://unifia.ai/docs; they now open the repo.unifia.ai/zenon a link whosehrefwasopencode.ai/zen. The label now states the real destination.entry.tsxbranched on hostnameunifia.ai. That branch could never betaken, since the fork serves from no domain, so it is deleted.
.invalid(RFC 2606), which cannot resolve.packages/webandpackages/consoleare deliberately untouched. They are thewebsite surfaces, the fork does not publish them, and their deploy is disabled
above. Rewriting ~3100 strings there buys nothing while no site exists. The
mentions that remain elsewhere are descriptive — audit reports and explicit
prohibitions — and send nobody to the domain.
One pattern is worth carrying forward: the rebrand renamed link text without
renaming the link. The same shape is still visible in the console download
page, which copies
opencode.ai/installunder a label readingunifia.ai/install. Check both directions when renaming.How did you verify your code works?
bun turbo typecheck --force: 35/35 successful.node scripts/identity/check.mjs: 7 surfaces agree withconfig/identity.json.node scripts/brand/check.mjs: 30/30 masters and 208/208 generated verified.packages/app: 686 pass, 0 fail, 28223 expectations across 87 files.deploy.ymlnow exposes onlyworkflow_dispatch, which is the property that actually removes the risk.bunx biome checkclean on the edited sources. Four of the touched filesfail
prettier --check, but they already did so before this branch — Iverified that against the pristine tree rather than assuming it.
Screenshots / recordings
Not a visual change: the user-visible effect is that two menu entries and one
provider link now resolve instead of dead-ending.
Checklist