Commit Graph

6141 Commits

Author SHA1 Message Date
Nubenetes Bot
e95cd9dc56 fix: stop YouTube mosaic from rendering the entire inventory (index outage)
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>
2026-06-19 15:24:00 +02:00
Nubenetes Bot
68078fa253 Merge remote-tracking branch 'origin/develop' into develop 2026-06-19 15:10:58 +02:00
Nubenetes Bot
79e0fc7f53 merge: back-merge v2.9.4 into develop 2026-06-19 15:10:56 +02:00
Nubenetes Bot
5ade4daaec docs: automated README metric synchronization [skip ci] 2026-06-19 13:10:50 +00:00
Nubenetes Bot
421765d66f release: v2.9.4 — normalize gh_pushed to None at enrichment source v2.9.4 2026-06-19 15:10:39 +02:00
Inaki
4eb8e1c21c Merge pull request #378 from nubenetes/fix/normalize-gh-pushed-source
fix: store gh_pushed as None instead of 'N/A' at enrichment source
2026-06-19 15:10:28 +02:00
Nubenetes Bot
9d13a6a21a fix: store gh_pushed as None instead of 'N/A' at enrichment source
The date field gh_pushed was written as the literal string 'N/A' when
GitHub data was unavailable (fast_enrich, gemini_utils). That non-date
string then reached datetime.fromisoformat() downstream. Now writes None
(which all readers already handle); gh_license keeps its 'N/A' string
sentinel since it is a displayed value, not a date.

Also hardens the twin fromisoformat() call in agentic_curator's MVQ
penalty check (guards N/A/None and wraps parsing) so a bad value can't
crash a curation batch.

Adds scripts/normalize_gh_pushed.py to clean the 281 existing inventory
entries (run in CI to avoid SQLite float-serialization churn — see
script docstring).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:10:06 +02:00
Nubenetes Bot
5de57738cb Merge remote-tracking branch 'origin/develop' into develop 2026-06-19 15:04:36 +02:00
Nubenetes Bot
c90d45cb4b merge: back-merge v2.9.3 into develop 2026-06-19 15:04:34 +02:00
Nubenetes Bot
325eb8a83a docs: automated README metric synchronization [skip ci] 2026-06-19 13:04:18 +00:00
Nubenetes Bot
361f34a74a release: v2.9.3 — harden Platinum audit against null/N-A inventory fields v2.9.3 2026-06-19 15:04:08 +02:00
Inaki
89016b7e64 Merge pull request #377 from nubenetes/fix/safety-audit-null-handling
fix: harden Platinum audit against null/N-A inventory fields
2026-06-19 15:03:54 +02:00
Nubenetes Bot
4212b1f5ae fix: harden Platinum audit against null/N-A inventory fields
The V2 safety audit emitted hundreds of WARN lines and then aborted
entirely with 'NoneType object has no attribute lower':

- validate_mvq_compliance: gh_pushed of 'N/A' (and historic None/empty)
  was passed to datetime.fromisoformat() -> 'Invalid isoformat string';
  and gh_stars/stars stored as null hit 'None * int'. Now skips entries
  with no usable push date and coalesces None before the star math.
- validate_linguistic_tagging: a null 'language' field caused
  None.lower(), which aborted the whole report. Now coalesces to English.
- generate_audit_report: each mandate now runs in isolation so a single
  bad entry can no longer kill the entire audit; failures are logged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:03:33 +02:00
Inaki
8cd85a35e8 Merge pull request #376 from nubenetes/develop
🚀 Release: Agentic V2 Portal Update
2026-06-19 15:02:07 +02:00
Nubenetes Bot
f85439c757 feat: sync V2 elite curated edition and README metrics [skip ci] 2026-06-19 12:59:44 +00:00
Inaki
0d10c89a0f Merge pull request #375 from nubenetes/docs/bump-claudemd-version
docs: bump CLAUDE.md current version to v2.9.2
2026-06-19 14:42:59 +02:00
Nubenetes Bot
919ecd9dfd docs: bump CLAUDE.md current version to v2.9.2
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 14:42:49 +02:00
Nubenetes Bot
882baa7917 Merge remote-tracking branch 'origin/develop' into develop 2026-06-19 14:41:35 +02:00
Nubenetes Bot
1def1edd28 merge: back-merge v2.9.2 into develop 2026-06-19 14:35:02 +02:00
Nubenetes Bot
4b65cbc9de release: v2.9.2 — fix dark-theme CSS content-visibility flashes v2.9.2 2026-06-19 14:33:20 +02:00
Nubenetes Bot
1fe5356c7c docs: automated README metric synchronization [skip ci] 2026-06-19 12:33:15 +00:00
Inaki
dcc01e833a Merge pull request #374 from nubenetes/fix/v2-css-content-visibility
fix: remove content-visibility from dense indexes (v2.9.2)
2026-06-19 14:32:56 +02:00
Nubenetes Bot
99c9e2f8f0 fix: remove content-visibility from dense indexes (v2.9.2)
Removed `content-visibility: auto` on broad <ul>/<ol> selectors and
.v2-tag-section. On the slate (dark) theme it produced black flashes
while scrolling and made link lists below the index mosaic appear
collapsed/broken due to intrinsic-size mismatch causing scrollbar jumps.
The tags page already uses collapsed <details> (native render skipping),
so the optimization was redundant and harmful.

Bumped CSS cache-bust to ?v=2.9.2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 14:32:32 +02:00
Nubenetes Bot
858f969b93 merge: back-merge v2.9.1 into develop 2026-06-19 14:10:46 +02:00
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