From 5585f25605c27f40aae5de26f4be93dfa8259de0 Mon Sep 17 00:00:00 2001 From: rivassec Date: Fri, 11 Sep 2026 16:32:19 -0700 Subject: [PATCH 1/2] feature: series navigation via Series: frontmatter Posts sharing a Series: value get an ordered part list (by date) rendered between the header and TOC. Computed from the published article set, so a draft member never renders a link and the box hides itself until a series has 2+ published parts - safe to tag posts whose siblings are still drafts. Wired: 'Hiring as an Adversarial System' (trust-decay + hiring-discovery, box live) and 'Anatomy of a Container Incident' (cryptominer; box appears when the companion post publishes). Series links are template-generated structural navigation, invisible to check_link_graph.py's in-body outbound cap by design. --- content/cryptominer-in-the-docker-layer.md | 1 + content/hiring-discovery-layer-broken.md | 1 + content/static/custom.css | 17 +++++++++++ content/trust-decay-adversarial-hiring.md | 1 + themes/Flex/templates/article.html | 2 ++ themes/Flex/templates/partial/series_nav.html | 28 +++++++++++++++++++ 6 files changed, 50 insertions(+) create mode 100644 themes/Flex/templates/partial/series_nav.html diff --git a/content/cryptominer-in-the-docker-layer.md b/content/cryptominer-in-the-docker-layer.md index d5fa799c..83d85cf3 100644 --- a/content/cryptominer-in-the-docker-layer.md +++ b/content/cryptominer-in-the-docker-layer.md @@ -4,6 +4,7 @@ Modified: 2026-09-11 09:00 Author: Oliver Rivas Category: DevSecOps Tags: incident-response, devsecops, docker, forensics +Series: Anatomy of a Container Incident Slug: cryptominer-in-the-docker-layer Og_image: images/og/cryptominer-in-the-docker-layer.png Summary: A runtime detector flagged mining but ps and ss came back clean. The miner lived in the image's overlay2 diff layer, relaunched on every container restart. diff --git a/content/hiring-discovery-layer-broken.md b/content/hiring-discovery-layer-broken.md index decbe9e8..1b13be18 100644 --- a/content/hiring-discovery-layer-broken.md +++ b/content/hiring-discovery-layer-broken.md @@ -4,6 +4,7 @@ Modified: 2026-07-11 Author: Oliver Rivas Category: DevSecOps Tags: careers, devsecops, hiring +Series: Hiring as an Adversarial System Slug: hiring-discovery-layer-broken Og_image: images/og/hiring-discovery-layer-broken.png Summary: The senior engineering market has a routing failure, not a talent shortage: resumes and funnels index for keywords and discard the signal seniors depend on. diff --git a/content/static/custom.css b/content/static/custom.css index 37aae9ab..f94cd148 100644 --- a/content/static/custom.css +++ b/content/static/custom.css @@ -912,3 +912,20 @@ main footer a { .author-bio p { margin: 0; color: var(--fg); line-height: 1.5; } .author-bio a { color: var(--accent); } @media (max-width: 600px) { .author-bio { flex-direction: column; text-align: center; } } + +/* Series navigation box (partial/series_nav.html): ordered part list shown + when a post belongs to a Series: with 2+ published members. */ +.series-nav { + max-width: 760px; + margin: 20px auto; + padding: 14px 22px; + background: var(--bg-elev); + border: 1px solid var(--border); + border-left: 3px solid var(--accent); + border-radius: 8px; +} +.series-nav-title { margin: 0 0 6px; color: var(--fg); } +.series-nav ol { margin: 0; padding-left: 22px; } +.series-nav li { margin: 2px 0; line-height: 1.5; } +.series-nav a { color: var(--accent); } +.series-nav [aria-current="page"] { font-weight: 600; color: var(--fg); } diff --git a/content/trust-decay-adversarial-hiring.md b/content/trust-decay-adversarial-hiring.md index 70f3d899..04960c57 100644 --- a/content/trust-decay-adversarial-hiring.md +++ b/content/trust-decay-adversarial-hiring.md @@ -3,6 +3,7 @@ Date: 2026-05-04 Modified: 2026-06-04 Category: DevSecOps Tags: careers, devsecops +Series: Hiring as an Adversarial System Slug: trust-decay-adversarial-hiring Og_image: images/og/trust-decay-adversarial-hiring.png Author: Oliver Rivas diff --git a/themes/Flex/templates/article.html b/themes/Flex/templates/article.html index d4b13787..0003e3d6 100644 --- a/themes/Flex/templates/article.html +++ b/themes/Flex/templates/article.html @@ -50,6 +50,8 @@

{{ article.title }}

+ {% include "partial/series_nav.html" %} + {% if article.toc %}