@mohasinac/appkit 4.40.1 → 4.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/categories/repository/categories.repository.js +2 -2
- package/dist/features/tester/seed-data/_money-flows.js +65 -49
- package/dist/features/tester/seed-data/authored/admin__admin-detail-round-trips.js +6 -4
- package/dist/features/tester/seed-data/authored/admin__coupons.js +14 -13
- package/dist/features/tester/seed-data/authored/buying__bidding.js +154 -140
- package/dist/features/tester/seed-data/authored/buying__browsing-search.js +4 -4
- package/dist/features/tester/seed-data/authored/buying__buying-checkout.js +59 -56
- package/dist/features/tester/seed-data/authored/buying__buying-coupons.js +18 -18
- package/dist/features/tester/seed-data/authored/buying__cart.js +105 -79
- package/dist/features/tester/seed-data/authored/buying__image-tile-layout.js +6 -8
- package/dist/features/tester/seed-data/authored/buying__my-orders.js +13 -13
- package/dist/features/tester/seed-data/authored/buying__offers.js +6 -6
- package/dist/features/tester/seed-data/authored/buying__order-detail-actions.js +8 -7
- package/dist/features/tester/seed-data/authored/buying__product-detail.js +62 -56
- package/dist/features/tester/seed-data/authored/buying__return-request.js +6 -6
- package/dist/features/tester/seed-data/authored/buying__reviews-pagination.js +4 -4
- package/dist/features/tester/seed-data/authored/buying__reviews.js +1 -1
- package/dist/features/tester/seed-data/authored/buying__user-dashboard-extras.js +8 -8
- package/dist/features/tester/seed-data/authored/content-discovery__category-counts-and-rollup.js +1 -1
- package/dist/features/tester/seed-data/authored/content-discovery__coupons.js +29 -16
- package/dist/features/tester/seed-data/authored/content-discovery__event-detail-subroutes.js +9 -9
- package/dist/features/tester/seed-data/authored/content-discovery__events.js +69 -36
- package/dist/features/tester/seed-data/authored/content-discovery__notifications.js +1 -1
- package/dist/features/tester/seed-data/authored/cta-layout__checkout-bottom-bar.js +2 -2
- package/dist/features/tester/seed-data/authored/design-ux__back-to-top-button.js +2 -2
- package/dist/features/tester/seed-data/authored/design-ux__general-design.js +1 -1
- package/dist/features/tester/seed-data/authored/design-ux__status-badge-legibility.js +1 -1
- package/dist/features/tester/seed-data/authored/design-ux__sticky-cta-bar.js +3 -3
- package/dist/features/tester/seed-data/authored/index.js +0 -2
- package/dist/features/tester/seed-data/authored/page-wiring__data-loss.js +2 -2
- package/dist/features/tester/seed-data/authored/page-wiring__reachability.js +6 -4
- package/dist/features/tester/seed-data/authored/public-pages__auth-error-pages.js +2 -2
- package/dist/features/tester/seed-data/authored/public-pages__core-listing-pages.js +1 -1
- package/dist/features/tester/seed-data/authored/public-pages__stores-sellers-directories.js +8 -10
- package/dist/features/tester/seed-data/authored/selling__become-seller.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__digital-content-delivery.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__listing-a-product.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__listing-edit-roundtrip.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__listing-lifecycle.js +2 -2
- package/dist/features/tester/seed-data/authored/selling__seller-listing-types.js +2 -2
- package/dist/features/tester/seed-data/authored/seo__og-images.js +3 -4
- package/dist/features/tester/seed-data/authored/seo__page-metadata.js +6 -8
- package/dist/features/tester/seed-data/authored/seo__sitemap-and-robots.js +5 -5
- package/dist/features/tester/seed-data/index.d.ts +0 -10
- package/dist/features/tester/seed-data/index.js +0 -10
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +75 -89
- package/dist/features/tester/seed-data/tester-responses-seed-data.js +5 -5
- package/dist/index.d.ts +0 -8
- package/dist/index.js +0 -21
- package/dist/seed/addresses-seed-data.js +0 -34
- package/dist/seed/index.d.ts +1 -1
- package/dist/seed/index.js +4 -3
- package/dist/seed/manifest.js +11 -12
- package/dist/seed/notifications-seed-data.js +4 -4
- package/dist/seed/stores-seed-data.js +7 -52
- package/dist/seed/users-seed-data.js +3 -83
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +15 -20
|
@@ -201,24 +201,6 @@ const rawTesterChecklistItems = [
|
|
|
201
201
|
},
|
|
202
202
|
],
|
|
203
203
|
},
|
|
204
|
-
{
|
|
205
|
-
pageKey: "testing-program",
|
|
206
|
-
pageLabel: "Tester Hub",
|
|
207
|
-
href: "/user/tester",
|
|
208
|
-
cases: [
|
|
209
|
-
{ key: "tester-hub-loads", label: "Tester Hub loads the full checklist grouped by section", href: "/user/tester" },
|
|
210
|
-
{ key: "tester-hub-search", label: "Tester Hub search finds test cases by typing part of the title or the route (e.g. \"/store/payouts\")", href: "/user/tester" },
|
|
211
|
-
{ key: "tester-hub-answer-saves", label: "Answering Yes/No and adding a comment on a test case saves without reloading" },
|
|
212
|
-
{ key: "admin-tester-access", label: "Signed-in admin accounts can open the Tester Hub and see the same checklist as testers", href: "/user/tester" },
|
|
213
|
-
{ key: "admin-testing-section", label: "Admin dashboard's Testing section shows both the Tester Checklist and Tester Feedback (results) links", href: "/admin/tester-feedback" },
|
|
214
|
-
{
|
|
215
|
-
key: "tester-flag-live-refresh",
|
|
216
|
-
label: "A tester whose isTester/canTestAdmin flag is granted by an admin gets Tester Hub access without needing to log out and back in — within a few minutes of the change, on a tab that's stayed open",
|
|
217
|
-
description: "Fixed 2026-08-20 — the client session only refreshed role/isTester/canTestAdmin/disabled/storeId on login or a full page reload, never on ordinary client-side navigation, so a flag flip by an admin was invisible until the user manually re-authenticated. Now piggybacked onto the existing 5-minute session-activity ping. To test: as admin, grant isTester to a second test account that's already logged in elsewhere with the app open; within ~5 minutes (no reload) it should gain access to /user/tester.",
|
|
218
|
-
href: "/user/tester",
|
|
219
|
-
},
|
|
220
|
-
],
|
|
221
|
-
},
|
|
222
204
|
]),
|
|
223
205
|
...group("buying", "Buying", [
|
|
224
206
|
{
|
|
@@ -481,23 +463,23 @@ const rawTesterChecklistItems = [
|
|
|
481
463
|
pageLabel: "Product / Auction / Pre-order Detail",
|
|
482
464
|
href: "/products",
|
|
483
465
|
cases: [
|
|
484
|
-
{ key: "standard-detail", label: "Standard product detail page loads correctly, and a SIGNED-OUT visitor sees \"Sign in to see price\" where the price was", href: "/products/product-
|
|
466
|
+
{ key: "standard-detail", label: "Standard product detail page loads correctly, and a SIGNED-OUT visitor sees \"Sign in to see price\" where the price was", href: "/products/product-beyblade-burst-valkyrie" },
|
|
485
467
|
{
|
|
486
468
|
key: "standard-detail-price-signed-in",
|
|
487
469
|
label: "SIGNED IN, the same product detail page shows the real price (₹199.00) and no sign-in prompt",
|
|
488
470
|
description: "The twin of the guest case above, and the half that is easy to forget: gating a price must not cost the coverage of the price itself. A gate that hides the amount from everyone passes the guest case perfectly and is a total regression.",
|
|
489
|
-
href: "/products/product-
|
|
471
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
490
472
|
},
|
|
491
473
|
{
|
|
492
474
|
key: "price-does-not-flash-sign-in-prompt-on-hard-reload",
|
|
493
475
|
label: "SIGNED IN, hard-reloading a product page never flashes \"Sign in to see price\" before the real price appears",
|
|
494
476
|
description: "The session provider is mounted with no user and resolves asynchronously, so `loading` starts true on every hard load — for signed-in visitors too. A gate written as \"no user means show the prompt\" therefore accuses an already-signed-in buyer of being signed out for several hundred milliseconds on every page load. The gate has THREE states for this reason: while the session is resolving it renders a neutral placeholder, never the prompt. This is the single most likely regression in the price-gating work and it is invisible to every static check.",
|
|
495
|
-
href: "/products/product-
|
|
477
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
496
478
|
},
|
|
497
479
|
{
|
|
498
480
|
key: "tester-fixtures-hidden-from-the-public",
|
|
499
481
|
label: "SIGNED OUT, no product on /products has an id containing \"tester\" — the sandbox is invisible to the public",
|
|
500
|
-
description: "Fixed 2026-09-01. BEFORE: the public products endpoint had no viewer concept, so an ANONYMOUS caller got 25 tester fixtures in its first 40 rows — stickers-
|
|
482
|
+
description: "Fixed 2026-09-01. BEFORE: the public products endpoint had no viewer concept, so an ANONYMOUS caller got 25 tester fixtures in its first 40 rows — stickers-beyblade-original-classic-sheet, prizedraw-beyblade-metal-closed-revealed, live-golden-retriever-puppy — and they filled the public marketplace. AFTER: open /products in a private window and scan the grid; nothing should be named \"Tester …\". Then sign in AS A TESTER and reload — the sandbox items must come back. Both halves matter: hiding them from everyone would break the tester programme, and a fixture that never reappears is the opposite bug.",
|
|
501
483
|
href: "/products",
|
|
502
484
|
},
|
|
503
485
|
{
|
|
@@ -516,15 +498,15 @@ const rawTesterChecklistItems = [
|
|
|
516
498
|
key: "auction-detail",
|
|
517
499
|
label: "SIGNED OUT, the auction detail page hides every bid figure and still shows a live, ticking countdown",
|
|
518
500
|
description: "The countdown (\"Ends in 2d 5h 30m\", ticking every second — not a static date) must appear directly above every \"Place a bid\" button: the info panel, the desktop and mobile compact bid-summary cards, and the mobile sticky bottom bar. It should switch to \"Ended\" once the end time passes. A signed-out visitor additionally sees NO bid amounts: the current bid reads \"Sign in to see the current bid\" and the bid form is replaced by \"Bidding is for members\" — the form was never usable signed out, so showing it with live figures was both a disclosure and a dead end.",
|
|
519
|
-
href: "/auctions/auction-
|
|
501
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
520
502
|
},
|
|
521
503
|
{
|
|
522
504
|
key: "auction-detail-bid-signed-in",
|
|
523
505
|
label: "SIGNED IN, the same auction shows the real current bid (₹15,000.00), the minimum increment and a working bid form",
|
|
524
506
|
description: "The twin of the guest case above. A gate that hides the bid from signed-in buyers too would pass the guest case and break bidding entirely.",
|
|
525
|
-
href: "/auctions/auction-
|
|
507
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
526
508
|
},
|
|
527
|
-
{ key: "preorder-detail", label: "Pre-order detail page shows expected ship date correctly", href: "/pre-orders/preorder-
|
|
509
|
+
{ key: "preorder-detail", label: "Pre-order detail page shows expected ship date correctly", href: "/pre-orders/preorder-beyblade-x-bx-08-wave" },
|
|
528
510
|
{
|
|
529
511
|
key: "image-gallery",
|
|
530
512
|
label: "Product image gallery thumbnails load reliably (no broken-image icons) and click-to-zoom/rotate works in the lightbox",
|
|
@@ -564,24 +546,24 @@ const rawTesterChecklistItems = [
|
|
|
564
546
|
description: "Verify against \"Beyblade Burst B-01 Valkyrie\" (product-beyblade-burst-valkyrie) — all 4 sections should show real items: other Beyblade Burst products, other \"Beyblade\"-brand products, other attack-type/starter-set tagged products, and other Beyblade Arena store listings.",
|
|
565
547
|
href: "/products",
|
|
566
548
|
},
|
|
567
|
-
{ key: "prizedraw-buy-reveal", label: "Buying a prize-draw entry correctly assigns a prize once payment is confirmed (instant mode) or shows a pending state until the draw closes (scheduled mode)", href: "/prize-draws/prizedraw-
|
|
549
|
+
{ key: "prizedraw-buy-reveal", label: "Buying a prize-draw entry correctly assigns a prize once payment is confirmed (instant mode) or shows a pending state until the draw closes (scheduled mode)", href: "/prize-draws/prizedraw-beyblade-mystery-box" },
|
|
568
550
|
{
|
|
569
551
|
key: "bundle-purchase",
|
|
570
552
|
label: "Purchasing a bundle works and shows all included items in the order",
|
|
571
|
-
description: "Verify against \"Test Bundle\" (bundle-
|
|
572
|
-
href: "/bundles/bundle-
|
|
553
|
+
description: "Verify against \"Test Bundle\" (bundle-original-collectors-set, findable from the bundles listing page) — after checkout, the order should show a single \"Test Bundle\" line item, not two separate product lines.",
|
|
554
|
+
href: "/bundles/bundle-original-collectors-set",
|
|
573
555
|
},
|
|
574
556
|
{
|
|
575
557
|
key: "product-group-set-widget",
|
|
576
558
|
label: "A product's detail page shows a collapsible \"Part of / Parts in this group\" panel with a working thumbnail strip and a \"View whole group\" table when the product belongs to a product-group (\"Set\")",
|
|
577
|
-
description: "
|
|
578
|
-
href: "/products/
|
|
559
|
+
description: "🛑 NO SEEDED PRODUCT IS A GROUP PARENT, so the case has to create the group it is about. As admin@letitrip.in / TempPass123!, open product-beyblade-burst-valkyrie in the admin product editor, use its Group settings to make it a group parent titled \"QA Set valkyrie+dranzer\", and add product-beyblade-original-dranzer-s as a child. Then open BOTH public pages: each must show the collapsible \"Part of / Parts in this group\" panel listing the other, the arrow/triangle expand icons must render as real glyphs (not garbled text), and \"View whole group\" must open a working modal/drawer. Remove the group afterwards so nothing accumulates. This is DIFFERENT from the grouped-listings carousel below — that one is a themed scroller from its own collection.",
|
|
560
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
579
561
|
},
|
|
580
562
|
{
|
|
581
563
|
key: "grouped-listings-carousel-on-detail",
|
|
582
564
|
label: "A \"Grouped listings\" themed carousel appears on a product detail page with real, clickable member items",
|
|
583
565
|
description: "Added 2026-08-21 — this carousel previously had no test case of its own outside the category/brand check. It is DIFFERENT from the \"Part of / Parts in this group\" set panel: this one is a horizontal themed scroller (titled by the group's theme, e.g. \"Same character\" / \"From the same set\"), it sits lower down near the related-items carousels, and it only shows for products that belong to an active, visible group. Confirm the cards show real titles and images (not placeholders) and that clicking one lands on that item's own detail page.",
|
|
584
|
-
href: "/products/product-
|
|
566
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
585
567
|
},
|
|
586
568
|
{
|
|
587
569
|
key: "classified-offer-is-the-purchase-path",
|
|
@@ -601,12 +583,12 @@ const rawTesterChecklistItems = [
|
|
|
601
583
|
description: "BEFORE: the shared rule rejected any offer >= the listed price with \"use Add to Cart instead\" — advice that named a button a classified does not have, so a buyer willing to pay full price had no route at all. AFTER: the ceiling is inclusive on a listing with no cart. Enter exactly the listed price and submit; it must succeed. On an ORDINARY product (/products/...) the same amount must still be rejected — that is the half of the rule which did not change.",
|
|
602
584
|
href: "/classified/classified-beyblade-stadium-set",
|
|
603
585
|
},
|
|
604
|
-
{ key: "digitalcode-delivery", label: "Purchasing a digital-code listing delivers the code to the buyer post-purchase", href: "/digital-codes/digitalcode-
|
|
605
|
-
{ key: "live-item-detail", label: "A live-item listing's detail page shows the livestream link correctly", href: "/live/live-
|
|
586
|
+
{ key: "digitalcode-delivery", label: "Purchasing a digital-code listing delivers the code to the buyer post-purchase", href: "/digital-codes/digitalcode-beyblade-x-app-starter-pack" },
|
|
587
|
+
{ key: "live-item-detail", label: "A live-item listing's detail page shows the livestream link correctly", href: "/live/live-golden-retriever-puppy" },
|
|
606
588
|
{
|
|
607
589
|
key: "live-item-video-mandatory",
|
|
608
590
|
label: "Creating a live-item listing (species: animals/plants) without a video is rejected with a clear error; a live listing WITH a video plays correctly in the gallery's video slide and its poster thumbnail is watermarked",
|
|
609
|
-
description: "Verify the block on both the admin product editor and the seller \"List a live item\" form. Then verify playback against the
|
|
591
|
+
description: "Verify the block on both the admin product editor and the seller \"List a live item\" form. Then verify playback against the seeded live item \"Golden Retriever Puppy\" (live-golden-retriever-puppy) — its video is a real dog clip (previously a broken YouTube link that never played); confirm it actually plays in theater mode and the thumbnail carries the site watermark.",
|
|
610
592
|
href: "/store/live/new",
|
|
611
593
|
},
|
|
612
594
|
],
|
|
@@ -637,7 +619,7 @@ const rawTesterChecklistItems = [
|
|
|
637
619
|
{
|
|
638
620
|
key: "prizedraw-collage-stacked",
|
|
639
621
|
label: "Prize-draw collage tiles stack the image ABOVE the title/value caption at full card width — the image is never squashed beside the text at half width",
|
|
640
|
-
href: "/prize-draws/prizedraw-
|
|
622
|
+
href: "/prize-draws/prizedraw-beyblade-mystery-box",
|
|
641
623
|
},
|
|
642
624
|
{
|
|
643
625
|
key: "concern-card-icon-above-label",
|
|
@@ -752,7 +734,7 @@ const rawTesterChecklistItems = [
|
|
|
752
734
|
{
|
|
753
735
|
key: "orders-item-summary",
|
|
754
736
|
label: "Each row on My Orders shows the order's items (thumbnail, title, quantity) instead of just an order ID — and orders with more than 3 items show a \"+N more\" summary for the rest",
|
|
755
|
-
description: "
|
|
737
|
+
description: "Sign in as rehan.sheikh@gmail.com / TempPass123! and open /user/orders — this buyer owns nine seeded orders, including a 3 × Beyblade X BX-08 Wave order totalling ₹2,697 in Processing. Every row must show its items (thumbnail, title, quantity) rather than only an order id. If no seeded order carries more than three items, place one that does before judging the \"+N more\" half, or answer null for it rather than guessing.",
|
|
756
738
|
href: "/user/orders",
|
|
757
739
|
},
|
|
758
740
|
{
|
|
@@ -792,7 +774,7 @@ const rawTesterChecklistItems = [
|
|
|
792
774
|
{
|
|
793
775
|
key: "order-tracking-timeline",
|
|
794
776
|
label: "\"Track Shipment\" opens a real page with a status timeline (Order placed → Shipped, each with a real date) and, when a tracking URL is set, a \"Track with carrier\" link that opens in a new tab — not a blank page",
|
|
795
|
-
description: "Fixed 2026-08-21 — /user/orders/[id]/track previously rendered <UserOrderTrackView /> with zero render-props (a Root Cause #8 blank slot-shell), and the underlying adapter dropped orderDate/shippingDate/deliveryDate/cancellationDate/trackingUrl entirely, so even a fixed page would have had nothing to show.
|
|
777
|
+
description: "Fixed 2026-08-21 — /user/orders/[id]/track previously rendered <UserOrderTrackView /> with zero render-props (a Root Cause #8 blank slot-shell), and the underlying adapter dropped orderDate/shippingDate/deliveryDate/cancellationDate/trackingUrl entirely, so even a fixed page would have had nothing to show. Sign in as vivaan.kapoor@gmail.com / TempPass123!, open order-1-20260820-buyout from My Orders (Shipped, Blue Dart, tracking LIR-TRK-77410992) and click \"Track Shipment\" — confirm the Ordered and Shipped steps both show real dates and that the tracking link opens in a new tab.",
|
|
796
778
|
href: "/user/orders",
|
|
797
779
|
},
|
|
798
780
|
{
|
|
@@ -837,15 +819,15 @@ const rawTesterChecklistItems = [
|
|
|
837
819
|
pageLabel: "Bidding",
|
|
838
820
|
href: "/user/bids",
|
|
839
821
|
cases: [
|
|
840
|
-
{ key: "place-bid", label: "Placing a bid on an auction works", href: "/auctions/auction-
|
|
822
|
+
{ key: "place-bid", label: "Placing a bid on an auction works", href: "/auctions/auction-beyblade-original-dragoon-storm" },
|
|
841
823
|
{ key: "place-bid-live-self", label: "After placing a bid, the current bid amount and bid count update immediately on the auction page for the bidder — no manual page refresh needed" },
|
|
842
824
|
{ key: "place-bid-live-other-viewer", label: "Opening the same auction in two browser tabs (or two accounts) and placing a bid in one updates the current bid and bid count in the other within a few seconds, without a manual refresh (realtime SSE)" },
|
|
843
825
|
{ key: "outbid-notification", label: "Getting outbid triggers a notification" },
|
|
844
826
|
{
|
|
845
827
|
key: "win-auction",
|
|
846
828
|
label: "Winning an auction creates a payable locked cart line, not a stuck order",
|
|
847
|
-
description: "Fixed 2026-08-21 — settlement used to write a document that was not a real order (no items[], no buyerId, no payment method), so a winner had no way to pay anywhere in the product. Wait for `auction-
|
|
848
|
-
href: "/auctions/auction-
|
|
829
|
+
description: "Fixed 2026-08-21 — settlement used to write a document that was not a real order (no items[], no buyerId, no payment method), so a winner had no way to pay anywhere in the product. Wait for `auction-beyblade-burst-spriggan-requiem-bought-out` to settle (or trigger the sweep manually), then confirm: a \"Won auction\" badge appears on the /user/bids row with a working \"Pay now\" link; the item shows up in the Cart's \"Won Auctions\" tab as a non-removable, non-editable line; and completing checkout produces a real order visible under the \"Auction wins\" tab on /user/orders.",
|
|
830
|
+
href: "/auctions/auction-beyblade-burst-spriggan-requiem-bought-out",
|
|
849
831
|
},
|
|
850
832
|
{
|
|
851
833
|
key: "auction-below-reserve-no-winner",
|
|
@@ -878,13 +860,13 @@ const rawTesterChecklistItems = [
|
|
|
878
860
|
key: "bid-succeeds-and-outbids-previous-winner",
|
|
879
861
|
label: "Placing a valid bid actually records it — the current bid rises and the previous high bid flips to \"outbid\"",
|
|
880
862
|
description: "Fixed 2026-08-28. BEFORE: every bid failed and the modal showed the raw text \"Batch write failed: Cannot find module '../providers/db-firebase' Require stack: - /var/task/.next/server/chunks/ssr/...\" in the amount field. AFTER: the bid is accepted, \"Current bid\" rises by at least the minimum increment, and the previous winner's row in Bid History reads \"outbid\". Note the failure returned a normally-rendered modal and an HTTP 200, so \"the page loaded\" and \"no error in the network tab\" both prove nothing — read the actual numbers. Root cause: a relative-path runtime require inside appkit that only breaks once bundled into a Lambda chunk.",
|
|
881
|
-
href: "/auctions/auction-
|
|
863
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
882
864
|
},
|
|
883
865
|
{
|
|
884
866
|
key: "server-error-copy-is-never-raw",
|
|
885
867
|
label: "A server failure shows plain-English copy — never a file path, stack trace or \"Cannot find module\"",
|
|
886
868
|
description: "Fixed 2026-08-28. BEFORE: any 500 printed its own internal message to the user, including absolute server paths under /var/task/. AFTER: the user sees \"A database error occurred. Please try again\" (or \"Something went wrong. Please try again.\"), while the FULL original text plus its cause chain appears in Admin → Maintenance → Server errors. Check both halves: generic in the browser, specific in the admin list. Seeing the raw text in either the bid modal or any toast is a regression.",
|
|
887
|
-
href: "/auctions/auction-
|
|
869
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
888
870
|
},
|
|
889
871
|
{
|
|
890
872
|
key: "bid-increment-live-tier-change",
|
|
@@ -894,25 +876,25 @@ const rawTesterChecklistItems = [
|
|
|
894
876
|
key: "bid-presets-are-increment-multiples",
|
|
895
877
|
label: "The quick-bid buttons above the amount field are multiples of the auction's OWN minimum increment — never a flat +₹1 / +₹5 / +₹10",
|
|
896
878
|
description: "Fixed 2026-08-21 — the presets were always 1x/5x/10x of the effective increment, but `resolveTieredBidIncrement` treated an empty `auctionConfig.bidIncrementTiers` array as \"no rule\" and fell through to the ₹1 last-resort constant, so every auction on the site rendered +₹1 / +₹5 / +₹10. On an auction whose current bid is in the ₹100-₹1,000 band (₹100 increment) the three buttons must read +₹100 / +₹500 / +₹1,000; on one above ₹10,000 (₹1,000 increment) they must read +₹1,000 / +₹5,000 / +₹10,000. Each button also shows the resulting bid amount underneath the step.",
|
|
897
|
-
href: "/auctions/auction-
|
|
879
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
898
880
|
},
|
|
899
881
|
{
|
|
900
882
|
key: "bid-preset-follows-live-price",
|
|
901
883
|
label: "With a quick-bid preset selected, another bidder raising the price updates the amount in the field too — it does not leave a now-too-low number behind",
|
|
902
884
|
description: "Fixed 2026-08-21 — the amount was only ever written on mount or on button click, while the current bid keeps updating over SSE. Open the auction in two tabs, select the +1x preset in tab A, place a higher bid from tab B, then watch tab A: the preset button labels, the \"minimum next bid\" helper text AND the number in the field must all move up together. Before the fix the buttons relabelled but the field kept its stale value, so pressing Place Bid was a guaranteed \"bid must exceed the current winning bid\" rejection.",
|
|
903
|
-
href: "/auctions/auction-
|
|
885
|
+
href: "/auctions/auction-beyblade-x-shark-edge",
|
|
904
886
|
},
|
|
905
887
|
{
|
|
906
888
|
key: "bid-below-current-plus-increment-rejected",
|
|
907
889
|
label: "A bid below current bid + minimum increment is rejected with a clear inline error on the amount field — and the rejection is identical whether it is typed in Custom mode or forced through the API",
|
|
908
890
|
description: "Switch the preset row to \"Custom\", type an amount between the current bid and current+increment, and submit. Expect an inline error on the field (not a toast, not a silent no-op). Also confirm an amount BELOW the current bid gives the distinct \"must exceed the current winning bid\" message rather than the increment one.",
|
|
909
|
-
href: "/auctions/auction-
|
|
891
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
910
892
|
},
|
|
911
893
|
{
|
|
912
894
|
key: "bid-custom-need-not-be-exact-multiple",
|
|
913
895
|
label: "In Custom mode any amount at or above the minimum is accepted — it does NOT have to be an exact multiple of the increment",
|
|
914
896
|
description: "With a ₹100 increment and a ₹1,000 current bid, ₹1,137 must be accepted (it is above the ₹1,100 minimum). The helper text under the field states this explicitly. A client-side rule claiming to enforce exact multiples existed but was a no-op; it was removed rather than made real, because the server never enforced multiples and a real client rule would have rejected bids the server accepts.",
|
|
915
|
-
href: "/auctions/auction-
|
|
897
|
+
href: "/auctions/auction-beyblade-original-dragoon-storm",
|
|
916
898
|
},
|
|
917
899
|
{
|
|
918
900
|
key: "first-bid-can-equal-starting-bid",
|
|
@@ -928,7 +910,7 @@ const rawTesterChecklistItems = [
|
|
|
928
910
|
key: "bid-count-increments-by-one",
|
|
929
911
|
label: "Placing one bid increases the auction's bid count by exactly ONE, and the current bid never moves backwards",
|
|
930
912
|
description: "Fixed 2026-08-21 — the `onBidPlaced` Firestore trigger duplicated work `placeBid` already did atomically: it incremented the bid count a second time (so one bid read as two), force-marked every new bid as winning, and overwrote the current bid with the new bid's amount. On the proxy path where a new bid LOSES to a standing higher maximum, that last part actually lowered the current bid to the loser's amount and named the loser as the leading bidder. Place a single bid and confirm the count goes up by 1, not 2. Then, from a second account, bid BELOW the standing proxy maximum: your bid must be recorded as outbid, and the auction's current bid must go UP (or hold), never down.",
|
|
931
|
-
href: "/auctions/auction-
|
|
913
|
+
href: "/auctions/auction-beyblade-burst-cho-z-achilles",
|
|
932
914
|
},
|
|
933
915
|
{
|
|
934
916
|
key: "outbid-notification-goes-to-outbid-user",
|
|
@@ -1011,55 +993,59 @@ const rawTesterChecklistItems = [
|
|
|
1011
993
|
description: "Needs a won auction in the cart (see the Auctions section). BEFORE: the won line was included in the delete loop, the server refused it, the failure was swallowed, and the toast still claimed every item was cleared. AFTER: the won-auction line must remain in the cart and the toast must read \"… N items awaiting payment kept.\" — the count in the first half must NOT include the kept line.",
|
|
1012
994
|
},
|
|
1013
995
|
// ── Grouped & bundle cart lines ──────────────────────────────────
|
|
1014
|
-
//
|
|
1015
|
-
//
|
|
1016
|
-
//
|
|
1017
|
-
// product
|
|
1018
|
-
//
|
|
996
|
+
// 🛑 NO SEEDED PRODUCT IS A GROUP PARENT (2026-09-15). The fixtures that
|
|
997
|
+
// backed these cases were disposable and are gone, and the permanent seed
|
|
998
|
+
// has never carried one. So the picker cases below need a group CREATED
|
|
999
|
+
// first — admin product editor → Group settings, parent
|
|
1000
|
+
// product-beyblade-burst-valkyrie with product-beyblade-original-dranzer-s
|
|
1001
|
+
// and product-beyblade-x-dran-buster-sold-out (the blocked member) as
|
|
1002
|
+
// children — and removed afterwards.
|
|
1003
|
+
// bundle-original-collectors-set is a real, priced, all-or-nothing bundle
|
|
1004
|
+
// and needs no setup.
|
|
1019
1005
|
{
|
|
1020
1006
|
key: "group-picker-opens",
|
|
1021
1007
|
label: "On a product that belongs to a group, the \"Part of: …\" strip has a \"Pick items →\" control that opens a picker with a Qty column and a +/- stepper on each member",
|
|
1022
1008
|
description: "Before this existed the panel was navigation only — the buyer had to open each member separately and add it as its own cart line.",
|
|
1023
|
-
href: "/products/product-
|
|
1009
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1024
1010
|
},
|
|
1025
1011
|
{
|
|
1026
1012
|
key: "group-picker-running-total",
|
|
1027
1013
|
label: "Changing any member's quantity updates the picker's running total (\"N items · ₹X\") immediately, and \"Add selected to cart\" stays disabled while nothing is selected",
|
|
1028
|
-
href: "/products/product-
|
|
1014
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1029
1015
|
},
|
|
1030
1016
|
{
|
|
1031
1017
|
key: "group-picker-stock-cap",
|
|
1032
1018
|
label: "A member's + button stops at that member's available stock — it cannot be pushed past it",
|
|
1033
|
-
href: "/products/product-
|
|
1019
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1034
1020
|
},
|
|
1035
1021
|
{
|
|
1036
1022
|
key: "group-picker-blocked-member",
|
|
1037
1023
|
label: "A sold-out member shows a reason chip (e.g. \"Sold\" / \"Out of stock\") in place of its stepper and cannot be selected",
|
|
1038
1024
|
description: "Test Part — Sold Out is seeded into the tester group specifically for this. The rest of the group must stay selectable around it.",
|
|
1039
|
-
href: "/products/product-
|
|
1025
|
+
href: "/products/product-beyblade-x-dran-buster-sold-out",
|
|
1040
1026
|
},
|
|
1041
1027
|
{
|
|
1042
1028
|
key: "group-picker-one-line",
|
|
1043
1029
|
label: "\"Add selected to cart\" with two or more members creates ONE cart line, not one line per product",
|
|
1044
1030
|
description: "Pick 2 of one member and 1 of another, then open the cart: a single line reading \"N items\", not three separate rows.",
|
|
1045
|
-
href: "/products/product-
|
|
1031
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1046
1032
|
},
|
|
1047
1033
|
{
|
|
1048
1034
|
key: "group-picker-single-member-plain-line",
|
|
1049
1035
|
label: "Selecting exactly ONE member produces an ordinary product line (with a normal quantity stepper), not a grouped line",
|
|
1050
1036
|
description: "1 item × qty N is already what a normal cart line means, so it deliberately does not become a group line.",
|
|
1051
|
-
href: "/products/product-
|
|
1037
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1052
1038
|
},
|
|
1053
1039
|
{
|
|
1054
1040
|
key: "group-picker-cross-store",
|
|
1055
1041
|
label: "A group whose members belong to DIFFERENT sellers renders read-only — no Qty column, no \"Add selected\" button — with an explanation, rather than a button that always fails",
|
|
1056
|
-
description: "
|
|
1057
|
-
href: "/products/product-
|
|
1042
|
+
description: "🛑 A cross-store group cannot be seeded — the guard refuses one at SAVE time, so the banned shape never reaches the database. Attempt it instead: as admin@letitrip.in / TempPass123!, try to group product-beyblade-burst-valkyrie (store-beyblade-arena) with prizedraw-beyblade-mystery-box (store-letitrip-official). If the save is refused, that IS the pass and the picker half cannot be reached — record the refusal's wording. If the save SUCCEEDS, the guard is gone: then open the picker and it must render read-only, with no Qty column and no \"Add selected\" button, rather than a button that always fails.",
|
|
1043
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1058
1044
|
},
|
|
1059
1045
|
{
|
|
1060
1046
|
key: "group-picker-guest",
|
|
1061
1047
|
label: "A signed-out visitor using the picker is shown the login prompt rather than silently losing the selection",
|
|
1062
|
-
href: "/products/product-
|
|
1048
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1063
1049
|
},
|
|
1064
1050
|
{
|
|
1065
1051
|
key: "group-line-expands-in-cart",
|
|
@@ -1092,7 +1078,7 @@ const rawTesterChecklistItems = [
|
|
|
1092
1078
|
key: "bundle-copies-stepper",
|
|
1093
1079
|
label: "A bundle page has a \"Copies\" +/- stepper and BOTH \"Buy now\" and \"Add to cart\" — Add to cart stays on the page, Buy now goes to checkout",
|
|
1094
1080
|
description: "A bundle is all-or-nothing: there must be no per-member quantity controls anywhere on the bundle page, only the copies stepper.",
|
|
1095
|
-
href: "/bundles/bundle-
|
|
1081
|
+
href: "/bundles/bundle-original-collectors-set",
|
|
1096
1082
|
},
|
|
1097
1083
|
{
|
|
1098
1084
|
key: "bundle-line-in-cart",
|
|
@@ -1115,7 +1101,7 @@ const rawTesterChecklistItems = [
|
|
|
1115
1101
|
key: "group-lane-gate",
|
|
1116
1102
|
label: "While an unpaid won auction or accepted offer is sitting in the cart, adding a group selection is refused with the same lane message as any other add",
|
|
1117
1103
|
description: "This path used to bypass the gate entirely, so a buyer could keep shopping around an obligation they had already committed to.",
|
|
1118
|
-
href: "/products/product-
|
|
1104
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
1119
1105
|
},
|
|
1120
1106
|
{
|
|
1121
1107
|
key: "group-checkout-order-rows",
|
|
@@ -1178,7 +1164,7 @@ const rawTesterChecklistItems = [
|
|
|
1178
1164
|
{
|
|
1179
1165
|
key: "auction-win-countdown-visible",
|
|
1180
1166
|
label: "A won-auction cart line shows a live countdown next to \"payment required\" — days/hours/minutes remaining out of the 48-hour window — that ticks down while you watch",
|
|
1181
|
-
description: "Payment for a won auction is MANDATORY (unlike an accepted offer, which the buyer may walk away from). The deadline was being written by settlement and enforced by the expiry sweep, but nothing ever rendered it, so a win could silently lapse and be forfeited with no warning anywhere in the UI. Use auction-
|
|
1167
|
+
description: "Payment for a won auction is MANDATORY (unlike an accepted offer, which the buyer may walk away from). The deadline was being written by settlement and enforced by the expiry sweep, but nothing ever rendered it, so a win could silently lapse and be forfeited with no warning anywhere in the UI. Use auction-beyblade-burst-spriggan-requiem-bought-out.",
|
|
1182
1168
|
href: "/cart",
|
|
1183
1169
|
},
|
|
1184
1170
|
{
|
|
@@ -1201,7 +1187,7 @@ const rawTesterChecklistItems = [
|
|
|
1201
1187
|
{
|
|
1202
1188
|
key: "cart-mobile-bar-lane-scoped",
|
|
1203
1189
|
label: "The mobile bottom bar's total matches the desktop Summary total on every cart tab, and both name which lane the total covers (\"This total covers your cart only\" / \"…your won auctions only\")",
|
|
1204
|
-
description: "The desktop Summary was converted to per-lane totals but the mobile bar was left reading the old blended figure, so the two disagreed on the same cart. Needs items in more than one lane — e.g. a normal product plus auction-
|
|
1190
|
+
description: "The desktop Summary was converted to per-lane totals but the mobile bar was left reading the old blended figure, so the two disagreed on the same cart. Needs items in more than one lane — e.g. a normal product plus auction-beyblade-burst-spriggan-requiem-bought-out. Switch tabs and compare both viewports.",
|
|
1205
1191
|
href: "/cart",
|
|
1206
1192
|
},
|
|
1207
1193
|
{
|
|
@@ -3191,9 +3177,9 @@ const rawTesterChecklistItems = [
|
|
|
3191
3177
|
roles: ["buyer"],
|
|
3192
3178
|
startPage: "/user/notifications",
|
|
3193
3179
|
steps: [
|
|
3194
|
-
"
|
|
3195
|
-
"Open
|
|
3196
|
-
"
|
|
3180
|
+
"Sign in as rehan.sheikh@gmail.com / TempPass123!.",
|
|
3181
|
+
"Open /auctions/auction-beyblade-original-dragoon-storm and place a bid of 5500.",
|
|
3182
|
+
"Sign in as vivaan.kapoor@gmail.com / TempPass123! in a second browser and bid 6000 on the same auction.",
|
|
3197
3183
|
"Back on the first account, open /user/notifications.",
|
|
3198
3184
|
"Open the real inbox for the address on the first account.",
|
|
3199
3185
|
],
|
|
@@ -3209,7 +3195,7 @@ const rawTesterChecklistItems = [
|
|
|
3209
3195
|
roles: ["buyer", "admin"],
|
|
3210
3196
|
startPage: "/user/notifications",
|
|
3211
3197
|
steps: [
|
|
3212
|
-
"Ensure
|
|
3198
|
+
"Ensure /auctions/auction-beyblade-original-dragoon-storm carries bids from rehan.sheikh@gmail.com and vivaan.kapoor@gmail.com — place them if it does not.",
|
|
3213
3199
|
"Let the auction end, or have an admin settle it.",
|
|
3214
3200
|
"Check the bell and inbox of a LOSING bidder.",
|
|
3215
3201
|
"Check the bell and inbox of the WINNING bidder.",
|
|
@@ -3658,39 +3644,39 @@ const rawTesterChecklistItems = [
|
|
|
3658
3644
|
{
|
|
3659
3645
|
key: "ended-auction-no-bar",
|
|
3660
3646
|
label: "An auction that has already ended shows NO sticky bar at all — there is nothing left to bid on",
|
|
3661
|
-
href: "/auctions/auction-
|
|
3647
|
+
href: "/auctions/auction-beyblade-burst-spriggan-requiem-bought-out",
|
|
3662
3648
|
},
|
|
3663
3649
|
{
|
|
3664
3650
|
key: "preorder-bar",
|
|
3665
3651
|
label: "A pre-order page's sticky bar says Reserve Now and shows the price, and the button jumps to the reserve panel",
|
|
3666
|
-
href: "/pre-orders/preorder-
|
|
3652
|
+
href: "/pre-orders/preorder-beyblade-x-bx-08-wave",
|
|
3667
3653
|
},
|
|
3668
3654
|
{
|
|
3669
3655
|
key: "prize-draw-bar-label",
|
|
3670
3656
|
label: "A prize-draw page's sticky bar CTA reads \"Enter Draw\" (not \"Buy Now\") and the info line shows the price per entry",
|
|
3671
3657
|
description: "Label changed on purpose — you are entering a draw, not buying a specific item. Flag it if \"Buy Now\" still appears.",
|
|
3672
|
-
href: "/prize-draws/prizedraw-
|
|
3658
|
+
href: "/prize-draws/prizedraw-beyblade-mystery-box",
|
|
3673
3659
|
},
|
|
3674
3660
|
{
|
|
3675
3661
|
key: "closed-prize-draw-no-bar",
|
|
3676
3662
|
label: "A closed prize draw shows NO sticky bar",
|
|
3677
|
-
href: "/prize-draws/prizedraw-
|
|
3663
|
+
href: "/prize-draws/prizedraw-beyblade-metal-closed-revealed",
|
|
3678
3664
|
},
|
|
3679
3665
|
{
|
|
3680
3666
|
key: "classified-bar-no-cart",
|
|
3681
3667
|
label: "A classified listing's sticky bar offers \"Make an Offer\" and does NOT offer Add to Cart or Buy Now — classifieds are arranged directly with the seller",
|
|
3682
3668
|
description: "Tapping it should jump to the offer panel, and that panel must contain a real form (see classified-offer-is-the-purchase-path). An Add to Cart button appearing here is a real bug; so is the bar scrolling to an empty box.",
|
|
3683
|
-
href: "/classified/classified-
|
|
3669
|
+
href: "/classified/classified-beyblade-stadium-set",
|
|
3684
3670
|
},
|
|
3685
3671
|
{
|
|
3686
3672
|
key: "digital-code-bar",
|
|
3687
3673
|
label: "A digital-code listing has a sticky Buy Now bar, and a sold-out one has no bar at all",
|
|
3688
|
-
href: "/digital-codes/digitalcode-
|
|
3674
|
+
href: "/digital-codes/digitalcode-beyblade-x-app-starter-pack",
|
|
3689
3675
|
},
|
|
3690
3676
|
{
|
|
3691
3677
|
key: "live-item-bar",
|
|
3692
3678
|
label: "A live-item listing has a sticky Buy Now bar that jumps to its buy panel",
|
|
3693
|
-
href: "/live/live-
|
|
3679
|
+
href: "/live/live-golden-retriever-puppy",
|
|
3694
3680
|
},
|
|
3695
3681
|
{
|
|
3696
3682
|
key: "bar-not-overlapping-content",
|
|
@@ -4122,7 +4108,7 @@ const rawTesterChecklistItems = [
|
|
|
4122
4108
|
key: "related-carousels-same-behaviour",
|
|
4123
4109
|
label: "The \"You might also like\" / related-items carousels lower down a PRODUCT page behave exactly the same as the homepage ones — arrows beside the cards, nothing covered, no arrows on mobile",
|
|
4124
4110
|
description: "These are a different surface using the same underlying scroller, so they are the best check that the fix applied everywhere rather than only on the homepage.",
|
|
4125
|
-
href: "/products/product-
|
|
4111
|
+
href: "/products/product-beyblade-burst-valkyrie",
|
|
4126
4112
|
},
|
|
4127
4113
|
{
|
|
4128
4114
|
key: "category-page-carousels-same-behaviour",
|
|
@@ -4305,7 +4291,7 @@ const rawTesterChecklistItems = [
|
|
|
4305
4291
|
{
|
|
4306
4292
|
key: "store-tab-empty-state-not-error",
|
|
4307
4293
|
label: "A store tab with genuinely no items shows a friendly empty state — never a blank white area, a spinner that never stops, or an error toast about a missing index",
|
|
4308
|
-
href: "/stores/store-
|
|
4294
|
+
href: "/stores/store-beyblade-arena",
|
|
4309
4295
|
},
|
|
4310
4296
|
{ key: "sellers-directory", label: "The sellers directory page loads correctly", href: "/sellers" },
|
|
4311
4297
|
{ key: "seller-detail-page", label: "An individual seller's public detail page loads correctly" },
|
|
@@ -4576,7 +4562,7 @@ const rawTesterChecklistItems = [
|
|
|
4576
4562
|
{
|
|
4577
4563
|
key: "leaderboard-loads",
|
|
4578
4564
|
label: "The public Bug Hunters leaderboard (/bug-hunters) loads and lists testers ranked by confirmed-bug count, most bugs first",
|
|
4579
|
-
description: "Verify against the seeded demo fixture — \"Mock User
|
|
4565
|
+
description: "Verify against the seeded demo fixture — \"Mock User 3\" should appear on the leaderboard with 1 confirmed bug (from the \"Demo fixture\" case under Admin (Testing) → Bug Hunter Rewards).",
|
|
4580
4566
|
href: "/bug-hunters",
|
|
4581
4567
|
},
|
|
4582
4568
|
{ key: "leaderboard-empty-state", label: "If no bugs have been confirmed yet, the leaderboard shows a clear \"No confirmed bugs yet\" empty state instead of a blank page or error" },
|
|
@@ -4664,8 +4650,8 @@ const rawTesterChecklistItems = [
|
|
|
4664
4650
|
},
|
|
4665
4651
|
{
|
|
4666
4652
|
key: "sitemap-excludes-test-data",
|
|
4667
|
-
label: "The sitemap lists no
|
|
4668
|
-
description: "
|
|
4653
|
+
label: "The sitemap lists no test-flagged fixture",
|
|
4654
|
+
description: "A row flagged isTestData is wiped and re-seeded whenever fixtures are refreshed, so a sitemap entry for it is a URL that repeatedly 404s. Search the sitemap for \"sandbox\", \"qa-\" and \"test-\"; record every match with its full URL.",
|
|
4669
4655
|
href: "/sitemap.xml",
|
|
4670
4656
|
},
|
|
4671
4657
|
],
|
|
@@ -4690,13 +4676,13 @@ const rawTesterChecklistItems = [
|
|
|
4690
4676
|
key: "detail-pages-have-canonical",
|
|
4691
4677
|
label: "Every listing type's detail page declares a canonical — including classifieds, digital codes and live items",
|
|
4692
4678
|
description: "BEFORE: three listing types were called without the site URL, so their metadata builder returned nothing and those pages shipped with NO canonical at all. Check all three, not just the standard product page.",
|
|
4693
|
-
href: "/classified/classified-
|
|
4679
|
+
href: "/classified/classified-beyblade-stadium-set",
|
|
4694
4680
|
},
|
|
4695
4681
|
{
|
|
4696
4682
|
key: "detail-canonical-uses-slug-not-id",
|
|
4697
4683
|
label: "A detail page's canonical uses the slug the route actually takes",
|
|
4698
4684
|
description: "BEFORE: a canonical was built from the record's id while the route was keyed on its slug, so the canonical named a URL that does not exist.",
|
|
4699
|
-
href: "/classified/classified-
|
|
4685
|
+
href: "/classified/classified-beyblade-stadium-set",
|
|
4700
4686
|
},
|
|
4701
4687
|
{
|
|
4702
4688
|
key: "single-h1-per-page",
|
|
@@ -4751,7 +4737,7 @@ const rawTesterChecklistItems = [
|
|
|
4751
4737
|
{
|
|
4752
4738
|
key: "og-image-missing-media-fallback",
|
|
4753
4739
|
label: "A record with no image of its own still produces a readable social card rather than a broken image",
|
|
4754
|
-
href: "/classified/classified-
|
|
4740
|
+
href: "/classified/classified-beyblade-stadium-set",
|
|
4755
4741
|
},
|
|
4756
4742
|
],
|
|
4757
4743
|
},
|
|
@@ -5408,7 +5394,7 @@ const rawTesterChecklistItems = [
|
|
|
5408
5394
|
{
|
|
5409
5395
|
key: "pageviews-tracks-all-listing-types",
|
|
5410
5396
|
label: "Visiting a blog post, event, pre-order, prize draw, classified, digital-code, live item, or bundle detail page records a page view that shows up in Admin Analytics → Page Views, filtered to that entity type",
|
|
5411
|
-
description: "Added 2026-08-21 — these 8 detail-page types previously recorded nothing at all (only products/auctions/categories/homepage/stores/reviews/profiles were tracked). Visit a few of the following, then filter the Page Views report to the matching entity type and confirm a row appears: /blog/spot-genuine-takara-tomy-beyblade (blog), /events/event-original-series-clearance (event), /pre-orders/preorder-
|
|
5397
|
+
description: "Added 2026-08-21 — these 8 detail-page types previously recorded nothing at all (only products/auctions/categories/homepage/stores/reviews/profiles were tracked). Visit a few of the following, then filter the Page Views report to the matching entity type and confirm a row appears: /blog/spot-genuine-takara-tomy-beyblade (blog), /events/event-original-series-clearance (event), /pre-orders/preorder-beyblade-x-bx-08-wave (pre-order), /prize-draws/prizedraw-beyblade-mystery-box (prize-draw), /classified/classified-beyblade-stadium-set (classified), /digital-codes/digitalcode-beyblade-x-app-starter-pack (digital-code), /live/live-golden-retriever-puppy (live), /bundles/bundle-original-collectors-set (bundle).",
|
|
5412
5398
|
href: "/blog/spot-genuine-takara-tomy-beyblade",
|
|
5413
5399
|
},
|
|
5414
5400
|
{ key: "maintenance-pages-admin", label: "The maintenance pages (analysis, client-errors, cloud-logs, function-errors, payment-rollbacks, server-errors + detail) all load correctly", href: "/admin/maintenance" },
|
|
@@ -5518,7 +5504,7 @@ const rawTesterChecklistItems = [
|
|
|
5518
5504
|
{
|
|
5519
5505
|
key: "admin-store-detail-page",
|
|
5520
5506
|
label: "Every admin store row's row menu has a \"View full page\" action landing on a real dedicated /admin/stores/[id]/view page — logo, status/verified/featured badges, an owner link to that owner's (now-enriched) user page, stats (products/items sold/reviews/rating), capabilities, and a \"Manage\" button opening the existing edit drawer",
|
|
5521
|
-
description: "Added 2026-08-21 — admin previously had no dedicated store detail page at all, only the edit drawer (no logo, no owner link, no stats). From /admin/stores, open the seeded \"Tester Sandbox Store\" (store-
|
|
5507
|
+
description: "Added 2026-08-21 — admin previously had no dedicated store detail page at all, only the edit drawer (no logo, no owner link, no stats). From /admin/stores, open the seeded \"Tester Sandbox Store\" (store-beyblade-arena) and confirm every section renders real data, and the owner link lands on that seller's admin user page.",
|
|
5522
5508
|
href: "/admin/stores",
|
|
5523
5509
|
},
|
|
5524
5510
|
],
|
|
@@ -5908,14 +5894,14 @@ const rawTesterChecklistItems = [
|
|
|
5908
5894
|
pageKey: "bug-hunter-rewards",
|
|
5909
5895
|
pageLabel: BUG_HUNTER_REWARDS_PAGE_LABEL,
|
|
5910
5896
|
label: "Demo fixture — reported bug, already confirmed and reopened (v1, disabled)",
|
|
5911
|
-
description: "Seed-only fixture demonstrating a confirmed bug: this v1 case is disabled (isActive:false) and credited to \"Mock User
|
|
5897
|
+
description: "Seed-only fixture demonstrating a confirmed bug: this v1 case is disabled (isActive:false) and credited to \"Mock User 3\". Its retest is \"Demo fixture — reported bug, already confirmed and reopened (v2, active)\" in this same page.",
|
|
5912
5898
|
href: "/admin/tester-checklist",
|
|
5913
5899
|
order: 100,
|
|
5914
5900
|
isActive: false,
|
|
5915
5901
|
adminOnly: true,
|
|
5916
5902
|
bugConfirmed: true,
|
|
5917
|
-
bugHunterId: "user-
|
|
5918
|
-
bugHunterName: "Mock User
|
|
5903
|
+
bugHunterId: "user-yugi-muto",
|
|
5904
|
+
bugHunterName: "Mock User 3",
|
|
5919
5905
|
bugConfirmedAt: new Date("2026-08-18T10:00:00.000Z"),
|
|
5920
5906
|
version: 1,
|
|
5921
5907
|
supersededByItemId: "checklist-admin-bug-hunter-rewards-demo-fixture-v2",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
* @tag consumers:appkit/scripts/seed-cli.mjs, seed/manifest.ts
|
|
34
34
|
* @tag sideEffects:none
|
|
35
35
|
*/
|
|
36
|
-
/** The seeded
|
|
37
|
-
const TESTER_ID = "user-
|
|
38
|
-
const TESTER_NAME = "Mock User
|
|
36
|
+
/** The seeded buyer the demo fixtures credit as "Mock User 3". */
|
|
37
|
+
const TESTER_ID = "user-yugi-muto";
|
|
38
|
+
const TESTER_NAME = "Mock User 3";
|
|
39
39
|
/** Same shape the answer route computes — see the callout above. */
|
|
40
40
|
const responseId = (testerId, checklistItemId) => `${testerId}__${checklistItemId}`;
|
|
41
41
|
const DEMO_V1 = "checklist-admin-bug-hunter-rewards-demo-fixture";
|
|
@@ -44,8 +44,8 @@ const seededAt = new Date("2026-08-18T09:30:00.000Z");
|
|
|
44
44
|
export const testerResponsesSeedData = [
|
|
45
45
|
/*
|
|
46
46
|
* The ALREADY-CONFIRMED submission. The v1 catalogue item carries
|
|
47
|
-
* bugConfirmed:true / bugHunterId:"user-
|
|
48
|
-
*
|
|
47
|
+
* bugConfirmed:true / bugHunterId:"user-yugi-muto" / bugHunterName:"Mock User
|
|
48
|
+
* 3", and until now there was no response row behind that credit — so
|
|
49
49
|
* /admin/tester-feedback showed "No feedback submitted yet" while the
|
|
50
50
|
* leaderboard showed a confirmed bug. This is the missing half.
|
|
51
51
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -596,14 +596,6 @@ export { eventsSeedData } from "./seed/index";
|
|
|
596
596
|
export { faqSeedData } from "./seed/index";
|
|
597
597
|
export { testerChecklistSeedData } from "./seed/index";
|
|
598
598
|
export { testerResponsesSeedData } from "./seed/index";
|
|
599
|
-
export { storesTesterSeedData } from "./seed/index";
|
|
600
|
-
export { categoriesTesterSeedData } from "./seed/index";
|
|
601
|
-
export { productsTesterSeedData } from "./seed/index";
|
|
602
|
-
export { blogTesterSeedData } from "./seed/index";
|
|
603
|
-
export { eventsTesterSeedData } from "./seed/index";
|
|
604
|
-
export { couponsTesterSeedData } from "./seed/index";
|
|
605
|
-
export { bidsTesterSeedData } from "./seed/index";
|
|
606
|
-
export { ordersTesterSeedData } from "./seed/index";
|
|
607
599
|
export { formatSeedPrice } from "./seed/index";
|
|
608
600
|
export { getSeedLocale } from "./seed/index";
|
|
609
601
|
export { homepageSectionsSeedData } from "./seed/index";
|