6 merged PRs + 1 direct commit (Ahmed reapplying #5104). Two are bugs Megan reported on QA this month (the "seekers" email copy and the mobile photo crop); the rest cover fraud-signal accuracy, the unread-reminder feature, an ops gate fix, and the pricing-experiment collapse.
| PR | Ticket | What it does |
|---|---|---|
| #5172 | #5146 | Reminder email says "travelers," not "seekers" |
| #5158 | #5150 | Fraud Risk Review shows real last-login, not "Never" |
| #5104 | #5007 | New: one-a-day unread-inquiry reminder email to listers |
| #5173 | #5155 | Mobile listing photos show full image, no crop |
| #5167 | #5162 | Ops: keeps the QA smoke harness from silently dying |
| #5165 | #5159 | Pricing page collapses to one final layout (Quarterly removed) |
What it fixes: Megan flagged this on QA in #issues on 2026-06-09 — the new unread-reminder email called the inquiring side "seekers" in the subject line and both bodies, but RR copy everywhere else says "travelers." Gaurav confirmed the mockup copy was never reviewed. Fix swaps the noun in all three places and handles singular correctly ("from a traveler" when there's one inquiry). The "Rotating Room" two-word footer in the issue screenshot was only in the mockup draft — the real templates already render "RotatingRoom" correctly.
How to test: Renders only when the #5104 email fires. Have Gaurav/Ahmed put your lister account on the p1-unread-reminder PostHog flag, trigger a reminder (see #5104 steps), and confirm the subject + body read "travelers"/"a traveler" — "seeker" appears nowhere.
What it fixes: Megan reported on 2026-05-31 that the admin Fraud Risk Review preview always showed "Last login: never" for every user. The column feeding it was never populated. This backfills each user's most-recent credential login and stamps it going forward, and stops admin impersonation from polluting the signal.
How to test:
- In admin, open Fraud Risk Review and preview a few recently-active users → real date/time, not "Never."
- A user who's never logged in → still correctly "Never."
- (Optional) Impersonate a user, re-check their last-login → it should not jump to "just now."
What it fixes: New feature. When a lister leaves an inquiry unread 6+ hours, they get one daily reminder email summarizing unread inquiries, behind a 50/50 PostHog flag with anti-spam suppression (max one per lister per 24h, one-click "stop reminders"). Bundles a real bug fix (#5131): the login-stamp listener was crashing every Backpack admin login with a 500 once the migration ran — now fixed and regression-tested.
How to test:
- Admin login regression check (do first): log into Backpack admin → loads normally, no 500. This is the bug that cascaded ~30 smoke failures.
- Reminder email is flag-gated — coordinate with Ahmed/Gaurav to allowlist your lister account, leave an inquiry unread >6h (or use the
--dry-runcommand), confirm: email arrives, "Open your inbox" CTA works, "stop reminders" link works. - Confirm no lister gets more than one such email per 24h.
What it fixes: Megan escalated this from a first-time Annual Pro host — listing photos cropped ~50% on phones. Portrait photos in the landscape container were center-cropped. One-line CSS fix so mobile photos fit fully (letterboxed, not cropped); covers both the inline gallery and the lightbox.
How to test:
- On your phone, open listing 46618 on QA → photo displays in full, no crop. Thin letterbox bars on portrait photos are intended.
- Tap to expand the lightbox → also full.
- Spot-check 2–3 other listings with portrait photos.
- Desktop unchanged — quick glance to confirm no regression.
What it fixes: The pricing-abc-pro-v3 A/B test is over. Two layouts tied (~26.5%); the winner pro-old-layout is now the only layout. Quarterly billing is removed from plan-selection / payment / upgrade — Annual + Standard remain. No new visual design; the experiment scaffolding is stripped out. (Per the PR's pinned correction: shipped variant is pro-old-layout, Quarterly removed — earlier "pro-old-w-quarterly" text is superseded.)
How to test:
- Run the post-room → plans flow a couple of times → same layout every time, Pro tier offered, no Quarterly option (its absence is the change, not a bug).
- Pick a plan → payment page shows Standard/Annual only, correct billing line, can proceed to checkout.
- Upgrade path (
/account/listings→ upgrade) → no Quarterly, Pro upsell shows for non-Pro users. - Regression: public
/pricingpage intentionally unchanged (Standard + Premium only).
Why: Pure ops infra. On 2026-06-09 the QA Forge .env flag that enables the smoke harness silently flipped off twice (~2h each), disabling smoke testing. This makes APP_ENV=qa a first-class gate so it no longer depends on that fragile flag, plus fixes a cached-config split-brain read. No user-facing surface.
How to monitor: Proof is the smoke harness staying up — the next /qa-smoke qa run shouldn't show the wholesale /testing/* 405 failures from 2026-06-09. No clicking required.
⚠ Flag: Landed directly on the QA branch without its own PR. It reapplies the full #5104 feature (17 files). Not net-new unreviewed code — it restores already-reviewed PR #5104 content (the merge likely didn't carry the files cleanly) — but it bypassed the PR review hooks, and includes one migration (...000002_add_reminder_scan_index_concurrent) not in #5104's original file list. Worth a 30-second confirm with Ahmed that the reapply was intentional and complete.
How to test: Covered by the #5104 steps above — the admin-login check and reminder-email behavior both exercise this code.
This bundle has a coupling worth flagging for the next deploy cycle.
The dependency is structural. Both #5172 (copy fix) and #5158 (fraud last-login) have their base branch set to feature/5007-unread-reminders — they're stacked on top of #5104, not on master. #5172 literally edits #5104's email templates. Neither makes sense — and #5172 could be broken — without #5104 present. So #5172/#5158 should never travel separately from #5104.
What happened here — held together by hand. First-parent order on the branch (oldest → newest):
938ad17 Reapply #5104 ← Ahmed restores the feature as a DIRECT commit (no PR)
c077d87 Merge #5104 (P1 reminders)
5f0fd87 Merge #5158 (last-login)
f68fefd Merge #5172 (travelers copy) ← lands LAST, on top
This implies #5104 had been dropped/reverted from QA but its dependents weren't, so Ahmed had to manually reapply #5104 (bypassing review) to make #5172/#5158 coherent again. The revert didn't take the stack with it.
Current state is safe to test. Because the reapply sits below the #5172 merge, the "travelers" fix won. Verified on the branch tip:
- HTML body:
from {{ $unreadCount === 1 ? 'a traveler' : 'travelers' }} - Text body: same
- No "seekers" anywhere.
So the reapply did not clobber the copy fix — but it was one merge-order slip from doing so (had the reapply landed after #5172, "seekers" would be back). It worked, but it was fragile.
Takeaway for the team: when a feature like #5104 is pulled from a QA bundle, its stacked dependents (#5172, #5158) should be pulled with it — not reunited later via a manual direct-commit reapply that bypasses the PR hooks and risks a merge-order clobber.