6117 Commits

Author SHA1 Message Date
Nubenetes Bot
9c3c026f1b release: v2.9.1 — incremental Gemini digest engine v2.9.1 2026-06-19 14:10:39 +02:00
Nubenetes Bot
ce96d91c55 docs: automated README metric synchronization [skip ci] 2026-06-19 12:10:14 +00:00
Inaki
546e1df714 Merge pull request #373 from nubenetes/feat/incremental-digest-engine
feat: incremental digest engine — 0 Gemini calls when inventory unchanged
2026-06-19 14:09:55 +02:00
Nubenetes Bot
e773676a70 feat: incremental digest engine — reuse Gemini results when inventory unchanged
Each (category × period) cell in news_digest.json now carries a hash of its
entry pool (sorted URLs). Before calling Gemini, the engine checks:
  1. Hash matches stored hash (same inventory entries)
  2. Last analyzed within MAX_STALENESS_DAYS=30

Both conditions true → reuse existing ranked list, 0 Gemini API calls.
Only cells where the inventory actually changed (new/removed entries) trigger
a fresh Gemini ranking.

Expected savings: re-runs with code-only changes → 0 API calls (down from 66).
New ingestion batch → only affected categories call Gemini (5-10 of 26 typical).
Stale refresh (>30d) → full refresh at most once per month.

Also:
- Remove day-level GitHub Actions cache for digest (redundant: news_digest.json
  is committed to the repo and is the persistent store for _meta)
- Always run news_digest.py in both 04.1 and 09 workflows (it's cheap when 0
  Gemini calls are needed)
- Trending badge now reads _meta.last_updated (actual analysis date) instead of
  file mtime (which changes on every render/commit)
- Remove invalid extra_head key from v2-mkdocs.yml (left over from rollback)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 14:09:11 +02:00
Inaki
10c20f6665 Merge pull request #372 from nubenetes/develop
🚀 Release: Agentic V2 Portal Update
2026-06-19 14:07:23 +02:00
Nubenetes Bot
72bb3c5150 feat: sync V2 elite curated edition and README metrics [skip ci] 2026-06-19 11:58:46 +00:00
Nubenetes Bot
43fae0f9d0 docs: update Video Hub with high-fidelity metadata 2026-06-19 11:31:29 +00:00
Nubenetes Bot
cfe98dcada docs: automated README metric synchronization [skip ci] 2026-06-19 11:31:01 +00:00
Nubenetes Bot
6308fc66ea chore: update inventory AI analysis 2026-06-19 11:30:32 +00:00
Nubenetes Bot
1c182e500d merge: back-merge v2.9.0 into develop 2026-06-19 13:30:02 +02:00
Nubenetes Bot
608e072dda docs: automated README metric synchronization [skip ci] 2026-06-19 11:29:47 +00:00
Nubenetes Bot
0ae118d85b release: v2.9.0 — fix publisher safety: no pruning in render-only, V2 sanity check in deploy v2.9.0 2026-06-19 13:29:43 +02:00
Inaki
9c4adeb5ac Merge pull request #371 from nubenetes/feat/fix-publisher-safety
fix: 3 critical publisher/deploy safety issues
2026-06-19 13:29:28 +02:00
Nubenetes Bot
1dd0dab308 fix: 3 critical publisher/deploy safety issues
1. Skip page deletion and nav sync in --render-only mode
   The CI publisher always uses --render-only but the pruning phase was
   deleting pages not regenerated in a given pass (e.g. low-hit pages),
   breaking nav references and corrupting the MkDocs build.

2. Protect dimension pages from deletion in full mode
   Even in a full (non-render-only) run, pages defined in self.dimensions
   are never deleted. Truly orphaned pages (not in dimensions AND not
   generated) are the only ones pruned.

3. _sync_enterprise_navigation returns True/False
   Deletion is gated on nav sync success. If nav sync fails, deletion
   is skipped to prevent inconsistency (deleted files + stale nav).
   Also fixes the fragile re.sub(r'nav:.*') regex by using string
   indexing instead, preventing accidental truncation of extra_css etc.

4. Deploy workflow V2 sanity check
   If V2 build produces fewer than 50 HTML pages or no index.html,
   deploy falls back to V1-only instead of overwriting V1 with a
   broken V2 build.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 13:29:10 +02:00
Inaki
e599793928 Merge pull request #370 from nubenetes/rollback/v2.8.4-restore
HOTFIX: revert to v2.8.4 — publisher deletions broke V2 portal
2026-06-19 13:20:55 +02:00
nubenetes-bot
7f5fbe34ee style(cleaner): auto-correcting formatting & URL normalization 2026-06-19 11:20:45 +00:00
Nubenetes Bot
119bd4158f revert: restore v2.8.4 state — publisher deletions broke V2 portal
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>
2026-06-19 13:19:40 +02:00
Nubenetes Bot
a355889969 docs: automated README metric synchronization [skip ci] 2026-06-19 11:07:02 +00:00
Nubenetes Bot
cf717c67ce release: v2.8.5 — fix invalid extra_head and broken redirect in v2-mkdocs.yml v2.8.5 2026-06-19 13:07:00 +02:00
Inaki
512b37287e Merge pull request #369 from nubenetes/feat/fix-mkdocs-config
fix: remove invalid extra_head + fix broken redirect in v2-mkdocs.yml
2026-06-19 13:06:39 +02:00
Nubenetes Bot
23256352a7 fix: remove invalid extra_head key and fix broken redirect target
- Remove extra_head (not a valid MkDocs config key, was breaking V2 build)
- Fix digital-money.md redirect: finops.md was deleted by publisher,
  redirect now points to kubernetes.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 13:06:30 +02:00
Inaki
101b341200 Merge pull request #368 from nubenetes/develop
🚀 Release: Agentic V2 Portal Update
2026-06-19 12:53:51 +02:00
Nubenetes Bot
1b56b77cbf feat: sync V2 elite curated edition and README metrics [skip ci] 2026-06-19 10:51:23 +00:00
Nubenetes Bot
655ad7d5ed docs: automated README metric synchronization [skip ci] 2026-06-19 10:45:46 +00:00
Nubenetes Bot
29e2593e42 merge: back-merge v2.8.4 into develop 2026-06-19 12:45:43 +02:00
Nubenetes Bot
1e89f8af00 release: v2.8.4 — comprehensive None-stars guard in v2_optimizer v2.8.4 2026-06-19 12:45:39 +02:00
Inaki
1a092a5af2 Merge pull request #367 from nubenetes/feat/fix-stars-none-comprehensive
fix: comprehensive None-stars guard in _render_single_link and all comparisons
2026-06-19 12:45:26 +02:00
Nubenetes Bot
f4208bca4d fix: comprehensive None-stars guard across all v2_optimizer comparisons
_render_single_link (line 872) crashed with TypeError: '>=' not supported
between NoneType and int. Replaced ALL remaining .get('stars', 0) patterns
with .get('stars') or 0 throughout v2_optimizer.py to prevent further
crashes from null stars values in inventory.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 12:45:20 +02:00
Nubenetes Bot
90d04e6d6a merge: back-merge v2.8.3 into develop 2026-06-19 12:14:57 +02:00
Nubenetes Bot
7d845fab3e release: v2.8.3 — cache news_digest.json to skip Gemini on same-day re-runs v2.8.3 2026-06-19 12:14:53 +02:00
Inaki
fbfa85c2d3 Merge pull request #366 from nubenetes/feat/digest-cache
feat: cache news_digest.json by date, skip Gemini on same-day re-runs
2026-06-19 12:14:41 +02:00
Nubenetes Bot
dc4591fb3e feat: cache news_digest.json by date to avoid re-calling Gemini on re-runs
Publisher and weekly digest workflows now restore news_digest.json from
GitHub Actions cache using key news-digest-YYYY-MM-DD. If cache hits
(same-day re-run after publisher failure), the Gemini digest step is
skipped entirely — saving ~20min and Gemini API credits.

Cache is saved immediately after successful generation and expires
automatically after 7 days (GitHub Actions cache policy).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 12:14:34 +02:00
Nubenetes Bot
96706aff90 docs: automated README metric synchronization [skip ci] 2026-06-19 10:13:08 +00:00
Nubenetes Bot
f3cb3a1ff3 merge: back-merge v2.8.2 into develop 2026-06-19 12:13:04 +02:00
Nubenetes Bot
cc6633dcdd release: v2.8.2 — fix all None-stars sort crashes in v2_optimizer v2.8.2 2026-06-19 12:12:58 +02:00
Inaki
759c10ad2c Merge pull request #365 from nubenetes/feat/fix-stars-none-sort
fix: all negated .get(stars) sort keys crash on null values
2026-06-19 12:12:46 +02:00
Nubenetes Bot
58601de338 fix: guard all negated .get('stars') sort keys against None values
Three sites in v2_optimizer where `-x.get("stars", default)` crashes
with TypeError when stars field is present but null in inventory.
Fixed with `-(x.get("stars") or default)` pattern consistently.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 12:12:39 +02:00
Nubenetes Bot
11ebda6187 docs: automated README metric synchronization [skip ci] 2026-06-19 09:43:30 +00:00
Nubenetes Bot
227dc23933 merge: back-merge v2.8.1 into develop 2026-06-19 11:43:22 +02:00
Nubenetes Bot
56db4d5e53 release: v2.8.1 — fix None resource_type crash in v2_optimizer v2.8.1 2026-06-19 11:43:18 +02:00
Inaki
e332af2ea8 Merge pull request #364 from nubenetes/feat/fix-resource-type-none
fix: None resource_type crash in _calculate_tags
2026-06-19 11:43:05 +02:00
Nubenetes Bot
9d3321d0f0 fix: guard against None resource_type in _calculate_tags
item.get("resource_type", "Reference") returns None when the field
exists with a null value in the inventory. Use `or "Reference"` instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 11:42:58 +02:00
Nubenetes Bot
9ed1318a9c merge: back-merge v2.8.0 into develop 2026-06-19 11:12:21 +02:00
Nubenetes Bot
91da9c8495 release: v2.8.0 — geo inference, last-updated badge, search boost, RSS feed, weekly cron v2.8.0 2026-06-19 11:12:16 +02:00
Nubenetes Bot
c9a7b2a8cb docs: automated README metric synchronization [skip ci] 2026-06-19 09:11:47 +00:00
Inaki
ad59cb75f0 Merge pull request #363 from nubenetes/feat/five-improvements
feat: geo inference, last-updated badge, search boost, RSS feed, weekly cron
2026-06-19 11:11:32 +02:00
Nubenetes Bot
88f891fd4e feat: 5 improvements — geo inference, last-updated badge, search boost, RSS feed, weekly cron
1. geo_region inference: _infer_geo_from_url() infers Americas/Europe/España/Asia-Pacific
   from URL TLD (.es .de .fr .uk .jp .cn etc.) as fallback when geo_region field is empty.
   Industry digest now shows real content instead of empty categories.

2. Last-updated badge: trending section header now shows "Updated Jun 19, 2026" pill
   derived from news_digest.json mtime — gives readers confidence in freshness.

3. Search boost: tech-digest and industry-digest pages now have search.boost: 2
   frontmatter so they rank higher in MkDocs Material site search.

4. RSS feed (src/rss_generator.py): generates v2-docs/feed.xml with top-20 curated
   picks from 3-month digest. Runs after news_digest in publisher. Autodiscovery
   <link rel="alternate"> added to v2-mkdocs.yml extra_head.

5. Weekly cron (09.weekly_digest.yml): runs every Monday 06:00 UTC, generates digest
   with Gemini, renders digest pages, commits, then triggers publisher.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 11:11:02 +02:00
Nubenetes Bot
61733937be merge: back-merge v2.7.1 into develop 2026-06-19 11:06:42 +02:00
Nubenetes Bot
10c70025a2 release: v2.7.1 — remove redundant digest-preview list from index v2.7.1 2026-06-19 11:06:38 +02:00
Inaki
cff4903166 Merge pull request #362 from nubenetes/feat/remove-digest-preview-from-index
refactor: remove digest-preview list from index
2026-06-19 11:05:54 +02:00