<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Design decisions on OINK</title><link>https://lxghost.github.io/docs/design/decisions/</link><description>Recent content in Design decisions on OINK</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 28 Aug 2026 00:08:16 +0800</lastBuildDate><atom:link href="https://lxghost.github.io/docs/design/decisions/index.xml" rel="self" type="application/rss+xml"/><item><title>Warnings and safe fallbacks</title><link>https://lxghost.github.io/docs/design/decisions/diagnostics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/design/decisions/diagnostics/</guid><description>&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Decision&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;OINK does not call Hugo&amp;rsquo;s &lt;code&gt;errorf&lt;/code&gt;. Invalid author or site input emits a&#10;warning and either uses a documented safe fallback or omits the invalid&#10;fragment. Release and deployment builds use &lt;code&gt;--panicOnWarning&lt;/code&gt;, so the same&#10;warning remains a hard publishing failure.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="context"&gt;Context&#10;&lt;/h2&gt;&#10;&lt;p&gt;Hugo builds the whole site as one transaction. An &lt;code&gt;errorf&lt;/code&gt; raised while one&#10;page is being edited makes every URL served by that rebuild return an error,&#10;including unrelated pages and the home page. The server process survives and&#10;recovers after the input is fixed, but collaborative preview is unavailable in&#10;the meantime.&lt;/p&gt;</description></item><item><title>Configuration model</title><link>https://lxghost.github.io/docs/design/decisions/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/design/decisions/configuration/</guid><description>&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Decision&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;OINK keeps Hugo&amp;rsquo;s native keys and useful Docsy-compatible keys in place,&#10;places theme presentation and behaviour under &lt;code&gt;params.ui.*&lt;/code&gt;, and exposes a&#10;matching top-level front-matter key for a page override. It does not add a&#10;&lt;code&gt;params.oink.*&lt;/code&gt; tree or a registry that shadows Hugo&amp;rsquo;s configuration model.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="context"&gt;Context&#10;&lt;/h2&gt;&#10;&lt;p&gt;OINK inherits a mature configuration surface and adds shells, content output,&#10;and local interaction. Earlier designs attempted to move every theme-owned key&#10;under a new namespace and resolve a complete configuration dictionary once per&#10;page. That produced a second language beside Hugo&amp;rsquo;s own keys, complicated&#10;section cascades, and made migration larger than the behaviour it was meant to&#10;control.&lt;/p&gt;</description></item><item><title>Markdown-first authoring</title><link>https://lxghost.github.io/docs/design/decisions/authoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/design/decisions/authoring/</guid><description>&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Decision&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;Prefer a native Markdown form when Goldmark can preserve the intended&#10;semantics. Keep a shortcode only when it provides a capability the native&#10;form cannot express. Add a content scenario by extending an existing shell&#10;and data model, not by creating a parallel rendering system.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="context"&gt;Context&#10;&lt;/h2&gt;&#10;&lt;p&gt;OINK serves short manuals, large references, release archives, landing pages,&#10;and books. A survey of eleven consumer sites covered more than five thousand&#10;Markdown files and exposed both extremes: pages with almost no theme syntax and&#10;pages assembled from many nested shortcodes and local layout overrides.&lt;/p&gt;</description></item><item><title>Generated configuration schema</title><link>https://lxghost.github.io/docs/design/decisions/config-schema/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lxghost.github.io/docs/design/decisions/config-schema/</guid><description>&lt;div class="td-callout td-callout--important" role="note"&gt;&#10; &lt;div class="td-callout__title"&gt;&lt;i class="td-callout__icon fa-solid fa-circle-exclamation" aria-hidden="true"&gt;&lt;/i&gt;&lt;span class="td-callout__label"&gt;Decision&lt;/span&gt;&lt;/div&gt;&#10; &lt;div class="td-callout__body"&gt;&#10;&lt;p&gt;The two JSON Schemas under &lt;code&gt;schema/&lt;/code&gt; are projected by&#10;&lt;code&gt;bin/generate-config-schema.py&lt;/code&gt; from the theme&amp;rsquo;s &lt;code&gt;hugo.yaml&lt;/code&gt; and the&#10;template read-point scan; hand edits cannot survive CI. The schema is a&#10;read-only projection of the existing authorities, never a third one.&lt;/p&gt;&#10; &lt;/div&gt;&#10;&lt;/div&gt;&lt;h2 id="context"&gt;Context&#10;&lt;/h2&gt;&#10;&lt;p&gt;The theme already has two configuration authorities: &lt;code&gt;hugo.yaml&lt;/code&gt;, which&#10;declares every default beside a comment explaining it, and&#10;&lt;code&gt;check-params.py&lt;/code&gt;, whose read-point scan knows every key the templates&#10;actually consume. Editors know neither, so authors type &lt;code&gt;params.ui.*&lt;/code&gt; keys&#10;and front matter from memory.&lt;/p&gt;</description></item></channel></rss>