Five views of joEy’s home system

Honeycomb in UML

Five UML views of Honeycomb, the system joEy keeps at home. Four look at Beekeeper, which keeps three copies of /honeycomb and checks them for rot. The last follows /album as it fetches a record. Every label comes from the apps’ own READMEs and scripts.

dep

Where the copies live

deployment diagram

depHoneycomb’s machines «device» MacBook Pro aviary where joEy sits ~/jungle SMB mount VS Code Remote-SSH window «device» phone magic-stone Termux «device» Mac Studio jungle holds the live tree /honeycomb live tree · copy 1 · internal SSD mirror.sh launchd · 03:00 nightly honeycomb-manifest.tsv path · size · mtime · sha256 homelab Docker · DNS and proxy stay up «device» SSD RAID propolis /Volumes/propolis copy 2 30 days of history offline · on the shelf cellar-A encrypted HDD · copy 3 cellar-B encrypted HDD · copy 3 «SMB» mount «SSH» Remote-SSH, pbcopy «SSH» photos → Bus «rsync» 03:00 nightly «rsync» by hand, ~quarterly

The live tree sits on jungle. At 03:00 every night it is copied to propolis and checked byte for byte. About four times a year it also goes to a cellar drive kept offline. aviary works on jungle over SMB and SSH, and jungle reads the phone over SSH.

sd

The nightly at 03:00

sequence diagram

sdThe nightly at 03:00 launchd03:00 agent mirror.shBeekeeper rot manifestscrub.py homelabDocker propolisSSD RAID Resendemail API start, 03:00 on wake if asleep commit repos · doctor · prune bin shrink guard ok, or held mounted, writable, healthy? upgrades · smoke tests · tests stop all but DNS, proxy alt [guard ok, drive up] rsync copy, 30-day history verify byte for byte bytes match [guard held, or drive absent or off] copy skipped · held → FAILED · absent or off → PARTIAL rot scrub re-lay if clean restart containers send the report email to joEy OK · PARTIAL · FAILED

One launchd job runs the whole night, not only the copy. The shrink guard decides first: a tree that has lost its core is never mirrored over a good copy. The report goes out every night, whatever happened before it.

stm

The life of a cellar drive

state machine diagram

stmA cellar drive On the shelf locked · offline after(100 days) / the doctor asks /honeycomb-cold [propolis, or not a separate drive] / refuse [a cellar] cold-sync.sh one cellar at a time Unlockedits passphrase Copyingrsync, same excludes Verifying Leg Abyte for byte Scrubbingscrub.py, no --lay Loggeda ledger line / unmount KEEP_MOUNTED=1 leaves it mounted [abort or bad copy] / exit 1 Failed the next cellar waits

A cellar drive spends nearly all its life on the shelf. /honeycomb-cold takes one through the copy, the Leg A check, the scrub and the ledger, then unmounts it. Any failure exits 1, so cold-sync.sh cellar-A && cold-sync.sh cellar-B never syncs the second drive after a bad first one.

class

Three copies, one shape

class diagram

classBackup domain «script» Scrub + check(tree) + lay() if clean rot = same size and mtime, but a different sha256 «checks, lays» «file» Manifest honeycomb-manifest.tsv {re-laid only after a clean scrub} rows * Row path: str size: int mtime: time sha256: hex «abstract» Copy where: str writtenBy: str cadence: str checked against 1..* 1 LiveTree where = jungle SSD writtenBy = you cadence = always Mirror where = propolis writtenBy = mirror.sh cadence = 03:00 nightly history = 30 days ColdCopy where = cellar-A, -B writtenBy = cold-sync.sh cadence = ~quarterly history = never pruned «reads» «reads» «script» Restore into = restore_staging/ {never the live tree}

The three copies share one shape and differ only in where they live, who writes them and how often. Each copy is checked against a manifest with one row per file. Rot is the same size and mtime with a different hash. Restore reads a copy into a staging folder and never writes into the live tree.

act

Getting a record with /album

activity diagram

act/album SOULSEEK QOBUZ THE BUS THE LIBRARY check what we have already filed? [filed or in the Bus] say so [new] search Qobuz fully served? [yes] rip at native format -q 4, never resampled lands in the Bus [none fully served] sldl, FLAC only strict album quality passes? [a folder passes] download [none] say what exists, take nothing lossy verify count · FLAC · flac -t landed? [✓] /archive files it [✗] leave it in the Bus tell joEy what came

Qobuz first, Soulseek second, lossless FLAC only. Each lane is where the files are at that step. A failed verify leaves the files in the Bus, and only a ✓ goes on to /archive, which files it without asking.

Every sheet is hand-written SVG in Eternal Crane’s colours, with no diagram library: the ground the night, the good run the green of Music & Spirit, and each sheet keyed to one colour of the palette.