# OINK 1.5.1 — Duo View repairs and publishing correctness

> Stabilize Duo View, correct RSS and Print output, and harden navigation, validation, search, and accessibility after the 1.5.0 review.

---

LLMS index: [llms.txt](/llms.txt)

---

OINK 1.5.1 is a maintenance release following 1.5.0. It publishes the review
repairs accumulated after the bilingual reader shipped: the reader is now
called **Duo View**, its loading and sync states are clearer, and static output
keeps its format boundaries. The release also tightens navigation identity,
safe fallbacks, search ranking, accessibility, and localization across the
theme. Existing `params.ui.compare` and `compare_translations` settings remain
valid, and no content migration is required.

**v1\.5\.1 · 2026-11-06**
- [View release](https://github.com/pgsty/oink/releases/tag/v1.5.1)
- [Source · tar\.gz](https://github.com/pgsty/oink/archive/refs/tags/v1.5.1.tar.gz)
- [Source · zip](https://github.com/pgsty/oink/archive/refs/tags/v1.5.1.zip)
- [pgsty\/oink](https://github.com/pgsty/oink)

## Duo View {#duo-view}

The two-pane translation reader now uses the name **Duo View** in English and
the corresponding localized name in all 32 interface catalogs. The page entry,
Command Palette action, title, keyboard help, and status messages use the same
terminology; the `params.ui.compare` setting and `compare_translations` action
ID do not change. With keyboard navigation enabled, B toggles the
reader from the page and from either pane.

The reader treats an iframe's initial `about:blank` load as pending, then
shows a localized Retry action and a direct link when a document is still blank
after 15 seconds. A pane becomes readable after its article is parsed, so slow
images do not discard an otherwise usable page. Fragment links reveal hidden
tab panels, and the reader remeasures after OINK tab changes. Blog archive pages
after the first and translations that publish no HTML are no longer offered as
targets.

Sync Scroll is now a labelled switch. Its orange note distinguishes a partial
heading match from overall-progress synchronization and appears only when the
headings actually differ. Continuous trackpad scrolling keeps the follower in
step, while discrete jumps still ease when motion is allowed. The last target
language, sync setting, visible pane, and both reading positions survive reload
and history restoration. Escape closes the reader from a closed language menu
and restores the focus that opened it.

## Publishing and output correctness {#publishing}

RSS rendering keeps its page summaries in RSS format state, sorts entries before
applying the feed limit, omits undated `pubDate` values, and emits static
component HTML without browser controls or raw Markdown. Blog archive
pagination and `prev`/`next` links apply only to HTML, so Print produces one
complete aggregate instead of repeating the archive for every page.

Nested shortcode and Markdown components now namespace generated IDs with their
full ancestry, while shared URL rules reject unsafe Landing links. Navigation
JSON and section indexes remain stable across language and deployment prefixes;
version links no longer repeat the current deployment directory. Markdown,
LLMS, Print, RSS, forced-colors navigation, RTL typography, and print links keep
their static and accessibility contracts.

## Authoring and validation {#authoring-validation}

Ordinary builds remain usable for positional shortcode arguments, invalid Book
numbers, missing manual-link references, and malformed Landing records. Each
case warns and uses its documented safe fallback. Search now ranks a repeated
term in its strongest field above a passing mention in that same field, while
respecting field tiers; technical identifiers such as `top_k` keep their useful
ranking. Page descriptions are read through `.Description`, avoiding the
deprecated `.Params.description` path in newer Hugo releases.

The release was checked with the fixed Hugo Extended 0.168.0 and Go 1.27.3
toolchain: 49 theme checks, 67 documentation checks, and 519 browser checks
passed, including the eight-language comparison coverage and the reproduced
RSS, Print, and stalled-pane regressions.

## Upgrade {#upgrade}

Pin the published module at `v1.5.1` and keep Hugo's built-in LibSass compiler:

```sh
hugo mod get github.com/pgsty/oink@v1.5.1
hugo mod tidy
hugo --environment production --minify --printPathWarnings
```

Commit the resulting `go.mod` and `go.sum`. Existing Duo View configuration
continues to work. Review the [upgrade guide](/docs/admin/upgrade/) when
upgrading a site that uses a vendored theme copy or a Git submodule. Keep the
upstream LibSass deprecation warning visible, and do not enable
`--panicOnWarning` or `HUGO_PANICONWARNING`.

---

Backlinks:

- [Releases](/blog/release/)
- [Docs](/docs/)
- [Introduction](/docs/about/)
- [Contributing](/docs/about/contributing/)
- [Upgrade](/docs/admin/upgrade/)
