"""Beck's product catalog scraper (identity-only until SeedIQ XHR sniff lands). Source: Same public Sanity GROQ API as ``becks_pfr`` (no auth). Expected count: ~860 products (corn + soy + wheat). Current limitation: Beck's exposes IDENTITY fields publicly (product name, RM/MG, basic trait stack) but routes the AGRONOMIC + DISEASE ratings through their SeedIQ application, which is gated behind a browser session cookie. The public Sanity records do not include ratings. What we CAN ship without SeedIQ: - Product identity for confirmation ("yes Beck's has hybrid X at RM 112") - RM (corn) / MG (soy) / class (wheat) - Trait stack - Basic descriptive text What needs the SeedIQ XHR endpoint (BLOCKED on user sniff): - Disease ratings (GLS, NCLB, Goss's, etc.) - Agronomic ratings (standability, drought, etc.) - Regional recommendations For now this scraper is DEFERRED. Run when: - User captures the SeedIQ XHR URL + cookie/header pattern from browser dev tools, OR - We decide to ship Beck's as identity-only and let the LLM say "Beck's has this hybrid; ask your Beck's rep for full agronomic ratings" (less useful but avoids the empty-data UX). Yellow verdict in sources.json reflects this — ``--all`` skips it. TODO: implement (deferred). """ from __future__ import annotations import sys def main(argv: list[str] | None = None) -> int: print("becks_products: deferred — SeedIQ XHR sniff required for ratings, run only if user has captured the endpoint", file=sys.stderr) # Return 0 so the monthly CI workflow doesn't fail when this # source is listed but not yet implemented (and may never be, # if SeedIQ gates persist). return 0 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))