Skip to content

feat(templates): migrate to Zola 0.23 and Tera 2 - #181

Merged
forkwright merged 7 commits into
mainfrom
feat/179-zola-0.23-migration
Aug 20, 2026
Merged

feat(templates): migrate to Zola 0.23 and Tera 2#181
forkwright merged 7 commits into
mainfrom
feat/179-zola-0.23-migration

Conversation

@forkwright

@forkwright forkwright commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Summary

  • pin Typikon and both generated consumer gates to the official Zola 0.23.3 Linux artifact;
  • migrate the theme from removed Tera 1 macro/filter syntax to collision-resistant typikon.* Tera 2 components;
  • preserve Zola's engine-owned feed page set, including include_in_feeds, ordering, and limit behavior;
  • add static contracts, a real multilingual renderer fixture, and durable bounded failure diagnostics.

This is the separately gated renderer prerequisite for #179. It intentionally does not implement or close the scoped-root-feed issue, and it changes no consumer repository.

Why this is separate

Zola 0.22.1 does not expose the include_in_feeds page field required by #179 acceptance item 4. Zola 0.23 does, but also moves rendering to Tera 2. A version-only bump would break Typikon's macro imports, namespace calls, removed collection/string filters, positional test arguments, and consumer shortcodes.

Compatibility contract

  • theme.toml requires and bin/typikon-defaults.sh defaults to Zola 0.23.3. Typikon's gate pins that version directly, and both consumer gate templates receive it when rendered. Those three download surfaces pin SHA-256 f07c92607e5745268b576bd325ceef3a582aada253bb64db8d92a8a85303d958.
  • Components use a typikon.* namespace because Tera 2 registers components globally.
  • Components receive only declared arguments; breadcrumb callers pass both config and the current language explicitly.
  • Consumer template overrides and removed Zola shortcodes must migrate before a consumer raises its pin.

Exact-head proof

GitHub Gate Attestation run 32387018419 completed successfully for head 7545041b93576b0abca62d3d6a4890abda3b14d3 and synthetic merge commit 48120c02548432a31815ad86cf5401358ecee770 / tree 65bcba0d695a0d63f127c405abf61e37bfb0be56.

The hosted gate proved:

  • Zola 0.23.3 parses and renders both consumer fixtures;
  • the multilingual Tera 2 fixture preserves author fallbacks, translated breadcrumbs, and ordered sameAs values;
  • both sample sites pass CSP enforcement;
  • hostile FAQ text remains visible while JSON-LD escapes script termination and round-trips to the exact question and answer;
  • failed-stage details survive CI capture through bounded, JSON-framed replay;
  • Atom outputs are well-formed and begin at the XML declaration;
  • all remaining full-gate checks pass.

Kanon MCP lint reports 0 violations with 6 existing suppressions. git diff --check, the static Tera contract, Python AST checks, schema validation, and fixture discovery also pass.

No Zola build was run locally; the exact GitHub-hosted build is the renderer authority. Runs 32322479432, 32323223834, 32378738973, 32380347712, 32383486818, and 32385620561 successively exposed null updated, Jiff-incompatible formatting, XML declaration displacement, an unreplayed CSP failure log, the FAQ JSON-LD breakout, and a stale entity-spelling assertion; each now has a static or rendered regression.

Next boundary

After this prerequisite lands, #179 still needs its own scoped-root-feed implementation and consumer migrations. Those changes are outside this PR.

Refs #179

forkwright added 7 commits August 19, 2026 20:42
Move the shared substrate to the pinned Zola 0.23.3 renderer, migrate the complete template dialect to collision-resistant Tera 2 components, and add static plus GitHub-rendered compatibility contracts.

This is the separately gated prerequisite for scoped root-feed semantics; it does not close the feed issue.

Refs #179
@forkwright
forkwright marked this pull request as ready for review August 20, 2026 15:59
@forkwright
forkwright merged commit 02e4b09 into main Aug 20, 2026
4 checks passed
@forkwright
forkwright deleted the feat/179-zola-0.23-migration branch August 20, 2026 15:59
forkwright pushed a commit that referenced this pull request Sep 3, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.6.0](v0.5.0...v0.6.0)
(2026-09-03)


### Features

* bind feed, sale, heading, and workflow contracts
([#185](#185))
([a6600b3](a6600b3))
* **ci:** derive every gate tool version and checksum from one lock
([#194](#194))
([a7285e2](a7285e2))
* **ci:** enforce the repository-only agent corpus at the rendered
boundary ([#193](#193))
([803f998](803f998))
* **templates:** migrate to Zola 0.23 and Tera 2
([#181](#181))
([02e4b09](02e4b09))


### Bug Fixes

* **ci:** bind consumer validator Python runtime
([#190](#190))
([abe82f1](abe82f1))
* **ci:** give the consumer receipt the history it reads
([#192](#192))
([ba30d9d](ba30d9d))
* **ci:** name the sha's real version on every action pin
([#206](#206))
([d1d9b5e](d1d9b5e))
* **ci:** scope the release-PR healer to typikon's real required
contexts ([#207](#207))
([334a9a3](334a9a3))
* **release:** separate candidate proof from publication
([#189](#189))
([73df3f2](73df3f2)),
closes [#58](#58)
[#70](#70)
[#188](#188)
* **schema:** refuse an og:image format no link-preview consumer renders
([#196](#196))
([373849b](373849b))
* **template:** stop recommending an apex redirect Cloudflare ignores
([#191](#191))
([247a869](247a869))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
forkwright pushed a commit that referenced this pull request Sep 3, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.6.0](v0.5.0...v0.6.0)
(2026-09-03)


### Features

* bind feed, sale, heading, and workflow contracts
([#185](#185))
([a6600b3](a6600b3))
* **ci:** derive every gate tool version and checksum from one lock
([#194](#194))
([a7285e2](a7285e2))
* **ci:** enforce the repository-only agent corpus at the rendered
boundary ([#193](#193))
([803f998](803f998))
* **templates:** migrate to Zola 0.23 and Tera 2
([#181](#181))
([02e4b09](02e4b09))


### Bug Fixes

* **ci:** bind consumer validator Python runtime
([#190](#190))
([abe82f1](abe82f1))
* **ci:** give the consumer receipt the history it reads
([#192](#192))
([ba30d9d](ba30d9d))
* **ci:** name the sha's real version on every action pin
([#206](#206))
([d1d9b5e](d1d9b5e))
* **ci:** scope the release-PR healer to typikon's real required
contexts ([#207](#207))
([334a9a3](334a9a3))
* **release:** separate candidate proof from publication
([#189](#189))
([73df3f2](73df3f2)),
closes [#58](#58)
[#70](#70)
[#188](#188)
* **release:** stop demanding SHA-256 from honestly unpinned inventory
([2939dff](2939dff))
* **release:** stop demanding SHA-256 from honestly unpinned inventory
components ([#210](#210))
([2939dff](2939dff))
* **schema:** refuse an og:image format no link-preview consumer renders
([#196](#196))
([373849b](373849b))
* **template:** stop recommending an apex redirect Cloudflare ignores
([#191](#191))
([247a869](247a869))


### Reverts

* the 0.6.0 release commit
([#182](#182))
([5cbf93a](5cbf93a))
* the 0.6.0 release commit
([#182](#182))
([#211](#211))
([5cbf93a](5cbf93a))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: forkwright <noreply@forkwright.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant