My suggestion for getting out of the regression loop and to a deployed baseline. Pick a shipping option + note at the bottom.
1 · Where we are
Three versions, none of them shippable as-is
We've been building on the wrong base, which is why regressions keep surfacing by screenshot.
staging GOOD LOOK
workeros-ui-fixes-20260615
soft corners
correct Emily icon
no Brain banner
faster
✗ missing today's 31 fixes
main REGRESSED
origin/main · what we built on
boxy corners
wrong Emily icon
Brain banner back
slow loads
✓ has the structure today's PRs target
31 PRs FLOATING
today's work · unmerged
activation, run page
6 decisions, channels
design tokens, perf
✗ nothing deployed · nobody can use it
The pattern: HubSpot logo → weekly card → composer box → corners → Emily → Brain banner — every regression found one screenshot at a time, because we're improving a branch built on the wrong base. The fix isn't more patches; it's the right base + a deployed baseline.
2 · The reconciliation (in progress)
Cherry-pick today's fixes onto the good base → one correct branch
Your call: base = staging, layer today's work on top. This makes the 4 app regressions fall out of the right base, not separate patches.
✓
Base = staging (the good version)
soft corners, right Emily, no banner, fast — inherited, not re-fixed
↓
1
Cherry-pick today's 31 fix-commits on top
cherry-pick the commits only (not merge) so main's regressions don't ride along — running now, resilient to rate-limits
↓
2
Conflicts → keep staging's look + the new feature's behavior
reset composer/logos to known-good (composer box already fixed) + the 6 new asks (#364–369)
↓
4
→ ONE "correct state" preview (engine + landing)
I verify login + walk every screen myself — that's when the screenshot-regression hunt stops
3 · How to ship it (your call)
Getting the correct state into prod
You gate merges. Once the reconciled preview is verified, pick how it lands:
After it lands — guardrails so this can't recur: every future fix branches off the deployed baseline (never a stale checkout), the lint guards (tokens/borders/em-dash) stay in CI, and we add `workeros.floom.dev` to auto-track main so deploys can't silently lag. That's how we stop discovering drift.