v2.9.1 — Incremental Gemini digest engine
Incremental digest engine — 0 Gemini calls when inventory unchanged
Problem
Every pipeline run called Gemini 66 times regardless of whether the inventory had changed.
The GitHub Actions day-level cache only helped for same-day retries.
Solution
Each (category × period) cell in news_digest.json now stores a fingerprint of its entry pool:
```json
"_meta": {
"3_months": {
"Kubernetes & Orchestration": {
"last_analyzed": "2026-06-19T10:00:00+02:00",
"entry_hash": "a1b2c3d4",
"entry_count": 45,
"method": "gemini"
}
}
}
```
Before calling Gemini, the engine checks hash + staleness (MAX_STALENESS_DAYS=30).
Match → reuse stored result. Mismatch → call Gemini for that cell only.
Savings
| Scenario | Before | After |
|---|---|---|
| Re-run with code changes only | 66 calls | 0 calls |
| New ingestion batch | 66 calls | ~5-10 calls |
| Weekly Monday run, stable inventory | 66 calls | 0 calls |
Also
- Removed redundant GitHub Actions digest cache (news_digest.json committed to repo is the persistent store)
- Trending badge now shows actual Gemini analysis date from
_meta.last_updated - Removed invalid
extra_headkey from v2-mkdocs.yml
🤖 Generated with Claude Code