The V2 safety audit emitted hundreds of WARN lines and then aborted
entirely with 'NoneType object has no attribute lower':
- validate_mvq_compliance: gh_pushed of 'N/A' (and historic None/empty)
was passed to datetime.fromisoformat() -> 'Invalid isoformat string';
and gh_stars/stars stored as null hit 'None * int'. Now skips entries
with no usable push date and coalesces None before the star math.
- validate_linguistic_tagging: a null 'language' field caused
None.lower(), which aborted the whole report. Now coalesces to English.
- generate_audit_report: each mandate now runs in isolation so a single
bad entry can no longer kill the entire audit; failures are logged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add 26-category news digest engine (src/news_digest.py) with Gemini AI ranking
for 3/6/12 month temporal panels across tech, cloud, and geo categories
- Add discovered_at, company, geo_region fields to inventory schema with backfill
script populating 18K+ existing entries
- Fix critical v2-mkdocs.yml bug: plugins were nested under theme (silently disabled)
- Add MkDocs Material features: instant nav, breadcrumbs, footer, announce bar
- Add trending cards CSS grid and replace Agentic Pulse with dynamic Trending Now
- Generate tech-digest.md and industry-digest.md with tabbed 3/6/12 month views
- Merge 12 stub pages (<40 lines each) into parent categories with redirects
- Replace 50 bare except:pass patterns with contextual logging across all pipeline files
- Expand autonomous discovery from 6 to 14 GitHub search queries
- Add stale health re-check for online entries older than 30 days
- Track addition_method by source type (rss, twitter, github_trending)
- Add digest generation step to CI publish workflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>