- New hero card (amber color) between AI & MCP Agents and Agentic Video
Hub, linking to /tech-digest/ with emoji icon and subtitle
- Dynamic digest-preview block above Agentic Pulse: shows top 1 link
from 5 priority categories (Kubernetes, AI, Security, IaC, Observability)
pulled from data/news_digest.json on each optimizer run
- New CSS: hero-badge-card--amber, hero-badge-icon, digest-preview
component with category chips and hover states
- v2_optimizer now generates both the card and preview automatically
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Inventory entries can have stars=null or discovered_at=null. Replace
.get("stars", 0) with .get("stars") or 0 in all three modules so that
None values are safely coerced to 0/"" before numeric/string comparison.
Fixes TypeError crashes in:
- v2_optimizer.py:632 _calculate_tags
- dedup.py:74,108 title dedup and entry scoring
- news_digest.py:322 category pool sorting
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
detect_license_changes() iterated all repos with gh_license set, causing
hundreds/thousands of GitHub API calls. Apply the same 200-repo cap as
the activity enrichment module to keep total enrichment under ~3 min.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Consolidate 2 GitHub API calls per repo into 1: open_issues_count
already includes PRs on GitHub, second /pulls call was redundant
- Reduce MAX_REPOS_DEFAULT 500→200: sufficient for meaningful enrichment,
200 × 0.5s = ~100s vs 500 × 1.5s = ~12.5min in CI
- Reduce GITHUB_RATE_DELAY 0.75s→0.5s: still safely under 5000 req/hr
- Add 429 rate-limit backoff (5s sleep instead of crashing)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The legacy landscape.cncf.io/api/items endpoint now returns HTML (SPA)
instead of JSON. Switch to GitHub Search API querying cncf-graduated,
cncf-incubating, and cncf-sandbox topics — reliable and uses existing
GH_TOKEN auth.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Change ` ## Category` to ` **Category**` inside MkDocs Material
tabs to avoid MD023 linter errors (headings must start at col 0)
- Sanitize pipe characters in "why" text to prevent broken markdown tables
- Regenerated tech-digest.md (1328 lines, 3 tabs: 333/443/552 lines)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Variable items per period: 3 months=10, 6 months=15, 12 months=20
so each tab shows progressively more content
- Use year field as fallback in _is_within_period when discovered_at
doesn't discriminate (backfilled entries)
- Fix NoneType comparison in _fallback_items for entries with null stars
- Regenerated digest: 3m=220, 6m=330, 12m=440 items across 22 categories
- tech-digest.md now 1353 lines with differentiated tabs (339/449/559 lines)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Generate news_digest.json from inventory using star-based ranking
(no Gemini tokens consumed — fallback mode)
- tech-digest.md: 1022 lines with 22 categories across 3/6/12 month tabs
- industry-digest.md: placeholder (geo_region data will populate after
next curator run with updated Gemini prompts)
- Add gitignore exception for data/news_digest.json
- 220 items per time period across Kubernetes, AI, DevOps, Security,
IaC, Observability, Cloud Providers, and more
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove offline plugin from v2-mkdocs.yml — it forces .html suffixes
on all URLs, breaking SEO and existing deep-links
- Add placeholder tech-digest.md and industry-digest.md pages to prevent
404 errors before first Gemini digest generation run
- Add clean URL mandate to CLAUDE.md and GEMINI.md: offline plugin is
permanently forbidden, use_directory_urls must always be true
- Update README with V2 URL Policy section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create CLAUDE.md documenting gitflow branching model, release process,
repository structure, build commands, and coding conventions for Claude
Code agents
- Add Gitflow section to GEMINI.md (Mandate) ensuring Gemini agents also
follow the branching discipline: feat→develop→release→master+tag+release
- Both files ensure all AI agents follow gitflow without manual reminders
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Update curator Gemini prompt with Phase 5: Company & Geo Classification
to extract company name and geo_region (americas/europe/spain/asia_pacific)
for industry digest categories
- Store company and geo_region from AI response in eval_data
- Add Intelligence Digest nav entries to _sync_enterprise_navigation so
digest pages persist across nav rebuilds
- Add dedup scan and enrichment pipeline steps to monthly cron workflow
(01.1.agentic_cron.yml) in addition to publish workflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add src/enrichment.py (395 lines): CNCF landscape API integration for
project graduation status, GitHub issue/PR velocity tracking with
community health scoring, and license change detection with history
- Add src/dedup.py (194 lines): URL normalization dedup, content-hash
dedup, title-similarity dedup (85% threshold via SequenceMatcher),
and resolution strategy keeping highest-quality entry
- Enable PWA/offline plugin in v2-mkdocs.yml for cached offline reading
- Expand video hub categorization with MLOps, security, IaC, GitOps,
observability, FinOps, cloud providers, and language-specific routing
- Add dedup scan and enrichment pipeline steps to CI publish workflow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add last_ai_eval timestamp to eval_data in both fast-track and grounded-track
evaluation paths, plus SQL schema and curator
- Entries enriched >6 months ago are automatically flagged for re-evaluation
instead of being skipped (stale content detection)
- Enhance "See Also" links with cross-dimension references based on shared
tags between pages, in addition to same-dimension related links
- Add _collect_tags_from_tree() helper for recursive tag extraction
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>