<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>toothywalrus</title><link>https://blog.toothywalrus.dev/</link><description>Long-form write-ups about SDR, homelab, electronics and tooling — plus a weekly log of what actually got built.</description><language>en-us</language><lastBuildDate>Thu, 06 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.toothywalrus.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>arduino, week 32: the traffic light is real</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-arduino/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-arduino/</guid><category>weeknotes</category><category>electronics</category><category>teaching</category><description>&lt;p&gt;The kids&amp;rsquo; track had a plan and no built hardware. Now it has built hardware.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The traffic light works.&lt;/strong&gt; Three LEDs, breadboarded and flashed on the real
board. It&amp;rsquo;s the opening project because it is the shortest path from &amp;ldquo;wires in
a bag&amp;rdquo; to &amp;ldquo;a thing that visibly does something,&amp;rdquo; and that distance is the
whole game when the audience is eight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Five programs, one circuit.&lt;/strong&gt; Rather than a project per lesson, tutorial 02
ships five interchangeable programs that all run on the same wiring — so the
build happens once and the payoff repeats. One is a seven-pattern light show.
One is &lt;code&gt;calm_light&lt;/code&gt;: a single slow drift, no events, nothing to react to. I
added it as an afterthought and it&amp;rsquo;s the one I keep running.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The toolchain question is closed:&lt;/strong&gt; &lt;code&gt;arduino-cli&lt;/code&gt;, not PlatformIO. Written
down so it stops getting relitigated every time I open the repo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Small thing I&amp;rsquo;m pleased about:&lt;/strong&gt; I dumped the board&amp;rsquo;s flash before
reflashing it. That is a habit I acquired the expensive way and it costs
thirty seconds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Also this week:&lt;/strong&gt; the tutorials are now generated from shared sources in
both Russian and English with a kids mode, rather than maintained as parallel
documents. The vendored kit docs were swapped to the starter kit actually
sitting on the desk instead of the one I&amp;rsquo;d guessed at, which is the sort of
error that only shows up when a child asks where a part is. Two ESP32S boards
and a second components kit joined the inventory, with their pin gotchas
written down before they bite. And the thermometer project moved off a manual
&lt;code&gt;nohup&lt;/code&gt; onto a proper user service, and now keeps its readings in SQLite with
a history view.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Work between 3 and 6 August 2026 in the &lt;code&gt;arduino&lt;/code&gt; repository — about 21
commits, plus issues #51 and #56. The repository is private.&lt;/p&gt;
&lt;p&gt;The traffic light and the five programs were built and flashed on hardware,
not simulated. The ESP32S pin notes are transcribed from datasheets and have
not yet been verified on the boards themselves.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>game-lab, week 32: the camera started following the ball</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-game-lab/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-game-lab/</guid><category>weeknotes</category><category>gamedev</category><category>typescript</category><description>&lt;p&gt;&lt;code&gt;metamorph-ball&lt;/code&gt; spent the week turning from a physics sandbox into something
with a shape.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The route replaced the sandbox.&lt;/strong&gt; The arena became an actual course, with
obstacles wired into both the physics world and the renderer, a run clock, a
checkpoint cue and a completion panel. There is now a thing to finish, which
is the difference between a demo and a game.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two new forms.&lt;/strong&gt; A jelly form that squeezes through a grate, plus rubber and
heavy forms with pads that trigger on contact. The grate opens by dropping its
collider, which is either elegant or cheating depending on how closely you
look.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Juice.&lt;/strong&gt; Squash-and-stretch and spark bursts, fired on the same cues as the
audio so the hit reads as one event instead of three. The sound is synthesised
rather than sampled — fewer assets, and it can be tuned per-event instead of
per-file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The change that mattered was four lines.&lt;/strong&gt; The camera now follows the ball
instead of waiting to be dragged. Before that, playing it felt like operating
a diagram. Nothing else this week moved the needle as far.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plumbing:&lt;/strong&gt; a small persistence package for namespaced, versioned local
settings, used first by a quality switch that survives a reload. The asset
pipeline exists now, with one model through it end to end. And the deploy key
is confined to an rrsync jail, so the thing that can write to the server can
only write to one directory.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Work between 3 and 6 August 2026 in the &lt;code&gt;game-lab&lt;/code&gt; repository — about 20
commits, plus the decision records on the rrsync jail, the grate collider and
the camera. The repository is private.&lt;/p&gt;
&lt;p&gt;Everything above runs in the browser build; the deploy-key jail was applied
and used, not just documented.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>homelab, week 32: provisioning became code, and the fleet moved out</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-homelab/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-homelab/</guid><category>weeknotes</category><category>ansible</category><category>monitoring</category><description>&lt;p&gt;Infrastructure week, of the unglamorous and satisfying kind.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Provisioning is Ansible now&lt;/strong&gt; — and, more to the point, it has been applied
to the actual host rather than written and left aspirational. The distinction
matters: half-finished infrastructure-as-code is worse than none, because it
tells you the machine is in a state it isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monitoring exists&lt;/strong&gt;, bound to the private network only, with nothing exposed
publicly. The agents run natively rather than in containers, which was a
deliberate choice and is written down as one. Two things learned in passing and
recorded: how much drive health you can see depends on the enclosure the drive
is in, not just the drive; and volume identity has to be normalised per
platform or you end up with the same disk under two names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fleet configuration moved to its own repo.&lt;/strong&gt; It had grown past being a
subdirectory of the edge config — different lifecycle, different blast radius,
different reasons to change. Splitting it was overdue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Routing changes:&lt;/strong&gt; the Minecraft server now accepts the Java edition
alongside Bedrock, and a new subdomain went up behind Basic auth, because &amp;ldquo;not
finished&amp;rdquo; and &amp;ldquo;not on the public internet&amp;rdquo; should be the same state. Also
removed a redundant proxy header that had been quietly duplicating what the
edge already sets.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Work between 3 and 6 August 2026 in the &lt;code&gt;homelab-infra&lt;/code&gt; repository — about 11
commits, plus the decision records on native agents, volume identity and drive
visibility, and the split-out of the fleet repo. Issue #14.&lt;/p&gt;
&lt;p&gt;Specific hostnames, addresses and topology are deliberately absent. This entry
describes what changed, not where anything lives.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>mc-server, week 32: Line 1 opens, traps everyone, reopens</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-mc-server/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-mc-server/</guid><category>weeknotes</category><category>minecraft</category><category>sqlite</category><description>&lt;p&gt;The week&amp;rsquo;s theme was transport. The subway is the first thing on the server
that has to work for other people rather than just exist, and that changes
what counts as done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The stack decision came first.&lt;/strong&gt; Server-side, on Paper&amp;rsquo;s own minecarts,
rather than anything that needs players to install a client mod — the whole
point is that someone can join and ride it. And explicitly transport first:
the settlement-simulation ideas are a separate thing that can wait, which is
now written down specifically so I stop bundling them in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Then Metro, then Line 1.&lt;/strong&gt; Surveyed the server-side plugin options (and
corrected a wrong claim about TrainCarts I&amp;rsquo;d already committed to a decision
record — that one is on me), adopted Metro, and built Spawn Central to East
Terminal as a test line. Getting it onto the web map took &lt;code&gt;route_points&lt;/code&gt;, and
then a caveat: the map&amp;rsquo;s depth test makes an underground line look wrong, so
the line is drawn above the terrain on purpose. Accuracy traded for
legibility, deliberately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The station ate me.&lt;/strong&gt; The walls generated at a station edge are sensible for
something arriving on rails and a sealed box for something arriving on foot.
I walked in and could not get out. Fixed, and recorded as a general lesson —
if I generate geometry from config again, a human may approach it from an
angle the config never considered. East Terminal also turned out to need a
surface exit before it was a station rather than a hole in the ground.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The bake-off has no result.&lt;/strong&gt; With Metro working, I installed TrainCarts
alongside it, because multi-passenger riding is what I actually want and I
don&amp;rsquo;t know which plugin gives it to me. Two bugs so far and both are mine: a
spawner sign outside the rail&amp;rsquo;s range, and signs placed where they could
never link to the rail. Nothing decided yet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Away from the metro:&lt;/strong&gt; the settlement sim got SQLite persistence and a real
tick-loop scheduler instead of whatever it had before, with the persistence
choice recorded as stdlib-only and no ORM until something demands one. NPCs
will be FancyNpcs rather than Citizens. And the Bedrock bridge turns out to go
stale between restarts, so there&amp;rsquo;s now a refresh script that runs at 4am and
skips it if anyone is actually playing.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Work between 3 and 6 August 2026 in the &lt;code&gt;mc-server&lt;/code&gt; repository — about 23
commits, plus decision records 0011–0017 written in the same window. The
repository is private; this is a summary of what&amp;rsquo;s recorded there.&lt;/p&gt;
&lt;p&gt;The TrainCarts comparison is reported as unfinished because it is. Nothing
above describes a configuration that wasn&amp;rsquo;t actually applied to the server.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>moneybtn2, week 32: three merges and a numbering collision</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-moneybtn2/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-moneybtn2/</guid><category>weeknotes</category><category>charts</category><category>process</category><description>&lt;p&gt;A merge-heavy week: three branches that had been open for a while all landed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What shipped.&lt;/strong&gt; Candle storage and the charts that read from it; event
overlays on those charts; and a detail popup in the ops view. Each of those had
been sitting on its own branch long enough that merging them was most of the
work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One thing worth writing down&lt;/strong&gt; came out of the chart work: the two data
sources feeding the chart are independent of each other. That sounds obvious
stated plainly, and it was not obvious from the code — it&amp;rsquo;s exactly the sort of
fact that gets rediscovered painfully in six months, so it&amp;rsquo;s a decision record
now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And the comedy.&lt;/strong&gt; Two branches both created decision record &lt;code&gt;0089&lt;/code&gt;. Fine,
renumber: &lt;code&gt;0107&lt;/code&gt; and &lt;code&gt;0108&lt;/code&gt;. Except &lt;code&gt;0089&lt;/code&gt; had &lt;em&gt;also&lt;/em&gt; been claimed on &lt;code&gt;main&lt;/code&gt;
while those branches were open, so the third one became &lt;code&gt;0109&lt;/code&gt; — followed by a
commit to index it and fix a stale reference to its old number that had
survived the first two renames.&lt;/p&gt;
&lt;p&gt;Three commits of pure bookkeeping to land one document about something
unrelated. Sequentially-numbered append-only records are a good convention
until you have parallel branches, and I don&amp;rsquo;t have a real fix yet. Allocating
the number at merge time rather than at write time would work, but it means the
filename changes late, which is its own annoyance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Also:&lt;/strong&gt; the deploy script does not do two of the steps required to actually
deploy, and now says so out loud in the docs rather than living in my head.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Work between 3 and 6 August 2026 in the &lt;code&gt;moneybtn2&lt;/code&gt; repository: pull requests
#122, #126 and #127, and decision records 0107–0109. The repository is
private.&lt;/p&gt;
&lt;p&gt;The two undocumented deploy steps are described as documented, not as
automated — they are still manual.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>sdr, week 32: a bench baseline, taken before the antenna</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-sdr/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-sdr/</guid><category>weeknotes</category><category>rtl-sdr</category><category>measurement</category><description>&lt;p&gt;Small week here, but it&amp;rsquo;s the start of something I want to do properly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The receiver got measured with no antenna attached.&lt;/strong&gt; This sounds like a
non-experiment and it&amp;rsquo;s the opposite: it&amp;rsquo;s the only way to get a baseline. Once
an antenna is on there, every subsequent number is the radio &lt;em&gt;and&lt;/em&gt; the antenna
&lt;em&gt;and&lt;/em&gt; the environment, and there is no way to separate them retroactively. So:
characterise the bare device first, with tooling that can re-run the same
measurements and verify them rather than a one-off session and a screenshot.&lt;/p&gt;
&lt;p&gt;That verification tooling is the actual deliverable. A number I can&amp;rsquo;t reproduce
next month isn&amp;rsquo;t a measurement, it&amp;rsquo;s an anecdote.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Also written up&lt;/strong&gt; this week: the satellite and drone reception projects, as
a plan rather than a result. Nothing received yet.&lt;/p&gt;
&lt;p&gt;The write-up of the bench characterisation is going to be this blog&amp;rsquo;s first
real article, rather than a logbook line — there are numbers and a method and
it deserves more than a paragraph.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Three commits in the &lt;code&gt;sdr&lt;/code&gt; repository, 5–6 August 2026: the initial
no-antenna bench characterisation with its verification tooling, and the
satellite/drone project write-up. The repository is private.&lt;/p&gt;
&lt;p&gt;The no-antenna measurements were run. The satellite and drone work is
described as planned, because nothing has been received yet.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>stockflow, week 32: born Monday, mostly cancelled Thursday</title><link>https://blog.toothywalrus.dev/logbook/2026-w32-stockflow/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32-stockflow/</guid><category>weeknotes</category><category>research</category><description>&lt;p&gt;New repo on Monday. By Thursday most of it was argued away.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The idea&lt;/strong&gt; was a tool to manage stock-footage contributions across
platforms: analytics on what earns, then automation on top of that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt; is that there is no contributor earnings API. Not
rate-limited, not partner-gated, not undocumented-but-reachable — absent. The
numbers I wanted to analyse are visible to a human in a dashboard and nowhere
else. Everything I&amp;rsquo;d sketched on top of that assumption goes with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What survives&lt;/strong&gt; is smaller and less interesting to describe: embedded
metadata and delivery. That part is real work with a real result, it just
isn&amp;rsquo;t the product I opened the repo to build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The honest version:&lt;/strong&gt; this is four days spent to avoid four weeks, and I do
believe that&amp;rsquo;s the right trade. It still reads as a loss in a week&amp;rsquo;s log, and
I&amp;rsquo;d rather write it down that way than dress it up. The repo stays, at a
tenth of its intended scope.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Work between 3 and 6 August 2026 in the &lt;code&gt;stockflow&lt;/code&gt; repository — the initial
scoping commit, the platform data-access research, and the build-vs-buy case
against the planned scope. Decision records 0001–0005. The repository is
private.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;no earnings API&amp;rdquo; conclusion comes from reading platform documentation,
not from attempting and failing to authenticate against one. If a private or
partner-only endpoint exists, I did not find it and did not have access to
test for it.&lt;/p&gt;

&lt;/div&gt;
</description></item><item><title>Week 32: a subway that ate its passengers, and a project I talked myself out of</title><link>https://blog.toothywalrus.dev/logbook/2026-w32/</link><pubDate>Thu, 06 Aug 2026 00:00:00 +0000</pubDate><guid>https://blog.toothywalrus.dev/logbook/2026-w32/</guid><category>weeknotes</category><description>&lt;p&gt;Short week — Monday to Thursday, because this is the first one of these and I
wanted to see what it looked like before the week was over. Eleven repos
touched. The two things worth reading about are both failures.&lt;/p&gt;
&lt;p&gt;This is the index: a paragraph per project, and a link where there&amp;rsquo;s more.&lt;/p&gt;
&lt;h2 id="the-metro-opened-trapped-everyone-reopened"&gt;The metro opened, trapped everyone, reopened&lt;/h2&gt;
&lt;p&gt;The Minecraft server got a subway — server-side on Paper minecarts, so nobody
has to install anything to ride it. I picked a plugin, built Line 1 as a test,
got it rendering on the web map, then walked into a station and could not get
out. The walls a station generates are perfectly sensible for something
arriving on rails and a sealed box for something arriving on foot.&lt;/p&gt;
&lt;p&gt;Fixed, and written down as a lesson with teeth: if I generate geometry from
config again, a human may approach it from an angle the config never
considered.&lt;/p&gt;
&lt;p&gt;→ &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-mc-server/"&gt;mc-server, week 32&lt;/a&gt; — the
plugin choice, the web-map caveat, and a bake-off with no verdict yet.&lt;/p&gt;
&lt;h2 id="stockflow-scoped-down-to-almost-nothing"&gt;StockFlow, scoped down to almost nothing&lt;/h2&gt;
&lt;p&gt;New repo on Monday. By Thursday I&amp;rsquo;d written the case against most of it.&lt;/p&gt;
&lt;p&gt;There is no contributor earnings API — not rate-limited, not partner-gated,
absent. The numbers I wanted to analyse are visible to a human in a dashboard
and nowhere else, and everything I&amp;rsquo;d sketched on top of that assumption goes
with it. Four days spent to avoid four weeks, which is the right trade and
still doesn&amp;rsquo;t feel like a win.&lt;/p&gt;
&lt;p&gt;→ &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-stockflow/"&gt;stockflow, week 32&lt;/a&gt; — what
survives, and what I actually checked before concluding that.&lt;/p&gt;
&lt;h2 id="the-traffic-light-is-real"&gt;The traffic light is real&lt;/h2&gt;
&lt;p&gt;The kids&amp;rsquo; electronics track has its first finished project on actual hardware.
Three LEDs, then five interchangeable programs on the same circuit so the
wiring gets built once and the payoff repeats. One is a seven-pattern light
show. One is deliberately calm — a single slow drift, nothing to react to —
and it&amp;rsquo;s the one I keep running.&lt;/p&gt;
&lt;p&gt;→ &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-arduino/"&gt;arduino, week 32&lt;/a&gt; — the
toolchain decision, and why the tutorials are generated rather than written
twice.&lt;/p&gt;
&lt;h2 id="four-lines-that-changed-how-a-game-feels"&gt;Four lines that changed how a game feels&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;metamorph-ball&lt;/code&gt; gained a jelly form that squeezes through a grate,
squash-and-stretch and spark bursts fired on the same cues as its audio, and
synthesised sound instead of samples. None of that is the change that
mattered. The camera now follows the ball instead of waiting to be dragged,
and before that, playing it felt like operating a diagram.&lt;/p&gt;
&lt;p&gt;→ &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-game-lab/"&gt;game-lab, week 32&lt;/a&gt; — the
route, the forms, and a deploy key that can only write to one directory.&lt;/p&gt;
&lt;h2 id="the-homelab-grew-a-control-plane"&gt;The homelab grew a control plane&lt;/h2&gt;
&lt;p&gt;Host provisioning is Ansible now and has actually been applied, not just
written — a distinction that matters, because half-finished
infrastructure-as-code is worse than none. It tells you the machine is in a
state it isn&amp;rsquo;t. Monitoring went up, bound to the private network only, and the
fleet configuration moved out into its own repo.&lt;/p&gt;
&lt;p&gt;→ &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-homelab/"&gt;homelab, week 32&lt;/a&gt; — including
two things learned about drives that I&amp;rsquo;d have preferred to learn earlier.&lt;/p&gt;
&lt;h2 id="a-baseline-taken-before-the-antenna"&gt;A baseline taken before the antenna&lt;/h2&gt;
&lt;p&gt;The SDR receiver got characterised with nothing connected to it. That sounds
like a non-experiment and it&amp;rsquo;s the opposite — once an antenna is attached,
every number is the radio &lt;em&gt;and&lt;/em&gt; the antenna &lt;em&gt;and&lt;/em&gt; the room, with no way to
separate them afterwards.&lt;/p&gt;
&lt;p&gt;→ &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-sdr/"&gt;sdr, week 32&lt;/a&gt; — and the full
write-up is going to be this blog&amp;rsquo;s first proper article.&lt;/p&gt;
&lt;h2 id="everything-else-briefly"&gt;Everything else, briefly&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ToothyGram&lt;/strong&gt; stopped presenting itself as an official Telegram product,
which it never should have. Otherwise: adopted a new upstream base, mapped
where a fork can attach to it, and proved the cheapest attachment point costs
exactly one modified upstream file. There&amp;rsquo;s a divergence log now, and a sync
runbook, because the alternative is rediscovering all of it in six months.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The money project&lt;/strong&gt; landed three long-lived branches — candle storage, chart
event overlays, an ops detail popup. → &lt;a href="https://blog.toothywalrus.dev/logbook/2026-w32-moneybtn2/"&gt;moneybtn2, week
32&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two repos were born&lt;/strong&gt;: this blog, and the content-studio one that is
deliberately not this blog. Both are still a README and an argument. The
conventions repo gained one rule, which is that a repo must have a description
at creation time — because nothing populates that field automatically and you
notice eleven blank ones at once, months later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nothing happened on the academy project.&lt;/strong&gt; One commit, recording a test
result on the Mac and listing the iPad checks still to run. It&amp;rsquo;s on the list
and it didn&amp;rsquo;t get attention, because the metro and the traffic light did.&lt;/p&gt;
&lt;h2 id="the-bit-that-made-me-laugh"&gt;The bit that made me laugh&lt;/h2&gt;
&lt;p&gt;Two branches on the money project both created decision record &lt;code&gt;0089&lt;/code&gt;.
Renumbering to &lt;code&gt;0107&lt;/code&gt; and &lt;code&gt;0108&lt;/code&gt; fixed it — except &lt;code&gt;0089&lt;/code&gt; had &lt;em&gt;also&lt;/em&gt; been
claimed on &lt;code&gt;main&lt;/code&gt; in the meantime, so the survivor became &lt;code&gt;0109&lt;/code&gt;, followed by
a commit to index it and fix a stale reference that had survived the first two
renames.&lt;/p&gt;
&lt;p&gt;Three commits of bookkeeping to land one document about something else
entirely. Sequentially-numbered append-only records are a good convention right
up to the point where you have parallel branches, and I don&amp;rsquo;t have a fix beyond
noticing early.&lt;/p&gt;
&lt;div class="provenance"&gt;
 &lt;h2&gt;Where this came from&lt;/h2&gt;
 &lt;p&gt;Assembled from work between Monday 3 and Thursday 6 August 2026: roughly 90
commits across eleven repositories, plus the decision records written in that
window. The repositories are private, so there is nothing to link to here —
what&amp;rsquo;s above summarises things that are recorded, not recollected.&lt;/p&gt;
&lt;p&gt;Load-bearing sources: &lt;code&gt;mc-server&lt;/code&gt; 0015–0017 and its walkable-tunnel and
web-map notes; &lt;code&gt;stockflow&lt;/code&gt;&amp;rsquo;s build-vs-buy case and platform data-access
research; &lt;code&gt;arduino&lt;/code&gt;&amp;rsquo;s toolchain decision and tutorial 02; &lt;code&gt;game-lab&lt;/code&gt;&amp;rsquo;s
&lt;code&gt;metamorph-ball&lt;/code&gt; iteration C; &lt;code&gt;homelab-infra&lt;/code&gt; 0015–0018; &lt;code&gt;moneybtn2&lt;/code&gt; 0107–0109.&lt;/p&gt;
&lt;p&gt;Nothing above describes something that wasn&amp;rsquo;t actually run or committed. The
TrainCarts bake-off has no result yet and is reported as unfinished; the
satellite and drone SDR work is a plan, not a result.&lt;/p&gt;

&lt;/div&gt;
</description></item></channel></rss>