Changelog — rootdrifter Ghost theme
All notable changes to the rootdrifter theme and the rootdrifter.io platform.
v1.3.1 — 2026-08-23 — the gated panel leaves the public body
Access hardening — /deck/quill/
- The token-gated Quill panel no longer ships any panel content in the public page body.
The template renders an empty container; content is fetched only after a gate session is established (session probe on load, token POST on submit). Any non-2xx response or network failure produces one generic refusal — no differentiation, fail-closed.
- The baked panel snapshot moved out of the theme entirely, to a deploy artefact that is
installed at dispatch to the gated serving location. The bake's gate chain is unchanged: a violation still refuses the bake outright — nothing is ever silently redacted.
- Gate endpoint consolidated to a single stable path under the deck namespace
(/deck/quill/gate/), replacing the theme custom-setting indirection.
v1.2.0 — 2026-08-21 — Signal Grid + the utilities deck
Signal Grid visual pass
A fresh look within the locked token system — no palette, font, or scanline change:
clamp()-based fluid type scale and section rhythm across every surface.- The two hero blocks merged into one hero component with a shared surface variant.
- Card grids moved to
auto-fit, so breakpoints derive from content, not media queries. - Homepage section labels gained two-digit counters; one IntersectionObserver reveal
system (reduced-motion aware, fail-open static); JS nav active-state for template routes.
/console/reframed with the unified hero as a utilities surface.
DRIFTDECK joins the information architecture
- DECK now sits in the primary nav and footer, and the homepage gained a Utilities strip
linking the deck, the Quill status panel, and the Console Suite — the portfolio and the utilities surface read as one site.
/deck/became the utilities front door: a registry partial renders one line per drop
through a parameterised utility-card, with Quill and the Console Suite as the first two entries.
/deck/quill/ — token-gated status panel
- New template-only route carrying a stage-time baked snapshot of the Quill pipeline's
strict status render, public projection only: counts, states, verdicts, class labels. The bake passes a fail-closed gate chain (strict-render marker, content scan, output scrub, post-write re-scan) and refuses — never redacts — on any violation.
- Projection hardening: the panel footer no longer enumerates internal scan rule-class
names; it shows the rule count only.
Fixes
/portfolio/was unreachable — a Ghost 6.x self-redirect loop caused by a data binding
whose canonical URL equalled the route itself. The binding is dropped and the route is template-only; all 14 theme routes now verify HTTP 200 over loopback.
Verification
- Theme scrub gate passed 8/8 targets; gscan 0 errors.
Platform — 2026-08-17 — Console Suite + DRIFTDECK portal
Theme version was unchanged during this span (released with v1.2.0); these are platform additions:
/console/— a read-only, cross-module status board. The page is a baked, escaped,
static snapshot: project names, verdicts, exit codes, and bare counts only. A built-in scrub gate refuses to write the page if anything operational-shaped survives the reduction.
/deck/— the DRIFTDECK public landing: the suite comprises the Splice video module
and the Quill document module, local-first pipelines that run entirely on the user's own hardware. Gated download/docs pages behind the Ghost membership flow.
Platform — 2026-06-19 → 2026-07-25 — privacy firewall + accuracy pass
- Repository split: a private source tree (blanket-gitignored, fail-closed, verified
with git check-ignore) separated from the public theme/content/deploy tree.
- Emission-gate engineering series: the pre-push content gate moved to a
whitelist-inverted model; IPv4 findings adjudicated by range (private/reserved pass, global still caught); new finders for interface-name and tailnet-name shapes; a durable self-test runner that must fire on dirty fixtures and stay silent on clean ones.
- Public-surface accuracy pass: vetting-status claims removed from all public surfaces
as inaccurate to the roles being sought; lab network values tokenised to TEST-NET-1 and the disk UUID to an all-zero placeholder, each marked as tokenised where it appears, with surrounding text reworded to stay accurate.
- AI-use disclosure section added. The retired github.io hub marked as retired.
v1.1.1 — 2026-06-14 — nav consistency, portfolio SEO, polish
Navigation & voice
- Renamed the Blog nav item to TRANSMISSION LOG (top nav + footer), matching the site's
"transmission" voice; the /blog/ route is unchanged. Updated the remaining visible "Blog" strings to match (hero CTA, 404 page, project-page footer link, empty-state labels).
- Raised the nav's mobile-collapse breakpoint to 900px so the longer label can never overflow the
fixed-height nav bar on small-laptop widths.
Portfolio index SEO
/portfolio/is a template route with no backing page, so it carried no social/SEO metadata.
Added a bound Ghost page (data: page.portfolio in routes.yaml) holding title/description/OG/ Twitter + the branded social card, so shared links render a proper card and /portfolio/ enters the sitemap.
Fixes
- Removed a stray "← Blog" back-link hardcoded at the bottom of the portfolio index template.
v1.1.0 — 2026-06-13 — platform expansion
- Civilian on-ramp (
/start/) plus a homepage civilian lede and manifesto strip. /support/(transparent running costs) and/challenges/(CTF index) pages, with matching
nav and footer entries.
- CTF Challenge 0 (a view-source flag on the homepage).
- JSON-LD
author.urlfix — re-enabled theauthortaxonomy so the author entity validates
instead of resolving to /404/.
v1.0.0 — 2026-06-12 — production launch
First production release. rootdrifter.io is live on Ghost 6.44.1 behind Cloudflare, serving the full portfolio, blog, and membership flow.
Platform go-live polish
- Routed every PORTFOLIO link to
rootdrifter.io/portfolio/(nav, hero, footer, homepage
strip cards, error page, subscribe, about page) — previously pointed at the now-redirecting hub, causing an extra redirect hop.
- Removed the pre-launch "platform status" banner and the placeholder text from the public
homepage; the Active-work board now reads "Live".
- Removed the unused
portfolio_urlcustom setting (the portfolio is now internal).
SEO & social
- Replaced Ghost's default site description ("Thoughts, stories and ideas.") with a proper
SEO/social description; set og/twitter title, description, and image.
- Added a branded 1200×630 social card; removed Ghost's stock cover image and the default
@ghost social handles. Brand accent colour set to #00e5ff.
Content
- Restored the body content for all 12 blog posts (the production migration had carried
titles/excerpts but not bodies); the 3 published posts remain teaser-gated.
- Rewrote the Contact page (was empty) with direct
[email protected]+ GitHub; made the
About page's project list clickable to the internal portfolio pages.
- Removed Ghost's default "Coming soon" placeholder post.
Theme features
- Dark/light theme toggle — dark remains the default; light mode is opt-in via a nav
control, persisted in localStorage, applied before first paint (no flash), with a theme-aware hero rain canvas. Token-based (html.light), so every component adapts.
- Per-page
<title>, SEO/OG/Twitter meta via{{ghost_head}}, JSON-LD Person. - Six self-mounting interactive components (ironveil checklist, nullbyte isolation matrix,
spectre attack timeline, oracle accuracy/F1 chart, mirage causal stepper, gauntlet radar).
- Teaser gate for pending-review posts; membership/subscribe flow; code-copy buttons; TOC;
reading-progress bar; reduced-motion, print, and accessibility (skip link, ARIA) support.
Design system
- Canonical structural tokens; Share Tech Mono + Barlow; scanline overlay; per-project
accent palettes.