You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The third escape hatch from data poverty. Phase 5 shipped parsers; this
adds the network fetchers, the IETF I-D feed, an aggregator, and the
cron-side wiring.
- feeds/_http.py: shared stdlib HTTP helper with timeout + UA
- feeds/nvd.fetch + load: pulls NVD CVE 2.0 JSON, cache TTL 12h
- feeds/arxiv.fetch + load: pulls arXiv cs.CR Atom, cache TTL 48h
- feeds/ietf.py: parser + fetcher for IETF I-D last-call RSS, TTL 24h
- feeds.get_external_seeds: aggregates across all healthy feeds, skips
stale/missing without raising
- engine/prompts.build_generation_prompt(... external_seeds=…): emits
"EXTERNAL SIGNALS" section in the LLM prompt
- engine/generator.IdeaGenerator.generate forwards external_seeds
- cron/scheduler.generate_and_store: reads data/feeds/{nvd,arxiv,ietf}.json
on every cycle, threads through the LLM call
- scripts/refresh-feeds.sh: cron-friendly daily refresh
End-to-end demo verified: a single prompt now contains BOTH the
saturation summary (anti-seeds: certificate, detection, compliance...)
AND fresh external seeds (CVEs, arXiv papers, IETF drafts) — the two
asymmetric signals Claude needs to break out of the static-seed loop.
Tests: 14 new (9 fetcher + 5 prompt wiring), 975 total passing.
2 pre-existing event-loop pollution failures in test_remaining_gaps.py
unchanged (pass in isolation).
Co-Authored-By: Claude <noreply@anthropic.com>
0 commit comments