v3.4.1 6 February 2026 Fix Feature

Bug Fixes, Governance Pages & Infrastructure Hardening

Bug Fixes

Features Page Layout Break

Unescaped curly braces { } in the Astro template were interpreted as JSX expression delimiters, causing all sections after Developer Shell to collapse into a narrow right column. Escaped 10 occurrences across the API-first JSON code block and dark mode CSS preview.

Insights Code Block Styling

Fenced code blocks in articles rendered with individual white chips per line instead of a unified dark terminal block. Added pre code override in Tailwind config and changed <style> to <style is:global> in the slug template for Astro <Content /> compatibility.

Service column was rendering outside the grid on a separate row due to a premature closing </div>. Also fixed a missing <li> wrapper on Insights link, removed a stray <li> in Developers column, and added Features to the Product column.

Governance Pages

Accessibility (/accessibility)

WCAG 2.1 AA accessibility statement covering both marketing site and application. Includes POUR principles, concrete practices (semantic HTML, keyboard navigation, ARIA, screen reader testing), honest known limitations (PDF tagging, Stripe embeds, SVG illustrations), EASS enforcement route, and annual review schedule.

Anti-Tax Evasion Policy (/anti-tax-evasion)

Criminal Finances Act 2017, Part 3 compliance. Covers SpeyTech’s zero-tolerance position, product-level controls (double-entry enforcement, immutable records, integer arithmetic, API audit trail), all six HMRC prevention procedure principles, and a confidential reporting channel with non-retaliation commitment.

Infrastructure

RSS Feed (/rss.xml)

Production RSS feed using @astrojs/rss. Pulls Insights articles at build time, sorted newest first. Includes title, description, pubDate, categories, author, and custom metadata (language, copyright, lastBuildDate). Replaced old placeholder page.

Dynamic Sitemap (/sitemap)

Replaced static placeholder with a dynamic sitemap that pulls Insights articles from getCollection('insights') at build time. Three-column responsive grid with descriptions. New articles appear automatically on rebuild.

Deploy Script

Replaced cp -r dist/* with rsync -av --delete so the live site mirrors the build output exactly. Stale files (like the old /rss/ directory) are removed automatically on each deploy.

Line Counter

Shared count_lines function with consistent file extensions across all projects. Added missing types (.tsx, .jsx, .md, .mdx), safe xargs handling, and node_modules exclusion. Total: 59,803 lines.