feat(brand): unify on Deck Hearth across in-repo strings + infra (P1 brand decision) #21
No reviewers
Labels
No labels
agent-context-drift
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: rstillwell/deckhearth#21
Loading…
Reference in a new issue
No description provided.
Delete branch "convoy/pick-a-name"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Brand-consistency convoy. Resolves the launch-blocking inconsistency called out in
AGENTS.mdline 5 since project setup: the repo / README / seed / npm / Redis / admin email all said "TCG Vault" (andtcgvault/tcg-vaultvariants), while the actual rendered Layout header said "Deck Hearth."Operator gate-0 decision: Deck Hearth wins. Two briefs, applied serially.
Convoy artifacts
.convoys/pick-a-name.md(architect ratified all 5 naming choices; operator ratified D1-D5 + Risk 4 PRESERVE at gate-1).convoys/pick-a-name/brief-1-display-and-comment-sweep.md.convoys/pick-a-name/brief-2-infrastructure-and-email-migration.md989b7fa· Architect:50ce9ab· B1:ac8c998· B2:1c18d21⚠️ Operator post-merge action REQUIRED
Before any user (admin, alice, bob) attempts to log in against the rebranded prod / staging DB, the following migration MUST run:
This UPDATEs three rows in the
userstable (admin / alice / bob) from@tcgvault.com→@deckhearth.com. The script is ESM, idempotent, and fail-loud on UNIQUE-constraint collision (which would indicatesetup-neon-db.jsalready ran post-rename — explicit ordering error).Order matters: migration FIRST, then any subsequent
npm run setup-dbinvocation. If you forget, admin login 401s until the migration runs.Decisions ratified
deck-hearthdeck-hearth-logo-container; npm conventiondeckhearth(single token)prefix:takes single tokensadmin@deckhearth.com(+ alice/bob)deckhearth(notdh)admin@tcgvault.comintest/lib/permission-middleware.test.jswith 7-line "why" commentfix-auth-bypassbug shape; matches the project's pattern of preserving historical truth as GotchasDiff (21 files, +1897/-37 total; ~140 line net code)
B1 (
ac8c998) — mechanical 7-file display + comment sweep:AGENTS.md,.cursor/rules/{ui-and-theming,auth-and-permissions}.mdc,scripts/README.mdpages/api/cards/{import-lorcana,import-pokemon}.js(User-Agent strings)scripts/import-lorcana.js(comment block)B2 (
1c18d21) — infrastructure + email migration:lib/rate-limit.js: 5 Redis prefixestcgvault:*→deckhearth:*package.json: nametcg-vault→deck-hearthpackage-lock.json: regenerated (STOP-on-churn confirmed: only the 2"name":lines changed; no dep churn)scripts/{setup-neon-db,reset-db,create-test-users}.js: admin/alice/bob email renamepages/login.js: demo-credential pre-fill text updatedREADME.md+TESTING_GUIDE.md: operator caveat blockquotestest/lib/permission-middleware.test.js: Risk 4 PRESERVE (literal kept + 7-line "why" comment)scripts/migrations/2026-05-24-rename-admin-email.js(ESM, idempotent, UNIQUE-collision-safe)Per-class limiter inventory (post-rename Redis state)
checkAuthRateLimitauth/login.js,auth/register.jsdeckhearth:authcheckSearchRateLimitusers/search.js,cards/search.jsdeckhearth:searchcheckUploadRateLimituser/avatar.jsdeckhearth:uploadcheckGenerateRateLimituser/avatar/generate.jsdeckhearth:generatecheckImportRateLimitcards/import-{mtg,pokemon,lorcana}.jsdeckhearth:importOne-time per-15-min / per-1-hour counter reset is the explicitly-accepted trade. Counter windows are short; no user-perceptible impact. Existing rate-limit state in Upstash will accumulate at the new prefix on first request post-deploy.
Verification
npm run lintnpm run test:run(vitest)"TCG Vault"in B1 filesTCG-Vault/1.0User-Agentlib/rate-limit.jsRedis prefixesdeckhearth:, 0tcgvault:@tcgvault.comcross-cutWHEREclauses + docs)node --checkmigration scriptgit diff package-lock.json"name":linesCross-validation lineage (smoke spec stability)
This is the 4th PR where the
tests/smoke/app.smoke.spec.ts3-test spec defends the auth surface through a sweeping change:Same 3-test spec, never modified, still passing. Accumulating evidence that the smoke spec is well-targeted at the stable auth surface.
Out of scope (queued follow-ups)
rename-repo-and-vercel-project— GitHub repo rename + Vercel project rename (P2 polish; auto-redirects make it low-urgency)point-domain-at-deckhearth— DNS / domain (blocked on domain acquisition)regenerate-brand-assets— favicon, OG, social cards (P2 polish; needs design pass)migrate-existing-user-emails— if other (non-admin/alice/bob) users with@tcgvault.*emails exist (architect's audit found only the 3 seed users)convert-reset-db-to-esm— CJS-in-ESM bug inscripts/reset-db.js:142(NEW; surfaced during architect audit)seed-visual-baselines-on-linux— MUST run AFTER this PR (so first Linux baseline captures Deck Hearth strings)Test plan
node --checkexit 0lib/rate-limit.jsverifiedadmin@tcgvault.comuntil migration runs — so this verifies the migration ordering documented above. Preview DB is independent of prod.)Made with Cursor
The latest updates on your projects. Learn more about Vercel for GitHub.
Pipeline Health
Build + CI gates
Build runs on Vercel; this CI runs lint and schema-map drift only (no duplicate build).
Role reports
See individual comments above for details. This rollup updates automatically.
Visual Diff
Screenshots and diffs uploaded as artifacts: view run
If intentional changes: update snapshots locally with
npx playwright test --project=visual --update-snapshotsand commit.