Repository navigation
docs: the TS150, the ProDesk and smaug's boot SSD are in hand - #472
Merged
Merged
Conversation
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>
This was referenced Sep 15, 2026
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
deleted the
gerrrt/hardware-delivery-ts150-prodesk-nas-552a4f
branch
September 15, 2026 05:33
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.
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 istrinity(#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.mdis the estate's only inventory and it said all four were ina 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, theCRS326, the A1437 cell for
prometheus, and the two SM863a SSDs forSaruman.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
promotion trigger and none has fired.
network.mdandarchitecture.mdareuntouched for the same reason — and
check_compute_tablewould have failed apremature row rather than merely tolerated it.
rows and README stays at "two items now, one later".
rewritten, and an arrival amends no decision — including ADR-0038's own line
saying the TS150 is in transit.
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 -aon the boot disk before the install, and how many of the TS150'sfour 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 theI226 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 abracket to carry it in the optical bay". The bracket was bought 2026-09-11,
which the same section says fourteen lines in.
Verification
make validatepasses,make check-docsreports 10 assertions green, and allsix linters pass. The first local
validaterun tripped the known promtoolflake 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.pyregisters ten, andthe 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 nounassertions— the exact failure that check's own comments say it exists toprevent, about itself. So:
main()writeslen(checks)into the facts dict after building the registry;check_countsreads it. Adding an eleventh check updates the claim on theway in.
failed
README.md:71 claims Six assertions; the repository has 10; with atemporary eleventh check registered,
claims Ten assertions; the repository has 11.wrong — a bullet advertising that this repo catches documentation drift is
worth less if it quietly fixes its own.
PROSEonpurpose, being records of what was true when written.