Repository navigation
docs(adr): ADR-0040 — smaug runs TrueNAS, and the media stack stays in the repo - #473
Merged
Merged
Conversation
…n the repo ADR-0016 decided "Ubuntu Server and one Docker Compose stack ... not an appliance OS", and rejected TrueNAS and Unraid by name. The operator was only ever going to install TrueNAS, and nobody found out until 2026-09-15 — the day the TS150 was unboxed and the next step was said aloud. This is the second divergence between the record and the operator's intent on this one machine, four days after ADR-0038 caught the naming, and it was found the same way: by someone reading a plan out loud. Neither was catchable by CI, because both are disagreements about intent and every document involved was internally consistent. That is worth writing down in a repository whose ADR-0026 rests on documents being checkable against the truth. Unlike ADR-0038 this is not nominal. ADR-0016 considered this option, named it and declined it, so the ADR prices what the reversal costs rather than reversing it quietly. Three-quarters of the objection has expired: TrueNAS replaced k3s with Docker in 24.10 and runs user-supplied compose, so "no compose file, no pinned digests, no make validate" no longer follows. The fourth clause stands — the pool, dataset, share and snapshot layout is clicks, is not in git, and make validate cannot see it. Decision 4 bounds that by requiring it be written into a runbook as it is built, rather than waived. The media stack stays on smaug and stays in this repository, run as a compose file under TrueNAS's app runtime rather than as catalogue apps. The reasons are mechanical, not aesthetic: Dependabot edits compose.yaml and nothing else and is live here weekly; check_image_pins.py enforces the tag+digest pair that stops a moved tag changing what deploys; and restore-the-stack.md with backup-volumes.sh already assume compose volumes, so catalogue apps would need a second restore path nobody has written. ADR-0004 is NOT amended and smaug is NOT an exception to it. That ADR decides repository layout — one directory per stack — and says nothing about what launches the stack. An earlier draft of decision 3 called smaug "ADR-0004's documented exception"; it is not one, and saying so would have invented a precedent for exempting hosts from a layout rule they satisfy. What would reopen decision 2 is named, with a deadline: Quick Sync passthrough into a container on the installed release. #138 wanted this box for the TS150's HD P630 and the roadmap declines Plex Pass on the strength of it. Checked before the library exists, because moving a populated library is a weekend. Two consequences are deliberately left open rather than improvised here: #256's scrape path now has a fork in it, since TrueNAS ships its own metrics endpoint where the issue specifies node_exporter; and ADR-0027's PBS sync job targets a PBS instance, which on TrueNAS means PBS in a VM or a change to an NFS/SMB datastore. Both belong to their own trackers on the day they are built. ADR-0016 keeps its text and gains a note, per ADR-0001 and ADR-0038's fourth decision. Its existing ADR-0038 banner is folded into the same blockquote rather than a second one — two adjacent blockquotes are MD028 — with all of its wording preserved. roadmap.md and hardware.md said Ubuntu in three places and now do not. README's ADR count goes 39 to 40, which check_counts required rather than the author remembering: it failed the run until it was corrected. make validate passes; check_docs is green at 10 assertions. Refs #413 #138 #256 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
smaugruns TrueNAS, not Ubuntu Server. ADR-0016 decided the opposite andrejected TrueNAS by name; the operator was only ever going to install TrueNAS,
and it surfaced on 2026-09-15 when the next step was said out loud.
This is the second divergence between the record and the operator's intent
on this one machine — four days after ADR-0038 caught the
zion/trinitynaming, found the same way. Neither was catchable by CI: both are disagreements
about intent, and every document involved was internally consistent.
Unlike ADR-0038, this one is not nominal. ADR-0016 weighed this option and
declined it, so ADR-0040 prices the reversal instead of performing it quietly.
What expired, and what didn't
ADR-0016's case was four losses: no compose file, no pinned digests, no
make validate, configuration that exists only as clicks."Electric Eel" and runs user-supplied compose.
schedules are clicks, are not in git, and CI cannot see them. Decision 4
bounds that — it gets written into a runbook as it is built, rather than
waived.
The media stack stays here
On
smaug, as a compose file under TrueNAS's app runtime — not catalogue apps.Mechanical reasons, not taste:
compose.yamland nothing else, and merges bumps weeklyin this repo.
check_image_pins.pyenforces the tag +sha256:pair that stops a movedtag changing what deploys.
restore-the-stack.mdandbackup-volumes.shalready assume composevolumes. Catalogue apps would need a second restore path nobody has written.
ADR-0004 is not amended and
smaugis not an exception to it. It decidesrepository layout — one directory per stack — and says nothing about what
launches the stack. An earlier draft called
smaug"ADR-0004's documentedexception"; it isn't, and saying so would have invented a precedent for
exempting hosts from a rule they satisfy.
The reopen condition, with a deadline
Quick Sync passthrough into a container on the installed release. #138
wanted this box for the TS150's HD P630, and the roadmap declines Plex Pass on
the strength of it. If the iGPU doesn't reach a container cleanly, decision 2
reopens. Checked before the library exists — moving a populated library is a
weekend, moving an empty stack is an afternoon.
Deliberately left open
where the issue specifies
node_exporteron99 → 40:9100.VM/container, or a change to an NFS/SMB datastore.
Both belong to their own trackers on the day they're built, not to a guess here.
Mechanics
ADR-0016 keeps its text and gains a note, per ADR-0001 and ADR-0038's fourth
decision. Its existing ADR-0038 banner is folded into the same blockquote —
two adjacent blockquotes are MD028 — with every word preserved.
roadmap.mdand
hardware.mdsaid Ubuntu in three places and no longer do.README's ADR count goes 39 → 40, which
check_countsrequired rather thanthe author remembering — it failed the run until corrected. That guard landed
in #472 yesterday and has now caught its first real drift.
make validatepasses;check_docsgreen at 10 assertions.Refs #413 #138 #256
🤖 Generated with Claude Code