Changelog

Changes to the site and its supporting automation, newest first.

Change

Keep recently published recovery links readable on narrow 404 pages.

  • #ui
  • #responsive
  • #accessibility

404 recovery links stay readable on mobile

  • The English and Portuguese 404 pages now let the recent-content recovery block reflow vertically on narrow viewports instead of compressing long article titles into tiny horizontal columns.
  • Search, alternate navigation and the existing desktop composition remain unchanged.

Change

Automated workflows now open a pull request instead of pushing straight to main.

  • #ci
  • #automation
  • #main

Automação abre PR em vez de empurrar na main

  • A branch main passou a exigir que o head esteja atualizado antes do merge, e essa regra também vale para push: o git push origin HEAD:main dos workflows agendados seria recusado.
  • suno-daily-sync.yml e audiobook-media.yml passam a commitar numa branch automation/*, abrir PR e deixar em auto-merge; o PR cai sozinho quando o check passa.
  • O retry com rebase sai dos dois. Ele existia para lidar com a main andando durante o push, e a branch de automação é recriada a cada execução — nunca fica atrás.

Change

Global rank link title in perspective rankings now names the post.

  • #a11y
  • #ranking

Global rank tooltip identifies which post it describes

  • src/pages/ranking/perspectives/[id].astro: the “global #” link in the per-perspective ranking table now sets title to the post’s title, instead of the identical "Global rank" tooltip on every row.

Change

Localize structural chrome of the battle detail page for PT-only duels.

  • #ux
  • #i18n
  • #ranking

Battle detail page follows the duel’s language

  • src/pages/ranking/battles/[id].astro no longer hardcodes lang="en", English breadcrumbs, and en-US date formatting — it now resolves the page language from both duel sides, same pattern already used by posts/[key].astro.
  • Applies to breadcrumbs, headings, aria-labels, and Winner/Challenger labels; technical badges (Season N, confidence, content:/critique: chips) stay untranslated per existing convention.

Change

Capture reproducible visual evidence in CI and make the published audiobooks catalog discoverable from global navigation.

  • #ci
  • #visual-regression
  • #navigation
  • #audiobooks
  • #cobogo

Audiobooks navigation with reproducible evidence

  • Runs the existing screenshot harness against an Astro preview in pull-request CI.
  • Uploads the captured routes as workflow artifacts for before/after visual review.
  • Adds Audiobooks/Audiolivros to the existing secondary Header and Footer navigation, linking to /audiobooks/ without promoting it to a primary CTA.
  • Keeps claims scoped to the published catalog surface; it does not imply that a disabled podcast/feed is active.

Change

Record a Hrönir evaluation round of 5 matches and clear a 12-PR merge backlog.

  • #hronir
  • #ranking

Hrönir evaluation round and PR backlog cleared

  • Adds 5 new Hrönir match rate files under .routines/hronir/rates/ (RFC 0016 one-shot API, --objective coverage), covering asterisk-protects, its-raining-truth, delphi-imperatives, agent-no-verbs, music-sentido-e-referencia, music-o-sonhador-e-o-fogo, music-spring-loading, music-menino-que-voce-foi, events-welcome, and an untitled meditation track.
  • Squash-merges a backlog of 12 open Hrönir/UX pull requests that had accumulated since 2026-08-19 due to a stale CLAUDE.md reading of the repository’s merge policy.

Change

Fix duplicate aria-labels on battle cards and changelog release tags.

  • #a11y
  • #ranking
  • #changelog

Screen reader labels identify which item they describe

  • src/pages/ranking/battles/index.astro and battles/page/[n].astro: the “rates not available” placeholder on a battle card without tension data now includes the two posts in its aria-label, instead of repeating the same generic label for every card that lacks rates.
  • src/pages/changelog/index.astro: the tag list under each changelog entry now labels itself with that entry’s title (Tags for <label>) instead of the identical "Change tags" on every entry.

Change

Add Repo Factory, a GitHub-powered industrial map that turns public repository work into issues, assembly lines, machine runs, cross-repo belts, and finished products.

  • #games
  • #github
  • #visualization
  • #data

Repo Factory maps the public GitHub production floor

  • Adds /games/repo-factory/, an interactive factory-floor view of public repositories, issues, pull requests, Actions runs, merges, releases, and explicit cross-repository references.
  • Generates the production snapshot during token-enabled builds with gh api, while keeping a safe committed fallback for local and token-less checks.
  • Excludes private repositories by construction and never sends a GitHub token to the browser.
  • Adds the new surface to /games/ and to the reproducible desktop/mobile visual-capture set.

Change

Add VoxCPM2 as an audiobook TTS backend and normalize generated segment loudness before assembly.

  • #audiobook
  • #tts
  • #voxcpm2
  • #audio

VoxCPM2 joins the audiobook backends

  • Adds VoxCPM2 behind the existing provider-neutral TTS plan and worker contract.
  • Normalizes generated segment RMS toward -20 dBFS while respecting a -3 dBFS peak ceiling, recording the applied gain in output metadata.
  • Keeps loudness normalization in the shared audio-writing path because gain variation is a cross-backend TTS concern rather than a VoxCPM2-specific behavior.

Change

Require an OKF change card for every pull request that changes the repository.

  • #ci
  • #okf
  • #changelog

Change cards become the unit of change history

  • Adds merge-relative CI enforcement: a pull request that changes source, content, docs, workflows, data, or other repository files must add at least one new card under changelog/changes/.
  • Validates change cards as OKF knowledge with the same okf-parser pattern used by Pink.
  • Keeps the historical versioned changelog entry as legacy history instead of requiring artificial version bumps for a continuously deployed site.
  • Updates /changelog/ to render independent change cards alongside the legacy release entry, newest first.

Change

Migrate Suno playback to official embeds and remove dependence on direct audio URLs.

  • #suno
  • #playback
  • #embed

Suno playback uses official embeds

  • Replaces direct audio_url playback in the global music player with Suno’s official embed.
  • Preserves site-level selection, previous/next navigation, favorites, history, and links to Suno while leaving cross-origin playback controls to the official player.
  • Keeps the fallback Suno link outside the iframe so Astro type checking remains valid.

Legacy release

v0.1.0

Starts changelog/versioning tracking; RFC 0017 retires the `version` duel and its public permalink surface, keeping `work` duels as the operational core.

  • #changelog
  • #rfc-0017
  • #hronir

What changed

  • Changelog and version tracking start here. The repository now keeps one entry per version under changelog/<version>.md, written as OKF markdown (type is the required field, here Changelog Entry), with package.json’s version as the single source of truth. No prior history is reconstructed — tracking starts with this release.
  • RFC 0017 — end of the version duel. Hrönir retires the version duel (competing candidates for the same post’s public URL) while keeping the work duel (comparing different essays) as the system’s operational core. Version lineage becomes git’s job exclusively — a work (key) and its current language representations are the only identity axes left.
  • Migration phases 0–1: 151 of 153 legacy directories (<slug>/v-<timestamp>.mdx) were flattened to a single file (<slug>.mdx, or <slug>/index.mdx when local media is attached), with an auditable manifest (src/generated/migration-0017-survivors.jsonselectedFrom/selectedUuid/selectedSha256 per slug) and a preserved, idempotent migration script (scripts/oneoff/2026-07-15-rfc-0017-fase1-flatten.mjs). Two slugs (delegando-para-agentes, the-art-of-delegation) are deliberately left out — an editorial decision about which draft is canonical is still pending, rather than a mechanical blocker.
  • The public version-duel surface was removed: the blogVersions collection, the /blog/<slug>/v/<uuid>/ routes (EN/PT), the /ranking/version-trials/ and /ranking/versions/<key>/ pages, the “Edit history” section on a work’s dossier, and version-duel rendering on /ranking/battles/<id>/. This was pulled forward from RFC 0017’s phase 3 so the permalink break would be deliberate and atomic instead of a partial degradation across phases (build page count: 4514 → 2964).
  • hronir:doctor now validates a rate file’s key against live works, replacing the obsolete version-path/UUID tolerance check. It found no new issues, only pre-existing stars-v1 data debt from an abandoned experimental phase, recorded as a non-blocking warning.

View PR #1203 for the full diff.