ACCEPTANCE CRITERIA (10/10)
☑ 1. Script `scripts/fetch-gdelt-events.js` queries GDELT DOC 2.0 API with 4 hardcoded queries: trade_war_brazil, petrochemical_global, brazil_economy, supply_chain_disruption
☑ 2. Each query has its own timespan and maxrecords settings (defined in code, not config)
☑ 3. Output `data/state/gdelt-latest.json` with articles grouped by query ID, total_events count, and errors
☑ 4. Each article includes: title, url, source (domain), date (ISO), tone (float), language
☑ 5. Rate limiting at 0.5 req/sec (1 request per 2 seconds) -- conservative since GDELT rate limit is undocumented
☑ 6. Handles GDELT HTML error pages (detect `<html>` prefix in response): log error, skip query
☑ 7. Handles empty results (no articles): set count=0, status="ok"
☑ 8. Supports `--dry-run`, `--verbose`, `--help`, `--timespan {value}` flags
☑ 9. No API key required
☑ 10. Each query fetched independently