Skip to content

docs: the TS150, the ProDesk and smaug's boot SSD are in hand - #472

Merged
Gerrrt merged 2 commits into
mainfrom
gerrrt/hardware-delivery-ts150-prodesk-nas-552a4f
Sep 15, 2026
Merged

Gerrrt merged 2 commits into
mainfrom
gerrrt/hardware-delivery-ts150-prodesk-nas-552a4f

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 15, 2026 •

Copy link
Copy Markdown
Owner

Three machines and a mounting kit were delivered on 2026-09-15: the Lenovo
ThinkServer TS150 that is smaug (#413), the HP ProDesk 600 G4 Micro that is
trinity (#404), the Intel DC S3520 240 GB that boots the NAS, and the 5.25"
bracket and double-sided tape that carry it in the optical bay.

docs/hardware.md is the estate's only inventory and it said all four were in
a delivery van. This corrects that, and nothing else.

What did not land

Still paid for and still moving, and recorded that way: the two Exos X20 18 TB
drives for smaug's mirror, the I226 card, the pfSense installer stick, the
CRS326, the A1437 cell for prometheus, and the two SM863a SSDs for Saruman.

So neither build is unblocked. #413 waits on the two Exos drives; the #404
rehearsal waits on the I226 card and the installer stick — and, as of this
commit, no longer on the box.

What this deliberately does not do

  • No row enters the Rack or Compute tables. Each bullet names its own
    promotion trigger and none has fired. network.md and architecture.md are
    untouched for the same reason — and check_compute_table would have failed a
    premature row rather than merely tolerated it.
  • No row moves on the buy table. Arriving is not buying, so it stays at two
    rows and README stays at "two items now, one later".
  • No ADR is edited. ADR-0038 decides a record is superseded rather than
    rewritten, and an arrival amends no decision — including ADR-0038's own line
    saying the TS150 is in transit.
  • No measurement is recorded. Every box is unopened. Each bullet gains a
    Checked on arrival, not assumed list instead, in the shape the CRS326 bullet
    already used: serials, CPU and RAM off POST rather than off a listing,
    smartctl -a on the boot disk before the install, and how many of the TS150's
    four bays came with a caddy. No serial or part number is invented here.

The one thing worth doing today

If trinity's 512 GB SSD is a 2.5" drive rather than M.2, its carrier and the
I226 card contend for the same slot.
That was an unknown about a box in a van
and is now an unanswered question about a box in the room — and the card has not
shipped. Opening the ProDesk now is the difference between a return and a part
that fits nothing.

Two pre-existing errors fixed in passing

  • roadmap.md's Plan and build the NAS on VLAN 40 #95 paragraph said the boot disk was bought "leaving only a
    bracket to carry it in the optical bay". The bracket was bought 2026-09-11,
    which the same section says fourteen lines in.
  • The PBS bullet had the TS150 in transit.

Verification

make validate passes, make check-docs reports 10 assertions green, and all
six linters pass. The first local validate run tripped the known promtool
flake under a busy docker daemon and passed on the rerun.

Refs #413 #404

🤖 Generated with Claude Code


Second commit: the assertion count was stale (8bd33bf)

Unrelated to the delivery, found while verifying it, and kept here rather than
split because it is four lines of plumbing and a sentence.

README said "Six assertions" while check_docs.py registers ten, and
the enumeration beside it named four of them — ADR numbering, firewall posture,
guest claims and the buy list were all running and unmentioned. ADR-0026
recorded the count as seven when it was written, so it has been wrong at least
twice.

It drifted silently because check_counts() had no claim pattern for the noun
assertions — the exact failure that check's own comments say it exists to
prevent, about itself. So:

  • The count is now asserted, not hand-maintained. main() writes
    len(checks) into the facts dict after building the registry;
    check_counts reads it. Adding an eleventh check updates the claim on the
    way in.
  • Proven both ways: with the pattern added and README untouched, the run
    failed README.md:71 claims Six assertions; the repository has 10; with a
    temporary eleventh check registered, claims Ten assertions; the repository has 11.
  • README is corrected to ten, enumerates all of them, and says it was
    wrong — a bullet advertising that this repo catches documentation drift is
    worth less if it quietly fixes its own.
  • ADR-0026's "seven assertions" is left alone. ADRs are outside PROSE on
    purpose, being records of what was true when written.

Delivered 2026-09-15: the Lenovo ThinkServer TS150 that is `smaug` (#413), the
HP ProDesk 600 G4 Micro that is `trinity` (#404), the Intel DC S3520 240 GB
that boots the NAS, and the 5.25" bracket and double-sided tape that mount it
in the optical bay. Six paid-for things did not land and are still recorded as
moving: the two Exos X20 drives for the mirror, the I226 card, the pfSense
installer stick, the CRS326, the A1437 cell and the two SM863a SSDs.

`hardware.md` said four things were in a delivery van that were on a desk, and
it is the estate's only inventory, so that is the whole of what this corrects.
Nothing is racked, placed, fitted or built. Each bullet names its own promotion
trigger — the TS150 "enters the Compute table when it is racked ... addressed
and in `network.md`", `trinity` when #404 builds it — and none has fired, so
the Rack and Compute tables, `network.md` and `architecture.md` are untouched.
No purchase entered or left the buy table either: arriving is not buying, so
the table stays at two rows and README stays at "two items now, one later".

**No measurement is recorded, and that is deliberate.** Every one of these
boxes is unopened. The specs in this document came from listings and not from
the machines, so each bullet now carries a *Checked on arrival, not assumed*
list in the shape the CRS326 bullet already used: serials, the CPU and RAM read
off POST rather than off a listing, `smartctl -a` on the boot disk before the
install and not after, and how many of the TS150's four bays came with a caddy.
Nothing here invents a serial or a part number. The S3520 bullet's "neither is
named here yet, for the same reason the drive's serial is not — nothing is
recorded before it is in hand" had its reason expire: the bracket and tape are
in hand. What still blocks naming them is that nobody has read the part off
them, which is a different rule and now says so.

The open question this makes urgent is `trinity`'s: **if its 512 GB SSD is a
2.5" drive rather than M.2, the drive carrier and the I226 card contend for the
same slot.** That was an unknown about a box in a van; it is now an unanswered
question about a box in the room, and the card has not shipped yet — so opening
the ProDesk today is the difference between a return and a part that fits
nothing. `restore-the-firewall.md`'s prerequisite list was headed "Before the
box arrives"; the box arrived, so it stops being a countdown and becomes a list
of what is blocking — the card and the installer stick, and no longer the box.

Two pre-existing errors fell out of the sweep and are fixed here rather than
left. `roadmap.md`'s #95 paragraph said the boot disk was bought "leaving only
a bracket to carry it in the optical bay", which had not been true since
2026-09-11 when the bracket was bought — the same file says so fourteen lines
into the section. And the PBS bullet had the TS150 in transit. The ADRs are not
touched: ADR-0038 decides a record is superseded rather than rewritten, and an
arrival amends no decision.

Refs #413 #404

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
README said "Six assertions cross-check this prose against the configs it
describes" while `check_docs.py` registered ten, and the enumeration beside it
named four of them. ADR numbering, firewall posture, guest claims and the buy
list were all running and none appeared in the sentence. ADR-0026 recorded the
count as seven when it was written, so the number has now been wrong at least
twice without anyone noticing either time.

It drifted silently because `check_counts()` had no claim pattern for the noun
"assertions" — the precise failure the surrounding comments say that check
exists to prevent, happening inside the file that prevents it, about the file
itself. #72, #81 and #367 are the same shape, and each was answered by widening
the patterns rather than deleting the number. That precedent is already argued
out in the ADRs comment two lines above the new one, and it applies harder
here: the sentence exists to say how thoroughly these documents are checked, so
the number is not decoration, it is the claim.

So the count is now sourced rather than hand-maintained. `main()` writes
`len(checks)` into the facts dict after building the registry, and
`check_counts` asserts README against it. It goes there rather than in
`facts()` because the registry closes over the dict `facts()` is still
building — the comment says so at both ends, since the split is the one part of
this that is not obvious.

Proven both ways rather than assumed: with the pattern added and README
untouched the run failed with `README.md:71 claims Six assertions; the
repository has 10`, and registering a temporary eleventh check failed it again
at `claims Ten assertions; the repository has 11`. Adding a check now updates
the claim on the way in instead of waiting for someone to reread the bullet.

README's sentence is corrected to ten and enumerates all of them, and says
plainly that it was wrong — the bullet advertises that this repository catches
documentation drift, which is worth less if it quietly fixes its own. The
module docstring's item 1 gains the new claim. ADR-0026's "seven assertions"
stays as it is: ADRs are outside `PROSE` on purpose, being records of what was
true when they were written.

`python3 scripts/check_docs.py` is green at 10 assertions and
`./scripts/lint.sh` passes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Gerrrt
Gerrrt merged commit 7c0bf9a into main Sep 15, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/hardware-delivery-ts150-prodesk-nas-552a4f branch September 15, 2026 05:33
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