Skip to content

Add Best Buy WebHarbor mirror#48

Open
Lxr-max wants to merge 1 commit into
aiming-lab:mainfrom
Lxr-max:add-bestbuy-site
Open

Add Best Buy WebHarbor mirror#48
Lxr-max wants to merge 1 commit into
aiming-lab:mainfrom
Lxr-max:add-bestbuy-site

Conversation

@Lxr-max

@Lxr-max Lxr-max commented Jun 4, 2026

Copy link
Copy Markdown

Site name

Best Buy

Site slug

bestbuy

Upstream URLs

Contribution type

New Website

Contributor

XuanRui LI / Lxr-max

Contact email

mingduanmu845@gmail.com

Safety note

Deterministic demo retail data only; no real payment, no real checkout, no live Best Buy calls, no external runtime network calls.

Implementation summary

  • Added a self-contained Flask + SQLAlchemy Best Buy mirror under sites/bestbuy/.
  • Implemented category browsing, search, filters, product detail pages, compare flow, store lookup, support/help search, wishlist, cart, mock checkout, order lookup, and rewards/account pages.
  • Added deterministic local SVG product/store/category artwork and deterministic synthetic commerce/support data.
  • Registered bestbuy in websyn_start.sh, control_server.py, Dockerfile, and updated repo docs/skill references for the new site count and port range.

Seed row counts (instance_seed/bestbuy.db)

  • users: 4
  • categories: 12
  • brands: 25
  • products: 156
  • stores: 15
  • store_inventory: 1989
  • reviews: 339
  • orders: 60
  • order_items: 80
  • reward_accounts: 4
  • reward_activities: 20
  • wishlist_items: 16
  • compare_items: 12
  • cart_items: 8
  • deals: 18
  • support_articles: 24
  • support_tickets: 8
  • protection_plans: 312
  • pickup_slots: 45
  • delivery_options: 3
  • payment_mocks: 60

Benchmark users

Task count and categories

  • Task count: 19
  • Categories covered: search, category filters, compare, protection plan comparison, wishlist, cart, store pickup, delivery selection, mock checkout, confirmation, order lookup, rewards, support article search, store amenities, order history, multi-page reasoning.

Selected WebSyn port

  • 40015

Key routes

  • /, /home, /categories, /category/<category_slug>, /products, /product/<sku>, /deals, /stores, /stores/<store_slug>, /support, /search
  • /cart, /cart/add, /checkout, /checkout/shipping, /checkout/pickup, /checkout/payment, /checkout/review, /checkout/confirmation
  • /login, /register, /logout, /account, /account/orders, /account/rewards, /account/wishlist, /order-lookup, /order/<order_number>

Verification commands and results

  • py -3 -m py_compile sites/bestbuy/app.py
  • py -3 -m py_compile sites/bestbuy/seed_data.py
  • py -3 -m py_compile sites/bestbuy/_health.py
  • JSONL/schema validation for sites/bestbuy/tasks.jsonl ✅ (19 tasks, unique IDs, correct web_name / web / upstream_url fields)
  • Repo-wide duplicate task ID check ✅ (sites/*/tasks.jsonl, 16 files / 662 tasks total)
  • Local Flask smoke via test client ✅
  • Real HTTP smoke against container ✅

Docker result

  • Built with: docker build -t webharbor:bestbuy-pr .
  • Ran container with: docker run -d --name webharbor-bestbuy-submit -p 8201:8101 -p 41015:40015 webharbor:bestbuy-pr
  • Control plane health returned ok=true and all 16 registered sites alive ✅

Smoke test result

  • HTTP 200 on: /, /home, /categories, /products, /cart, /checkout, /order-lookup, /support, /login
  • End-to-end HTTP flow checks passed for: login, logout, search, filtered browse, wishlist, rewards, account orders, add to cart, shipping step, payment step, checkout review, confirmation, order lookup ✅
  • Example confirmation order during smoke: BBY-240061

Reset + MD5 result

  • POST /reset/bestbuy returned ready=true
  • MD5 matched for runtime vs seed DB inside container:
    • 71c41f6f167e00c4b7bf725a1ccf343d /opt/WebSyn/bestbuy/instance/bestbuy.db
    • 71c41f6f167e00c4b7bf725a1ccf343d /opt/WebSyn/bestbuy/instance_seed/bestbuy.db
  • Container restart re-check also passed ✅

Screenshot paths

  • Screenshot capture was attempted but could not be completed on this machine.
  • npx playwright install chromium failed with network ECONNRESET, so no review-only screenshots were produced in sites/bestbuy/scraped_data/submission_review/.

HF asset status

Known limitations

  • Product, store, and category artwork is locally generated SVG content, not copied Best Buy-owned imagery.
  • No real payment, order placement, shipping, inventory reservation, or external runtime calls exist.
  • Screenshot capture is still pending due local browser automation download issues on this machine.

Manual reviewer notes

  • This contribution adds a new registered site and updates repo-level port/count references from 15 sites to 16.
  • Best Buy runtime state is fully resettable from instance_seed/bestbuy.db and verified via control-plane reset + MD5 matching.

@MufanQiu

MufanQiu commented Jul 1, 2026

Copy link
Copy Markdown

Review — bestbuy (PR #48)

Verdict: REQUEST CHANGES.

We deployed the environment locally and ran the full review checklist; every finding below was independently reproduced, and fidelity was checked against the real upstream site.

Issues (summary)

  • BLOCKER: .assets-revision pins 'main' but bestbuy.tar.gz only exists on the HF PR ref -> CI fail-closed
  • MAJOR: 73/156 product images broken: unescaped '&' in generated SVGs (XML invalid)
  • MINOR: Task BestBuy--11 is ill-posed: no deal title mentions a 'big screen event'
  • MINOR: Answer-leak + single-result: Task 0 (price) readable on results card; product searches return 1 result
  • MINOR: Port-slot collision with released merriam_webster (both claim slot 15 / :40015)
  • MINOR: Task 3 amenity leaked on stores list page

Mechanical checks: FAIL

Most mechanics are clean: byte-identical idempotent reset (instance md5 == seed md5 == 71c41f6f..., function-level idempotency gate at seed_data.py:1515), no cross-site imports (from sites./import sites = 0 hits), no AppleDouble files, no scraped_data reads in handlers, .gitignore matches .assetpaths, and py_compile passes on app.py + seed_data.py.

Visual fidelity: FAIL

Brand fidelity is strong: yellow/blue palette (#0046be/#fff200), category nav, hero, deals row, featured grid, store cards, footer.

Functional depth: PASS (with nits)

Every flow was driven live. Login (alice.j@test.com → /account "Jordan"; bad password rejected), register (success + mismatched-password and duplicate-email validation), rewards (alice 1840), wishlist, cart add + reload-persistence, full checkout end-to-end as david producing deterministic order BBY-240061, compare page with alice's 3 seeded items, order lookup/detail.

Task quality: FAIL

19 tasks over a deep, balanced catalog (156 products = 13×12 categories, 25 brands, 15 stores, 24 support articles, 60 orders, 339 reviews, 312 protection plans), so per-category browse distractors are real.

Required fixes before approval

  1. (BLOCKER) Repin .assets-revision from revision: main to the merged HuggingFace dataset SHA that actually contains bestbuy.tar.gz (after HF PR 31 merges).
  2. (MAJOR) Fix _write_svg (seed_data.py:258-292) to XML-escape title/subtitle/badge (xml.sax.saxutils.escape/html.escape) before interpolation; regenerate all SVGs and reseed.
  3. (MAJOR) Fix the Task 0 price leak and the single-result pattern: hide price on result cards for price-answer tasks and/or phrase product tasks with looser queries that return ≥6 results with near-misses, so the answer requires opening the PDP and the agent must disambiguate.
  4. (MAJOR) Resolve the :40015 slot collision with the released merriam_webster: append the later-merged site at index 16 (:40016) and bump EXPOSE 40000-40016 in websyn_start.sh, control_server.py, and Dockerfile.
  5. (MINOR) Repair Task 11's wording/location mismatch: rename deal 14's title/badge to mention "Big Screen Event," or surface product.deal_badge on the /deals page, or reword the task to "find the product tagged Big Screen Event" without constraining it to the deals page.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants