<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Decisions on Corium</title><link>https://corium-os.github.io/Corium/docs/decisions/</link><description>Recent content in Decisions on Corium</description><generator>Hugo</generator><language>en-US</language><copyright>Corium contributors, MIT licensed</copyright><atom:link href="https://corium-os.github.io/Corium/docs/decisions/index.xml" rel="self" type="application/rss+xml"/><item><title>ADR 1 — Base image</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0001-base-image/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0001-base-image/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0001-base-image.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;Corium needs an immutable base in the CoreOS/OSTree lineage. Its configuration&#10;surface is cloud-init.&lt;/p&gt;</description></item><item><title>ADR 2 — Root filesystem</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0002-root-filesystem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0002-root-filesystem/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0002-root-filesystem.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;fedora-bootc&lt;/code&gt; ships an empty &lt;code&gt;/usr/lib/bootc/install/&lt;/code&gt;, so it does not set the&#10;type of the root filesystem. Every tool that installs the image needs this&#10;type. Without it, &lt;code&gt;bootc-image-builder&lt;/code&gt; fails with&#10;&lt;code&gt;missing required info: DefaultRootFs&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>ADR 3 — Software RAID scope</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0003-software-raid-scope/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0003-software-raid-scope/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0003-software-raid-scope.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://github.com/Corium-OS/Corium/issues/5" rel="external"&gt;Issue #5&lt;/a&gt; asked for a way to&#10;declare a software RAID array from the &lt;code&gt;corium:&lt;/code&gt; block. It added an explicit&#10;condition: add the feature only if it is better than a plain cloud-init disk&#10;setup.&lt;/p&gt;</description></item><item><title>ADR 4 — Management API</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0004-management-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0004-management-api/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0004-management-api.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://github.com/Corium-OS/Corium/issues/2" rel="external"&gt;Issue #2&lt;/a&gt; asks for an API to&#10;manage the operating system. The discussion on it agreed quickly on the two&#10;features to build first: reading the state of a node and driving its upgrade.&#10;It also agreed quickly on the two questions that decide the design. What is&#10;such an API allowed to do? How does a node learn which operator to obey?&lt;/p&gt;</description></item><item><title>ADR 5 — SSH access over the API</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0005-ssh-access-over-the-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0005-ssh-access-over-the-api/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0005-ssh-access-over-the-api.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;ADR 4 made the management API shell-less on purpose. The API reads the state&#10;of a node, drives its upgrade, and moves it through its lifecycle. It gives no&#10;shell, for two reasons. First, a shell over an immutable system grants root&#10;access to change things that will not persist. Second, to the question &amp;ldquo;how&#10;does a node learn whom to obey&amp;rdquo;, a pairing code over the console is a better&#10;answer than a key baked into cloud-init. The API replaced SSH, and ADR 4 said&#10;so.&lt;/p&gt;</description></item><item><title>ADR 6 — Host WireGuard overlay</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0006-host-wireguard-overlay/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0006-host-wireguard-overlay/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0006-host-wireguard-overlay.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://github.com/Corium-OS/Corium/issues/7" rel="external"&gt;Issue #7&lt;/a&gt; asks for a way to&#10;declare a WireGuard interface on the node itself, from the &lt;code&gt;corium:&lt;/code&gt; block. With&#10;it, nodes across sites or providers can form one cluster over an encrypted&#10;overlay (a private network that runs on top of the public one). The issue&#10;carries the same caveat that &#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://github.com/Corium-OS/Corium/issues/5" rel="external"&gt;issue #5&lt;/a&gt;&#10;carried for RAID: add the feature only if it is better than a plain cloud-init&#10;WireGuard setup. Decision 9 in &lt;code&gt;AGENTS.md&lt;/code&gt; is the standing rule behind that&#10;caveat. Every abstraction has an escape hatch, and &lt;code&gt;write_files&lt;/code&gt; plus &lt;code&gt;runcmd&lt;/code&gt;&#10;are always available. So the field must justify itself. The escape hatch does&#10;not have to justify its absence.&lt;/p&gt;</description></item><item><title>ADR 7 — ZFS on data disks</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0007-zfs-data-disks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0007-zfs-data-disks/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0007-zfs-data-disks.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;Some nodes keep local state on their data disks, for example a&#10;persistent-volume provisioner, an image or build cache, or scratch space.&#10;These nodes want what ZFS gives and &lt;code&gt;raid[]&lt;/code&gt; does not: end-to-end checksums,&#10;transparent compression, and snapshots.&#10;&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://github.com/Corium-OS/Corium/issues" rel="external"&gt;Issue&lt;/a&gt; asked whether Corium could&#10;put ZFS on those data disks.&lt;/p&gt;</description></item><item><title>ADR 8 — Day-two reconcile</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0008-day-two-reconcile/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0008-day-two-reconcile/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0008-day-two-reconcile.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;Corium reads a node&amp;rsquo;s configuration once, at first boot, and then stops. Decision&#10;11 makes this a deliberate position and not an accident: Corium provisions nodes&#10;and does not manage them. ADR 4 states the rule under it: a node answers the&#10;question of its configuration &lt;em&gt;before&lt;/em&gt; it is a node. &lt;code&gt;cctl apply&lt;/code&gt;, and the&#10;&lt;code&gt;POST /v1/config&lt;/code&gt; behind it, writes &lt;code&gt;/etc/corium/config.yaml&lt;/code&gt; (first in the source&#10;chain, decision 6). As soon as a node has bootstrapped, it refuses the request:&lt;/p&gt;</description></item><item><title>ADR 9 — Artefact builder</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0009-image-builder/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0009-image-builder/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0009-image-builder.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: proposed&lt;/p&gt;&#10;&lt;h2 id="context"&gt;Context&lt;/h2&gt;&#10;&lt;p&gt;&#13;&#10;&#13;&#10;&lt;a class="link link--text" href="https://github.com/Corium-OS/Corium/issues/11" rel="external"&gt;Issue #11&lt;/a&gt; points out two facts.&#10;Every installable artefact that Corium produces (the qcow2, the raw disk and the&#10;installer ISO) goes through &lt;code&gt;bootc-image-builder&lt;/code&gt;. And upstream archived that&#10;project on 2026-06-18. These are the facts, checked against the registries and the&#10;upstream source, not against the announcement:&lt;/p&gt;</description></item><item><title>ADR 10 — Kubernetes version axis</title><link>https://corium-os.github.io/Corium/docs/decisions/adr-0010-kubernetes-version-axis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://corium-os.github.io/Corium/docs/decisions/adr-0010-kubernetes-version-axis/</guid><description>&lt;!-- Generated by website/sync-docs.py from docs/adr/0010-kubernetes-version-axis.md. Edit that file, not this one. --&gt;&#10;&lt;p&gt;Status: accepted&lt;/p&gt;&#10;&lt;p&gt;Amends decisions 3, 4 and 5, and adds decision 16.&lt;/p&gt;</description></item></channel></rss>