Skip to content

docs(adr): ADR-0040 — smaug runs TrueNAS, and the media stack stays in the repo - #473

Merged
Gerrrt merged 1 commit into
mainfrom
gerrrt/truenas-on-smaug-supersede-0016
Sep 15, 2026
Merged

Gerrrt merged 1 commit into
mainfrom
gerrrt/truenas-on-smaug-supersede-0016

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 15, 2026

Copy link
Copy Markdown
Owner

smaug runs TrueNAS, not Ubuntu Server. ADR-0016 decided the opposite and
rejected 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/trinity
naming, 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.

  • The first three have expired. TrueNAS replaced k3s with Docker in 24.10
    "Electric Eel" and runs user-supplied compose.
  • The fourth stands. Pool geometry, datasets, shares and snapshot
    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:

  • Dependabot edits compose.yaml and nothing else, and merges bumps weekly
    in this repo.
  • check_image_pins.py enforces the tag + sha256: pair that stops a moved
    tag changing what deploys.
  • restore-the-stack.md and backup-volumes.sh already assume compose
    volumes.
    Catalogue apps would need a second restore path nobody has written.

ADR-0004 is not amended and smaug is not an exception to it. It decides
repository layout — one directory per stack — and says nothing about what
launches the stack. An earlier draft called smaug "ADR-0004's documented
exception"; 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

  • Add the scrape path for a host that pushes nothing #256's scrape path now has a fork. TrueNAS ships its own metrics endpoint
    where the issue specifies node_exporter on 99 → 40:9100.
  • ADR-0027's PBS sync job targets a PBS instance. On TrueNAS that's PBS in a
    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.md
and hardware.md said Ubuntu in three places and no longer do.

README's ADR count goes 39 → 40, which check_counts required rather than
the author remembering — it failed the run until corrected. That guard landed
in #472 yesterday and has now caught its first real drift.

make validate passes; check_docs green at 10 assertions.

Refs #413 #138 #256

🤖 Generated with Claude Code

…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>
@Gerrrt
Gerrrt merged commit c70713c into main Sep 15, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/truenas-on-smaug-supersede-0016 branch September 15, 2026 14:27
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