Adds a MkDocs on_config hook (scripts/mkdocs_hooks.py) that appends the
release version as the ?v= cache-buster on v2_elite.css and v2_filter.js,
resolved from $SITE_VERSION or the latest git tag. Removes the hand-
maintained query strings from v2-mkdocs.yml.
This prevents the class of bug fixed in v2.9.46: a CSS/JS change going
invisible to returning visitors because ?v= was never bumped (it had
drifted to 2.9.42 for the CSS and 2.9.19 for the JS). Now every release
stamps a fresh URL automatically.
Falls back to leaving URLs untouched when no version is resolvable (e.g.
local mkdocs serve in a shallow checkout), so the build never fails.
Verified: build from git tag -> ?v=2.9.46; SITE_VERSION=9.9.9 -> ?v=9.9.9.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The "Show more / Show less" disclosure on the Trending lanes did nothing on
the live site: the extra_css reference was pinned to ?v=2.9.42 and never
bumped, so returning visitors kept the cached pre-disclosure CSS (no
.trending-card--extra / .trending-showmore / :checked rules). Both the
"Show N more" and "Show less" labels showed at once and clicking was inert.
Bumping the query string forces browsers/CDN to re-fetch the current file.
Verified the disclosure works in a freshly built site via Playwright
(9 -> 16 cards on click, label toggles correctly).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Trending section felt sparse (6 + 4 cards). Make it much denser while
keeping the page manageable:
- Lane 1 "Trending Now": select up to 16 category-diverse fresh items.
- Lane 2 "Rising this Quarter": select up to 12 sustained-momentum items.
- Each lane shows the first N cards (9 / 6) and tucks the rest behind a
pure-CSS, no-JS "Show N more" / "Show less" disclosure (checkbox-hack +
general-sibling combinator), scoped per lane via a .trending-lane wrapper.
- New .trending-card--extra (hidden by default, fade-in on reveal) and
.trending-showmore pill styles, with slate-theme variants.
The two lanes remain de-duplicated by URL (verified: 16 + 12 cards, zero
overlap) and lane 2 keeps its sustained signal (bpftrace, OpenTelemetry,
Gateway API, Vault, Argo CD, Ray, ...). Verified the toggle in a real
browser via Playwright: 9->16 cards on click, label flips correctly.
Generator + CSS change; the docs/ CSS edit auto-triggers the 04.1 publisher
to regenerate v2-docs on develop.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The second Trending lane previously reused lane 1's scoring formula (just a
softer half-life over a wider window), so it surfaced the same fresh/high-impact
items as lane 1 — effectively lane 1's leftovers under a "Sustained Momentum"
label. Verified: both lanes showed items aged 2-6 days.
Changes:
- _select_lane now takes a score_fn so each lane drives off a different signal.
- _fresh_score (lane 1): unchanged 21d-half-life freshness bias.
- _sustained_score (lane 2): rewards proven staying power (presence in the
12-month digest window) and de-prioritises <7d items (lane 1's job). Lane 2
now surfaces matured pillars — Prometheus, Flux, bpftrace, Backstage — with
zero overlap with lane 1.
- Suppress the 🆕 NEW pill in lane 2 (a "sustained" card flagged NEW is
contradictory; freshness is lane 1's signal).
- Anchor "now" to digest _meta.last_updated instead of wall-clock, so identical
digest input renders identical cards (no age/ordering churn on re-renders).
- Harden _select_lane against None/non-dict window entries (latent crash).
Generator-only change; CI publisher (04.1) regenerates v2-docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Extract lane selection/rendering into reusable helpers (_select_lane,
_render_cards) and add a second momentum lane below "Trending Now":
- "📈 Rising this Quarter — Sustained Momentum": 6-month digest window
with a soft 60d half-life (vs 21d for lane 1), so it favours resources
with sustained relevance rather than just the freshest items.
- De-duplicated against lane 1 by URL, so the two lanes surface different
resources (verified: FinOps / NVIDIA device-plugin / Ruff / vLLM with
real star counts, no overlap with the Trending lane).
- New .trending-section__title--secondary style (divider + lighter weight).
Generator-only change; CI publisher (04.1) regenerates v2-docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Rework the V2 'Trending Now' section so it reflects real momentum instead
of pinning evergreen/foundational tools:
- Hybrid ranking: impact_weight x recency_decay (21d half-life) so fresh
items surface and the section rotates between releases (date was shown
but never used to rank before).
- Diversity quota: at most one card per digest category, then backfill —
replaces the old impact-only sort that filled all slots with the 2-3
highest-volume categories.
- Real momentum signal: join each item with the inventory by URL and show
the live GitHub star count (e.g. 38.2k★); fall back to the 1-5 Gemini
score only when no gh_stars. Adds a 🆕 NEW pill for items <= 7 days old.
- Clean titles: strip github.com/owner/ paths and 'domain.tld:' prefixes
(no more 'github.com: Istio' or raw repo slugs).
- Fix star-render bug ('🌟'*stars or 0 printed a literal 0 when stars=0).
Generator-only change; CI publisher (04.1) regenerates v2-docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Render a true colour-matrix heatmap on the Topic Map page (distinct from
the size-based Label cloud on index/Tags). One tile per category, grouped
by strategic dimension, with tile warmth (.th-1..6) encoding how many
AI-curated resources it holds. Log scale since counts span ~1..160.
The existing directory grid is preserved below a new "Full Category
Directory" heading. Generator-only change; the publisher regenerates
topic-map.md. CSS adds .topic-heatmap / .topic-heatcell with light + slate
palettes.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The nb-quicknav popovers are positioned via explicit CSS anchor-positioning
pairs (anchor-name on the button + position-anchor on the menu) keyed per
popover id. The two new menus (nb-pop-guide, nb-pop-videos) had no such
pairs, so their popovers opened unanchored (wrong position / "broken").
Add the missing anchor-name/position-anchor pairs and bump the CSS
cache-buster to 2.9.42.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restructure the custom nb-quicknav header (docs/overrides/main.html):
- Replace the standalone "Topic Map" pill with a "Portal Guide" dropdown
grouping the dispersed orientation pages: Topic Map, Methodology,
Technical Tags, About.
- Add a "Videos" parent dropdown (right after Digest) with the video
category subpages (Video Hub, AI Agents & MCP, DevOps/IaC/SRE,
Cloud Native Core, Fundamentals), promoted out of the "More" menu.
- Trim "More" to the remaining misc entries: Demos, FAQ, Career, V1 Archive.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Revert navigation.tabs: removes the duplicate Material tab bar that was
stacking on top of the custom nb-quicknav header. Group orientation pages
under Portal Guide in the left nav.
The top tab bar forced Material to scope the left sidebar to the active
tab, which regressed the always-populated vertical nav. Revert
navigation.tabs (+ .sticky) so the left column behaves as before.
Apply the intended grouping in the (restored) left nav instead:
- New "Portal Guide" collapsible group: Topic Map, Methodology,
Technical Tags, About.
- about.md is pulled out of its Architectural Foundations dimension
(skipped in the generator's dimension loop) so it is not duplicated.
- Agentic Video Hub stays a prominent top-level group with its video
subpages (no longer hidden in a tab-overflow "...more" menu).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>