Skip to content

Instantly share code, notes, and snippets.

@majones919
Created June 11, 2026 15:40
Show Gist options
  • Select an option

  • Save majones919/459837c24df4c99cce0cb06745de67db to your computer and use it in GitHub Desktop.

Select an option

Save majones919/459837c24df4c99cce0cb06745de67db to your computer and use it in GitHub Desktop.
QA test plan — deployment/2026-06-11 (6 PRs + reapply) + bundle integrity note

QA test plan — deployment/2026-06-11

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)

#5172 — Email copy: "travelers" not "seekers" (#5146)

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.


#5158 — Fraud Risk Review shows real last-login (#5150)

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:

  1. In admin, open Fraud Risk Review and preview a few recently-active users → real date/time, not "Never."
  2. A user who's never logged in → still correctly "Never."
  3. (Optional) Impersonate a user, re-check their last-login → it should not jump to "just now."

#5104 — P1 lister unread-message reminders (#5007)

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:

  1. Admin login regression check (do first): log into Backpack admin → loads normally, no 500. This is the bug that cascaded ~30 smoke failures.
  2. Reminder email is flag-gated — coordinate with Ahmed/Gaurav to allowlist your lister account, leave an inquiry unread >6h (or use the --dry-run command), confirm: email arrives, "Open your inbox" CTA works, "stop reminders" link works.
  3. Confirm no lister gets more than one such email per 24h.

#5173 — Mobile carousel shows full photo (#5155)

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:

  1. On your phone, open listing 46618 on QA → photo displays in full, no crop. Thin letterbox bars on portrait photos are intended.
  2. Tap to expand the lightbox → also full.
  3. Spot-check 2–3 other listings with portrait photos.
  4. Desktop unchanged — quick glance to confirm no regression.

#5165 — Pricing experiment collapsed to final layout (#5159)

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:

  1. 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).
  2. Pick a plan → payment page shows Standard/Annual only, correct billing line, can proceed to checkout.
  3. Upgrade path (/account/listings → upgrade) → no Quarterly, Pro upsell shows for non-Pro users.
  4. Regression: public /pricing page intentionally unchanged (Standard + Premium only).

#5167 — QA env-gate hardening (#5162) — Not user-testable

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.


⚠ Direct commit by Ahmed Essam — "Reapply #5104: restore P1 lister unread reminders"

⚠ 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.


Bundle integrity note — #5172 / #5158 were stacked on #5104

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment