The CRITICAL/HIGH impact badge (and optional NEW pill) was absolutely
positioned top-right, so a long celeste category/title could slide
underneath it and become unreadable. Make the badge an in-flow,
right-aligned fit-content pill on its own line, with the NEW pill as a
flex sibling — impact, title and NEW can no longer overlap at any width.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Tech & Cloud and Industry & Geo digest pages rendered period-first (three
time-window tabs, each nesting every category as bold text), so they had zero
real headings and an empty "On this page" TOC. Inverted _generate_digest_pages()
to category-first: each category is a real ## heading with the 3 time-windows as
content tabs inside it. The right TOC now lists all 22 tech categories / 4 geo
regions once each, headings sit at column 0 (no MD023 workaround), tabs preserved.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the fragile rebase + checkout --ours/--theirs README.md self-healing
(which could hang on a non-README conflict and discard the bot's README
metrics) with the deterministic model already used by 05.1: the render is
authoritative for its generated surface, so each attempt hard-resets to the
freshest origin/develop tip, overlays the generated outputs verbatim
(docs/, v2-docs/, inventory.yaml/.sql, news_digest.json — source configs left
untouched), regenerates README on top, then commits and pushes with a 5x retry.
Never hangs on a conflict, never loses data. Pin PYTHONPATH on the step.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Root cause of the recurring README-sync failure: 05.1 modified README.md in
earlier steps then ran `git pull`, which aborts on a dirty tree whenever a
concurrent bot commit advanced develop first. Rewrote its commit step as a
fetch → reset --hard → regenerate → commit → push retry loop (README is a pure
function of inventory, so a hard reset never loses data and eliminates the
merge-conflict / --ours/--theirs class entirely).
Also:
- 03.1/03.2/03.3: wrap the single-shot pull --rebase && push in a 5x retry loop.
- 07.1 PR Guardian: continue-on-error (advisory; keeps the comment, drops the
blocking red ❌ on AI false positives) + PR-scoped concurrency.
- 07.2 Markdown Linter: PR/branch-scoped concurrency with cancel-in-progress.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fix: the per-page resource search box with maturity tag-pills stopped
appearing after navigation.instant was enabled (DOMContentLoaded fires only
on first SPA load). Reworked v2_filter.js to init via Material's document$
observable with a DOMContentLoaded fallback, guard double-injection, bind the
clickable-tag delegation once, and add a no-results state. Cache-bust ?v=2.9.12.
Change: removed the duplicated Markdown "## Table of Contents" from all 156 V2
content pages and from v2_optimizer.py — it forced hundreds of links of scroll
on large pages. Replaced by Material's native sticky "On this page" TOC
(removed toc.integrate, added toc.follow). tags.md keeps its TOC (it is an index).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
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>