Add deal-data lint + auto-filed GDA data-bug queue (#18)
Charles's draft review surfaced GDA-side data defects (a $1,799 Razor HD scope bundled under the $400 UH-1 sight; M855A1 priced by box not per round; SR-15 lower-receiver kits blended into the rifle price). Those live
Charles's draft review surfaced GDA-side data defects (a $1,799 Razor HD scope bundled under the $400 UH-1 sight; M855A1 priced by box not per round; SR-15 lower-receiver kits blended into the rifle price). Those live in the GDA www repo, but the marketing-bot is where they get noticed — so it should detect and route them, not rely on a human to spot and forward.
- dealClassifier.js: detectBundle() flags multi-product (|-joined/combo)
titles whose single price can't be attributed to one product; segmentDeals now pulls bundles out of price stats and returns them separately.
- dealLint.js: lintDeals() emits structured tickets for bundle_contaminated_price,
parts_blended_with_complete, price_outlier_suspected (3x+ over bucket median), and ammo_price_not_cpr. writeTickets() appends deduped to learnings/gda-data-bugs.jsonl.
- agent.js: lints every product's live deals each run, auto-files tickets (dry-run too).
- dealLint.test.mjs: 9 tests incl. the exact Vortex bundle title + live m855a1/sr-15 feeds.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>