Merge pull request #449 from nubenetes/develop

🚀 Release: Agentic V2 Portal Update
This commit is contained in:
Inaki
2026-06-20 23:21:03 +02:00
committed by GitHub
4 changed files with 76 additions and 43 deletions
+5 -5
View File
@@ -142,7 +142,7 @@ Additionally, as of May 2026, Nubenetes has reached the **Platinum Operational T
| :--- | :--- |
| **Total Technical Resources (Links)** | **18647+** |
| **Specialized MD Pages** | **162** |
| **Total Commits** | **6431+** |
| **Total Commits** | **6435+** |
| **Primary AI Engine** | **Google Gemini (Agentic)** |
<!-- HEART_STATS_END -->
@@ -180,7 +180,7 @@ The growth of Nubenetes reflects the acceleration of the Cloud Native ecosystem.
| 6 | 2023 | 30 | 123 | Maintenance & Refinement |
| 7 | 2024 | 53 | 218 | Curation Strategy Pivot |
| 8 | 2025 | 5 | 20 | Stability & Research Phase |
| 9 | 2026 | 2872 | 11,861 | **Agentic AI Surge** (May 2026 Inception) |
| 9 | 2026 | 2876 | 11,877 | **Agentic AI Surge** (May 2026 Inception) |
<!-- ANNUAL_GROWTH_END -->
<!-- ANNUAL_CHART_START -->
@@ -196,8 +196,8 @@ xychart-beta
title "Nubenetes Annual Growth Metrics (20182026)"
x-axis ["2018", "2019", "2020", "2021", "2022", "2023", "2024", "2025", "2026"]
y-axis "Volume (Commits / Estimated New Refs)" 0 --> 12000
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 11861]
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2872]
bar [1445, 586, 8449, 2193, 1660, 123, 218, 20, 11877]
bar [350, 142, 2046, 531, 402, 30, 53, 5, 2876]
```
<!-- ANNUAL_CHART_END -->
@@ -207,7 +207,7 @@ xychart-beta
| :--- | :---: | :---: | :--- |
| 2026-04 | 25 | 103 | Active Curation |
| 2026-05 | 2101 | 8,677 | **Agentic Inception (Gemini Era)** |
| 2026-06 | 746 | 3,080 | Active Curation |
| 2026-06 | 750 | 3,097 | Active Curation |
<!-- MONTHLY_SURGE_END -->
### 2.4. Content Distribution and Semantic Clustering
+1 -1
View File
@@ -7440,6 +7440,6 @@
"method": "fallback_small"
}
},
"last_updated": "2026-06-20T22:59:59.133383+02:00"
"last_updated": "2026-06-20T23:19:51.802335+02:00"
}
}
+50 -17
View File
@@ -1074,7 +1074,16 @@ class V2VisionEngine:
# --- Trending v2: momentum-weighted, category-diverse selection ---
# Score = impact_weight * recency_decay so the section actually rotates
# with fresh items instead of pinning evergreen/foundational tools.
# Anchor "now" to the digest's analysis timestamp (not wall-clock) so
# identical digest input always renders identical cards — re-renders on
# later days must not shuffle ages/NEW pills and churn the committed HTML.
now = datetime.now(MADRID_TZ)
try:
raw_now = digest_data.get("_meta", {}).get("last_updated", "")
if raw_now:
now = datetime.fromisoformat(raw_now)
except Exception as e:
log_event(f"[WARN] trending now-anchor: {str(e)[:100]}")
impact_weight = {"critical": 1.0, "high": 0.66, "medium": 0.4}
impact_icons = {"critical": "🔴", "high": "🟡", "medium": "🔵"}
@@ -1104,20 +1113,18 @@ class V2VisionEngine:
return f"{n / 1000:.1f}k★".replace(".0k", "k")
return f"{n}"
def _select_lane(window_key, half_life, count, exclude_urls):
# Score = impact_weight * recency_decay over the given window; an
# aggressive half-life surfaces fresh items ("Trending Now"), a soft
# one favours sustained importance ("Rising this Quarter").
def _select_lane(window_key, count, exclude_urls, score_fn):
# Build a scored pool from the window's top-2 items per category,
# then apply a per-category diversity quota. The scoring policy is
# supplied by score_fn so each lane surfaces a different signal.
pool = []
for cat_name, items in digest_data.get(window_key, {}).items():
for item in items[:2]:
if item.get("url") in exclude_urls:
for item in (items or [])[:2]:
if not isinstance(item, dict) or item.get("url") in exclude_urls:
continue
d = _parse_day(item.get("date"))
age_days = (now.date() - d).days if d else 999
recency = 0.5 ** (max(age_days, 0) / half_life)
score = impact_weight.get(item.get("impact", "medium"), 0.4) * (0.35 + 0.65 * recency)
pool.append({**item, "digest_category": cat_name, "_age_days": age_days, "_score": score})
pool.append({**item, "digest_category": cat_name, "_age_days": age_days, "_score": score_fn(item, age_days)})
pool.sort(key=lambda x: x["_score"], reverse=True)
# Diversity quota: at most one card per category, then backfill.
sel, used_cats, used = [], set(), set(exclude_urls)
@@ -1139,7 +1146,7 @@ class V2VisionEngine:
break
return sel
def _render_cards(items):
def _render_cards(items, show_new=True):
html = ""
for item in items:
impact = item.get("impact", "medium")
@@ -1154,7 +1161,7 @@ class V2VisionEngine:
meta = item.get("date", "")
if metric:
meta += f" · {metric}"
new_pill = ' <span class="trending-card__new">🆕 NEW</span>' if item.get("_age_days", 999) <= 7 else ""
new_pill = ' <span class="trending-card__new">🆕 NEW</span>' if show_new and item.get("_age_days", 999) <= 7 else ""
html += (
f'<div class="trending-card">\n'
f' <div class="trending-card__impact trending-card__impact--{impact}">{impact_icons.get(impact, "🔵")} {impact.upper()}{new_pill}</div>\n'
@@ -1166,11 +1173,37 @@ class V2VisionEngine:
)
return html
# Lane 1: fresh momentum (3-month window, 21d half-life).
top_items = _select_lane("3_months", 21.0, 6, set())
# Lane 2: sustained importance (6-month window, soft 60d decay),
# de-duplicated against lane 1 so it surfaces different resources.
rising_items = _select_lane("6_months", 60.0, 4, {it.get("url") for it in top_items})
# Proven-staying-power signal for lane 2: URLs that the digest ranks in
# the top-2 of any category over the full 12-month window.
twelve_mo_urls = {
it.get("url")
for items in digest_data.get("12_months", {}).values()
for it in (items or [])
if isinstance(it, dict)
}
def _impact(item):
return impact_weight.get(item.get("impact", "medium"), 0.4)
def _fresh_score(item, age_days):
# Aggressive 21d half-life: surfaces the very newest high-impact items.
recency = 0.5 ** (max(age_days, 0) / 21.0)
return _impact(item) * (0.35 + 0.65 * recency)
def _sustained_score(item, age_days):
# "Rising this Quarter": reward proven staying power (present across
# the 12-month window) and de-prioritise <7d items (those belong in
# lane 1) so the two lanes surface genuinely different resources —
# not just lane 1's leftovers under a different label.
persistence = 1.0 if item.get("url") in twelve_mo_urls else 0.5
maturity = 0.35 if age_days < 7 else 1.0
decay = 0.5 ** (max(age_days, 0) / 120.0)
return _impact(item) * persistence * maturity * (0.45 + 0.55 * decay)
# Lane 1: fresh momentum (3-month window).
top_items = _select_lane("3_months", 6, set(), _fresh_score)
# Lane 2: sustained momentum (6-month window), de-duplicated against lane 1.
rising_items = _select_lane("6_months", 4, {it.get("url") for it in top_items}, _sustained_score)
try:
from datetime import datetime as _dt
@@ -1191,7 +1224,7 @@ class V2VisionEngine:
cards_html += '</div>\n'
if rising_items:
cards_html += '<div class="trending-section__title trending-section__title--secondary">📈 Rising this Quarter — Sustained Momentum</div>\n<div class="trending-grid">\n'
cards_html += _render_cards(rising_items)
cards_html += _render_cards(rising_items, show_new=False)
cards_html += '</div>\n'
cards_html += '<div class="digest-links">\n'
cards_html += ' <a href="./tech-digest/" class="digest-link-card">📊 Full Tech & Cloud Digest →</a>\n'
+20 -20
View File
@@ -139,32 +139,32 @@
<div class="trending-section__title trending-section__title--secondary">📈 Rising this Quarter — Sustained Momentum</div>
<div class="trending-grid">
<div class="trending-card">
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL <span class="trending-card__new">🆕 NEW</span></div>
<div class="trending-card__category">FinOps & Cloud Cost</div>
<div class="trending-card__title"><a href="https://www.cncf.io/blog/2021/06/29/finops-for-kubernetes-insufficient-or-nonexistent-kubernetes-cost-monitoring-is-causing-overspend">FinOps for Kubernetes: Insufficient or nonexistent Kubernetes' cost monitoring is causing overspend</a></div>
<div class="trending-card__meta">2026-06-18</div>
<div class="trending-card__why">Provides CNCF-backed guidance on why visibility and cost monitoring are crucial to stopping runaway costs in complex Kubernetes deployments.</div>
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL</div>
<div class="trending-card__category">Observability, SRE & Testing</div>
<div class="trending-card__title"><a href="https://github.com/prometheus/prometheus">prometheus</a></div>
<div class="trending-card__meta">2026-06-13 · 64.5k★</div>
<div class="trending-card__why">Prometheus remains the industry-standard, benchmark telemetry engine for modern cloud-native metrics collection and real-time alerting.</div>
</div>
<div class="trending-card">
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL <span class="trending-card__new">🆕 NEW</span></div>
<div class="trending-card__category">Kubernetes & Orchestration</div>
<div class="trending-card__title"><a href="https://github.com/NVIDIA/k8s-device-plugin">NVIDIA/k8s-device-plugin: NVIDIA device plugin for Kubernetes</a></div>
<div class="trending-card__meta">2026-06-14 · 3.8k★</div>
<div class="trending-card__why">Serves as the foundational bridge enabling GPU virtualization and hardware-accelerated scheduling for heavy AI/ML workloads inside Kubernetes.</div>
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL</div>
<div class="trending-card__category">CI/CD & GitOps</div>
<div class="trending-card__title"><a href="https://github.com/fluxcd/flux2">github: Flux Version 2</a></div>
<div class="trending-card__meta">2026-06-13 · 8.2k★</div>
<div class="trending-card__why">Flux v2 is a foundational, graduated CNCF GitOps engine engineered specifically for highly decoupled, parallel cluster synchronization.</div>
</div>
<div class="trending-card">
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL <span class="trending-card__new">🆕 NEW</span></div>
<div class="trending-card__category">Python, Java & Developer Ecosystem</div>
<div class="trending-card__title"><a href="https://github.com/astral-sh/ruff">Ruff</a></div>
<div class="trending-card__meta">2026-06-14 · 48k★</div>
<div class="trending-card__why">It has become the de facto standard for Python linting and formatting, drastically reducing CI/CD runtimes due to its high-performance Rust implementation.</div>
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL</div>
<div class="trending-card__category">Linux & System Foundations</div>
<div class="trending-card__title"><a href="https://github.com/bpftrace/bpftrace">bpftrace</a></div>
<div class="trending-card__meta">2026-06-13 · 10.2k★</div>
<div class="trending-card__why">eBPF-driven bpftrace provides safe, high-performance, dynamic kernel and userspace tracing essential for cloud-native performance analysis.</div>
</div>
<div class="trending-card">
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL <span class="trending-card__new">🆕 NEW</span></div>
<div class="trending-card__category">AI & Agents</div>
<div class="trending-card__title"><a href="https://github.com/vllm-project/vllm">vLLM on Kubernetes</a></div>
<div class="trending-card__meta">2026-06-14 · 82.8k★</div>
<div class="trending-card__why">It standardizes high-performance, memory-efficient LLM serving via vLLM on Kubernetes clusters, directly bridging cloud-native infrastructure with AI workloads.</div>
<div class="trending-card__impact trending-card__impact--critical">🔴 CRITICAL</div>
<div class="trending-card__category">DevOps & Culture</div>
<div class="trending-card__title"><a href="https://github.com/backstage/backstage">backstage</a></div>
<div class="trending-card__meta">2026-06-13 · 33.6k★</div>
<div class="trending-card__why">It is the de facto industry-standard framework for building customizable internal developer portals, centralizing platform engineering workflows.</div>
</div>
</div>
<div class="digest-links">