18 top-level sections overflowed the horizontal tab bar on a laptop (~3300px of
labels vs ~1400px viewport), forcing horizontal scroll to reach the right-side
dimensions, and left the sidebar nearly empty on top-level pages like the home.
Disabling navigation.tabs (+ .sticky) moves the sections into the standard
vertical left sidebar: it handles 18 collapsed sections via normal vertical
scroll, stays populated on every page (incl. the home), and nothing clips.
Verified: the home nav goes from 23 rendered links (mostly the tab bar) to the
full 178-link tree, with 0 tab elements. Theme-only change (the optimizer's nav
sync only rewrites the nav: block, so this is preserved).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds a second JSON-LD block per page (a schema.org CollectionPage tied to the
existing WebSite/Organization @graph) carrying the page name, description, URL,
and datePublished / dateModified fed by the git-revision-date plugin's raw ISO
dates. Enables richer search results (article/collection rich snippets) with
real freshness dates. Template-only change (docs/overrides/main.html), applied
at build time; the homepage is skipped (it is already the WebSite entity).
Verified: every content page emits a valid CollectionPage with both dates
(e.g. Kubernetes datePublished=2026-05-18 dateModified=2026-06-20); the home
carries only the WebSite+Organization graph.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Enrich each page's meta description with its top-ranked resource names
(long-tail keywords) instead of a pure template — e.g. 'Top Kubernetes
resources for 2026, AI-ranked: Helm, kube-prometheus and more — curated Cloud
Native tools, guides and references.' URL/path-like and emoji-laden titles are
filtered out; pages whose top links are all URL-like fall back to the clean
template. Capped at ~160 chars on a word boundary.
- Enable git-revision creation dates (enable_creation_date: true) so every page
footer shows both 'Created' and 'Last update' — an age/freshness signal.
Verified locally: descriptions are clean, tool-named, 126-151 chars; the footer
renders both dates. Pages pick up the new front-matter on the next Publisher run.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Every V2 page previously fell back to the identical global site_description
(duplicate meta descriptions = SEO penalty across ~140 pages). The generator now
emits a unique description: front-matter per page — derived from the page title
and its strategic dimension — which Material renders as <meta name=description>
and og:description. Topic Map and Methodology get tailored descriptions too.
Also add v2-docs/robots.txt (deployed at the site root) allowing full crawl and
referencing both the V2 (root) and V1 (/v1/) sitemaps.
Verified locally: each built page now carries a distinct meta description, and
robots.txt lands in the build output. The ~140 generated pages pick up their
front-matter on the next V2 Publisher run.
Note: the 12 redirect-stub pages (chef->ansible, react->javascript, ...) were
left as-is — they already 0s meta-refresh redirect with canonical pointing at
the target, which is better SEO than noindex (and the redirects plugin would
overwrite any front-matter anyway).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Technical Tags Index TOC was a flat 80-entry numbered list that buried the
8 meaningful maturity tags under a long tail of one-resource 'X Content'
language tags, with colliding anchors (C / C# / C++ all -> #c-content) and a
'1 resources' grammar bug.
- Group the TOC: 'Maturity and Quality' as a clean numbered list; 'Technical
Domains' and 'Language and Format' as compact, count-sorted inline pill rows.
- Precompute unique, explicit heading anchors ({#slug}) shared by the TOC and
the section headers (c-sharp-content, c-plus-plus-content, dedup counter),
fixing the collisions.
- Correct singular/plural ('1 resource').
- Filter non-language language values (En, Not Applicable, Multi-Language,
Polyglot, ...) so they no longer create meaningless tag buckets.
Validated: 0 markdownlint errors on the regenerated tags.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Add a Database Architecture diagram (YAML + SQLite coexistence: inventory.sql
source-of-truth, in-memory SQLite, inventory.yaml mirror, schema) in 6.1.3,
inside a collapsible <details>.
- Add a full Data Lifecycle diagram (discovery -> ingestion -> maintenance/
enrichment -> render -> deploy + GC) in 6.3, inside a collapsible <details>.
- Fix mermaid text overflow in the Division-of-Labor, Agentic Data Flow, Debate
Protocol and Deployment Lifecycle diagrams by wrapping long node labels with
<br/>; remove a duplicate Z-->B edge.
- Add a 'V2 Home Restructure and SEO (v2.9.16-v2.9.20)' section documenting the
Topic Map & Methodology pages, per-page last-updated dates, JSON-LD, branded
404, privacy-friendly embeds and deterministic generated artifacts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Follow-up to v2.9.19: deriving lastBuildDate from _meta.last_updated only moved
the drift one level — that analysis timestamp is itself bumped on every publish
even when the ranked content is unchanged, so feed.xml kept differing between
develop and master. Use the freshest item's content date instead (the items only
change when the ranking actually changes). Verified: deterministic across reruns,
and the develop and master digests both yield 2026-06-18, so feed.xml is now
byte-identical across branches — the drift is fully eliminated.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The in-page filter widget (v2_filter.js) auto-injects wherever the page has
<ul><li> items. Topic Map lists category links (with counts) and Methodology
lists legend rows — neither carries .md-tag maturity tags, so the tag pills
filtered to zero and the 'X of Y resources' counter mis-counted categories as
resources. Added both pages to the widget's h1-based skip-list. Bumped
v2_filter.js?v=2.9.19.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>