0b82d9d2026-06-22security: strip hardcoded secret -> env-first/passwordless. No rotation/deploy.
9768cb42026-06-10label intentional no-scrape vendors honestly: API exposes skip_catalog_scrape/is_private_label/is_active; cards show 'n/a — private label' or 'n/a — no source' instead of 'none built' for the 14 vendors with no scrapeable source; gimmersta flagged in registry
47c3aaa2026-06-10agent-host: normalize scraper output — accept bare array or {vendor,products} wrapper (new feed-first scrapers use the wrapper; scan was failing with .slice is not a function)
848ffce2026-06-10resolveScraper alias map: 23 vendor codes mapped to existing scraper files (cole_son->cole-and-son, maya->maya-romanoff, hollywood->momentum-textiles, elitis->elitis-wallcovering, etc); port conflicts resolved via registry reassign (dolce_gabbana 9736, andrew_martin 9737, DWDP 9738)
1e2344e2026-06-10Launch infra: generic agent-host.js (per-vendor, env-parameterized) + viewer Launch/Restart/Scan wired to local pm2. Launch starts the agent, Scan runs the vendor's real scraper (innovations: 8 products live). Resolves vendor_code->scraper_id; OOM-safe (one agent per click).
913eff22026-06-10Honest agent status: resolve real pm2 name per port, flag conflict (port reused by other app) vs true online. 0 vendor agents actually running.