Commit Graph

6175 Commits

Author SHA1 Message Date
Inaki
da96dbc08a Merge pull request #389 from nubenetes/feat/fix-readme-sync-push-loop
fix: readme-sync push loop — rebase → merge-based retry
2026-06-19 16:05:12 +02:00
nubenetes-bot
5eec0880f7 style(cleaner): auto-correcting formatting & URL normalization 2026-06-19 14:04:54 +00:00
Nubenetes Bot
b470c4acdb fix: escape pipe chars in digest table link titles
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>
2026-06-19 16:04:21 +02:00
Nubenetes Bot
c70aef8b78 fix: readme-sync push loop — switch from rebase to merge-based retry
The rebase loop never attempted a push after self-healing; it looped
back to `git pull --rebase` and hit a fresh conflict every iteration
(5x), then the final bare push failed non-fast-forward.

Root cause: in a rebase `--ours` = remote side (not our bot commit),
so the README was discarded and rebuilt each round while the remote
kept advancing.

Fix:
- Pull latest *before* committing (shrinks conflict window)
- Retry loop now tries push first, then merge-pulls on rejection
- Uses `-X ours` merge (correct semantics: keep bot's README)
- Re-runs updater after each merge so metrics stay consistent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 16:02:13 +02:00
Nubenetes Bot
94ac0b73a2 feat: sync V2 elite curated edition and README metrics [skip ci] 2026-06-19 13:56:44 +00:00
Nubenetes Bot
3669753fb1 merge: back-merge v2.9.9 into develop 2026-06-19 15:56:14 +02:00
Nubenetes Bot
00cf39f19b release: v2.9.9 — backfill CHANGELOG 2.6.0-2.9.1 (now complete) v2.9.9 2026-06-19 15:56:09 +02:00
Inaki
8eea34b1d1 Merge pull request #387 from nubenetes/docs/changelog-backfill-2.6-2.9.1
docs: backfill CHANGELOG entries for 2.6.0-2.9.1
2026-06-19 15:55:54 +02:00
Nubenetes Bot
8ad8230014 docs: backfill CHANGELOG entries for 2.6.0-2.9.1
Reconstructed the missing 2.6.0-2.9.1 entries from GitHub Release notes,
closing the gap where CHANGELOG.md had stalled at 2.5.8 while releases
reached 2.9.x. Changelog is now complete and continuous through 2.9.9.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:55:47 +02:00
Nubenetes Bot
ebc7e7a26f merge: back-merge v2.9.8 into develop 2026-06-19 15:52:32 +02:00
Nubenetes Bot
6a1b944e45 release: v2.9.8 — gh_pushed data cleanup + CHANGELOG backfill (2.9.2-2.9.8) v2.9.8 2026-06-19 15:52:27 +02:00
Inaki
a05d33381a Merge pull request #386 from nubenetes/docs/changelog-2.9.8
docs: document releases 2.9.2-2.9.8 in CHANGELOG.md
2026-06-19 15:52:12 +02:00
Nubenetes Bot
2b5bb54d94 docs: document releases 2.9.2-2.9.8 in CHANGELOG.md
The in-repo CHANGELOG had drifted (last entry 2.5.8) while GitHub Releases
went to 2.9.7. Backfill the 2.9.2-2.9.8 entries I have full detail on and
flag the 2.6.0-2.9.1 gap. 2.9.8 also covers the existing gh_pushed
'N/A'->null data cleanup (PR #385).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:52:06 +02:00
Nubenetes Bot
803870adc5 docs: automated README metric synchronization [skip ci] 2026-06-19 13:49:37 +00:00
Inaki
eeef76614d Merge pull request #385 from nubenetes/chore/normalize-gh-pushed-data
chore: normalize existing gh_pushed 'N/A' -> null (281 rows)
2026-06-19 15:49:14 +02:00
Nubenetes Bot
cc9e7ae220 chore: normalize existing gh_pushed 'N/A' -> null in inventory (281 rows)
Completes the v2.9.4 source fix by cleaning the existing data. last_checked
is already INTEGER (applied by a pipeline run after v2.9.6), so this diff is
limited to the 281 gh_pushed values. Deterministic / CI-reproducible.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:48:56 +02:00
Nubenetes Bot
47aec8ed87 feat: sync V2 elite curated edition and README metrics [skip ci] 2026-06-19 13:48:06 +00:00
Nubenetes Bot
d31cf94c8d merge: back-merge v2.9.7 into develop 2026-06-19 15:42:02 +02:00
Nubenetes Bot
9f70c32ff5 release: v2.9.7 — align Intelligence Digest hero card height v2.9.7 2026-06-19 15:41:49 +02:00
Inaki
7425a6a4cb Merge pull request #383 from nubenetes/fix/hero-digest-card-size
fix: align Intelligence Digest hero card height with the other 4
2026-06-19 15:41:44 +02:00
Nubenetes Bot
891f4b8dbd fix: align Intelligence Digest hero card height with the other 4
The four logo hero cards use a 100px <img>; the Intelligence Digest card
uses an emoji <div class=hero-badge-icon> that was only ~32px tall, so it
rendered shorter. Give .hero-badge-icon a 100px flex-centered box (and
matching 12px bottom margin) so all five cards are the same height.

Cache-bust bumped to ?v=2.9.7.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:41:32 +02:00
Nubenetes Bot
7c467ea752 Merge remote-tracking branch 'origin/develop' into develop 2026-06-19 15:38:53 +02:00
Nubenetes Bot
6050b39545 merge: back-merge v2.9.6 into develop 2026-06-19 15:38:51 +02:00
Nubenetes Bot
29abd31e56 release: v2.9.6 — deterministic inventory dump (last_checked INTEGER) v2.9.6 2026-06-19 15:38:46 +02:00
Nubenetes Bot
6090747083 docs: automated README metric synchronization [skip ci] 2026-06-19 13:38:44 +00:00
Inaki
fe08a271f4 Merge pull request #382 from nubenetes/fix/deterministic-dump-code
fix: deterministic inventory dump — last_checked as INTEGER
2026-06-19 15:38:19 +02:00
Nubenetes Bot
1fe0509433 fix: deterministic inventory dump — last_checked as INTEGER
last_checked stored epoch seconds as REAL; SQLite's version-specific
REAL->text float printing rewrote ~every row on dump, so a locally
regenerated inventory.sql diverged from CI's. Normalize last_checked to
int on the entry before both the SQL record and the YAML dump, and make
the column INTEGER. All readers do coarse day-level staleness checks, so
sub-second precision is unused.

Verified: load->save idempotent for inventory.sql AND inventory.yaml, and
local (SQLite 3.40.1) output byte-identical to CI-equivalent python:3.11
(SQLite 3.46.1). The deterministic data regenerates on the next pipeline
save; committing only the code avoids conflicting with pipeline data churn.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:37:51 +02:00
Inaki
d9ed471d16 Merge pull request #380 from nubenetes/develop
🚀 Release: Agentic V2 Portal Update
2026-06-19 15:32:13 +02:00
Nubenetes Bot
6bed317cdc feat: sync V2 elite curated edition and README metrics [skip ci] 2026-06-19 13:30:54 +00:00
Nubenetes Bot
a0927d47f7 Merge remote-tracking branch 'origin/develop' into develop 2026-06-19 15:24:51 +02:00
Nubenetes Bot
543e3c4d82 merge: back-merge v2.9.5 into develop 2026-06-19 15:24:49 +02:00
Nubenetes Bot
6a4a1278df docs: automated README metric synchronization [skip ci] 2026-06-19 13:24:47 +00:00
Nubenetes Bot
a6b0b19fbd release: v2.9.5 — fix runaway YouTube mosaic breaking V1/V2 index pages v2.9.5 2026-06-19 15:24:33 +02:00
Inaki
59d6234792 Merge pull request #379 from nubenetes/fix/mosaic-runaway-index
fix: stop YouTube mosaic from rendering the entire inventory (index outage)
2026-06-19 15:24:22 +02:00
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