Fix: the per-page resource search box with maturity tag-pills stopped
appearing after navigation.instant was enabled (DOMContentLoaded fires only
on first SPA load). Reworked v2_filter.js to init via Material's document$
observable with a DOMContentLoaded fallback, guard double-injection, bind the
clickable-tag delegation once, and add a no-results state. Cache-bust ?v=2.9.12.
Change: removed the duplicated Markdown "## Table of Contents" from all 156 V2
content pages and from v2_optimizer.py — it forced hundreds of links of scroll
on large pages. Replaced by Material's native sticky "On this page" TOC
(removed toc.integrate, added toc.follow). tags.md keeps its TOC (it is an index).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
_get_entry_geo() called entry.get("url","") before the url key was
injected into the dict, so TLD inference always received an empty
string and all 304 geo-eligible entries were silently dropped.
Fix: add url= parameter to _get_entry_geo and pass the dict key from
generate_digest. Also renames España→Spain in DIGEST_CATEGORIES,
GEO_CATEGORIES, TLD map, and v2_optimizer geo_cats list.
news_digest.json now includes Americas/Europe/Spain/Asia-Pacific data
(star-based fallback; Gemini will re-rank on next Monday CI run).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Titles containing ' | ' (e.g. "Neo, Now in the Terminal | Pulumi Blog")
broke the Markdown table renderer because the unescaped pipe was parsed
as a column separator.
Root cause: v2_optimizer.py escaped pipes in the 'why' column but not
in the link title — one-line fix adds `.replace("|", r"\|")` to `t`.
Also corrects the 4 already-rendered broken entries in tech-digest.md.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
load_inventory_channels() selected entries via 'youtube_mosaic' in entry
(key presence). save_inventory() always writes a youtube_mosaic column
that the SQL round-trip materializes as an empty dict {} on EVERY entry,
so the filter matched all 18,647 inventory entries and emitted ~18.6k
inline <img> links on a single line. That produced a 4MB v2-docs/index.md
(and 2.9MB docs/index.md), hanging both V1 and V2 index pages in the
browser. A prior revert masked it; the next SQL-backed sync re-broke it.
Fix: only treat an entry as a mosaic channel when youtube_mosaic is a
non-empty dict with a logo image (136 curated channels). Regenerated both
index files via reorganize_mosaic — docs/index.md is now byte-identical
to the last known-good state (52KB); v2-docs/index.md back to 41KB.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The publisher deleted ~30 v2-docs pages still referenced in v2-mkdocs.yml nav,
producing a broken MkDocs build. Rolling back to last known good state (v2.8.4).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The 5-item link list was redundant with the 6 trending cards block
that the publisher generates. Cleaner UX: hero card (amber) → trending
cards → /tech-digest/ for full 22-category view.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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>
- 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>