<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>2026 on EdS</title><link>https://cdeever.github.io/eds/docs/changes/2026/</link><description>Recent content in 2026 on EdS</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://cdeever.github.io/eds/docs/changes/2026/index.xml" rel="self" type="application/rss+xml"/><item><title>CHG-0001: The LP Stand Joins Its Tenant</title><link>https://cdeever.github.io/eds/docs/changes/2026/0001-lp-stand-joins-its-tenant/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0001-lp-stand-joins-its-tenant/</guid><description>&lt;h1 id="chg-0001-the-lp-stand-joins-its-tenant"&gt;CHG-0001: The LP Stand Joins Its Tenant&lt;a class="anchor" href="#chg-0001-the-lp-stand-joins-its-tenant"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-10&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-10&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;lp-stand-01&lt;/code&gt; (ESP32-D0WD-V3); the &lt;code&gt;eds&lt;/code&gt; tenant&amp;rsquo;s Grafana organization&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make build flash provision&lt;/code&gt; in &lt;code&gt;firmware/lp-stand&lt;/code&gt;; &lt;code&gt;terraform apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Nothing issued is replaced. Most likely to go wrong: a broker account missing a topic the firmware uses, which fails silently&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0004-firmware-secrets-nvs-only/"&gt;ADR-0004&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0005-device-events-over-mqtt/"&gt;ADR-0005&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;None&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Backfilled&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Written after the change ran, from the session that ran it.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The stand had been flashed once, on 2026-09-09, built for plaintext MQTT on&#10;port 1883 and never provisioned. Deevnet IoTaaS&amp;rsquo;s broker is TLS only, so it had&#10;never reached the real broker; it sat lit in its default warm white, retrying&#10;WiFi with no key.&lt;/p&gt;</description></item><item><title>CHG-0002: The Relay Pi, and Accounts for Now Playing</title><link>https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/</guid><description>&lt;h1 id="chg-0002-the-relay-pi-and-accounts-for-now-playing"&gt;CHG-0002: The Relay Pi, and Accounts for Now Playing&lt;a class="anchor" href="#chg-0002-the-relay-pi-and-accounts-for-now-playing"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-10&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-10&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the &lt;code&gt;eds&lt;/code&gt; tenant&amp;rsquo;s broker accounts; &lt;code&gt;dv02rpi002p01&lt;/code&gt; (a Pi lab host in the site inventory); iTunes on a PC on the home LAN&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;terraform apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make -C deploy/relay image fetch card status pair&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. A host is put on two networks the site otherwise keeps apart. Most likely to go wrong: the Pi&amp;rsquo;s Wi-Fi leg picking up a default route or DNS, which would send site traffic through the house&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0006-now-playing-bus-of-drivers/"&gt;ADR-0006&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0010-home-lan-relay/"&gt;ADR-0010&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0011-itunes-by-remote-pairing/"&gt;ADR-0011&lt;/a&gt;, and, made during it, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0015-eds-builds-its-own-pi-images/"&gt;ADR-0015&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0001-lp-stand-joins-its-tenant/"&gt;CHG-0001&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;iTunes runs on a PC on the home LAN. The broker is inside the Deevnet Mobile&#10;site. Neither can reach the other, so nothing that happens in iTunes can reach&#10;the stand.&lt;/p&gt;</description></item><item><title>CHG-0003: The Stand Follows What Is Playing</title><link>https://cdeever.github.io/eds/docs/changes/2026/0003-the-stand-follows-now-playing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0003-the-stand-follows-now-playing/</guid><description>&lt;h1 id="chg-0003-the-stand-follows-what-is-playing"&gt;CHG-0003: The Stand Follows What Is Playing&lt;a class="anchor" href="#chg-0003-the-stand-follows-what-is-playing"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the &lt;code&gt;services&lt;/code&gt; workload of the &lt;code&gt;eds&lt;/code&gt; tenant: &lt;code&gt;eds-lightd&lt;/code&gt;, and a new &lt;code&gt;eds-nowplayd&lt;/code&gt;; by consequence, &lt;code&gt;lp-stand-01&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. &lt;code&gt;lightd&lt;/code&gt; gains an input and loses none. Most likely to go wrong: a settings file that leaves &lt;code&gt;nowplayd&lt;/code&gt; unable to log in to the broker, which shows as a unit restarting&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0006-now-playing-bus-of-drivers/"&gt;ADR-0006&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0008-nowplayd-arbitrates-and-enriches/"&gt;ADR-0008&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0009-lightd-takes-covers-from-a-topic/"&gt;ADR-0009&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/"&gt;CHG-0002&lt;/a&gt;, whose follow-up this is&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Since &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/"&gt;CHG-0002&lt;/a&gt;&#10;the agent Pi has reported what iTunes is playing to the broker, and nothing&#10;has acted on it. The stand shows whatever cover was last sent to it by hand.&lt;/p&gt;</description></item><item><title>CHG-0004: Spotify on the Agent Pi</title><link>https://cdeever.github.io/eds/docs/changes/2026/0004-spotify-on-the-agent-pi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0004-spotify-on-the-agent-pi/</guid><description>&lt;h1 id="chg-0004-spotify-on-the-agent-pi"&gt;CHG-0004: Spotify on the Agent Pi&lt;a class="anchor" href="#chg-0004-spotify-on-the-agent-pi"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the agent Pi &lt;code&gt;dv02rpi002p01&lt;/code&gt;; the &lt;code&gt;np-relay&lt;/code&gt; broker account of the &lt;code&gt;eds&lt;/code&gt; tenant; &lt;code&gt;eds-nowplayd&lt;/code&gt; on the &lt;code&gt;services&lt;/code&gt; workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;terraform apply&lt;/code&gt;; &lt;code&gt;make -C deploy units&lt;/code&gt;; &lt;code&gt;make -C deploy/relay push spotify&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low to the stand, which this change is designed not to affect. Most likely to go wrong: the account change reissuing the relay&amp;rsquo;s password, which would silence iTunes too&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0012-spotify-by-web-api/"&gt;ADR-0012&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0016-a-source-can-be-reported-without-its-cover/"&gt;ADR-0016&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/"&gt;CHG-0002&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0003-the-stand-follows-now-playing/"&gt;CHG-0003&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The agent Pi follows iTunes. After this change it also follows a Spotify&#10;account, and reports what that account plays on the devices named as being in&#10;the room.&lt;/p&gt;</description></item><item><title>CHG-0005: The Agent Reports Its Events</title><link>https://cdeever.github.io/eds/docs/changes/2026/0005-the-agent-reports-its-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0005-the-agent-reports-its-events/</guid><description>&lt;h1 id="chg-0005-the-agent-reports-its-events"&gt;CHG-0005: The Agent Reports Its Events&lt;a class="anchor" href="#chg-0005-the-agent-reports-its-events"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the &lt;code&gt;eds&lt;/code&gt; tenant&amp;rsquo;s device registry and the &lt;code&gt;np-relay&lt;/code&gt; broker account; the agent Pi &lt;code&gt;dv02rpi002p01&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;terraform apply -target&lt;/code&gt;; &lt;code&gt;make -C deploy/relay push&lt;/code&gt;; one line added to the Pi&amp;rsquo;s settings&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: giving the account a device replaces it and reissues its password, which would silence both drivers&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0017-an-agent-pi-is-a-registered-device/"&gt;ADR-0017&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0004-spotify-on-the-agent-pi/"&gt;CHG-0004&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The agent Pi follows iTunes and Spotify and says so only in its own journal.&#10;After this change it is a registered device of the tenant and reports its key&#10;events to the log store: each track that plays, and each time a driver comes&#10;or goes.&lt;/p&gt;</description></item><item><title>CHG-0006: The Console</title><link>https://cdeever.github.io/eds/docs/changes/2026/0006-the-console/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0006-the-console/</guid><description>&lt;h1 id="chg-0006-the-console"&gt;CHG-0006: The Console&lt;a class="anchor" href="#chg-0006-the-console"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the &lt;code&gt;eds&lt;/code&gt; tenant: a new broker account and a DNS name; the &lt;code&gt;services&lt;/code&gt; workload: a new &lt;code&gt;eds-console&lt;/code&gt;, and its firewall&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;terraform apply&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Nothing existing is changed except by being restarted. Most likely to go wrong: the console unable to bind port 80 as a user who is not root&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0018-a-console-of-eds-own/"&gt;ADR-0018&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0003-the-stand-follows-now-playing/"&gt;CHG-0003&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;EdS gains a page of its own: what is playing and on which player, its cover,&#10;each stand drawn in the colors and motion it was sent, and whether each part&#10;is up. It is served from the workload at &lt;code&gt;http://console.eds.mobile.deevnet.net/&lt;/code&gt;&#10;and only looks.&lt;/p&gt;</description></item><item><title>CHG-0007: The Console Over TLS</title><link>https://cdeever.github.io/eds/docs/changes/2026/0007-the-console-over-tls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0007-the-console-over-tls/</guid><description>&lt;h1 id="chg-0007-the-console-over-tls"&gt;CHG-0007: The Console Over TLS&lt;a class="anchor" href="#chg-0007-the-console-over-tls"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the &lt;code&gt;eds&lt;/code&gt; tenant: a certificate, held in its state; the &lt;code&gt;services&lt;/code&gt; workload: &lt;code&gt;eds-console&lt;/code&gt;, and its firewall&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;terraform init -upgrade&lt;/code&gt;, &lt;code&gt;terraform apply&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the console unable to read its key as the user it runs as, which stops it at start with the reason in its log&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0018-a-console-of-eds-own/"&gt;ADR-0018&lt;/a&gt;; Deevnet ADR-0037, which gave tenants a CA to ask&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0006-the-console/"&gt;CHG-0006&lt;/a&gt;; Deevnet CHG-0047, which built the Tenant Service CA this is the first use of&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The console is served in the clear, because when it was built nothing on the&#10;site would certify a name a tenant serves. Deevnet IoTaaS now has a Tenant&#10;Service CA (Deevnet ADR-0037), and a tenant can ask it for a server&#10;certificate for a name in its own zone.&lt;/p&gt;</description></item><item><title>CHG-0008: The Stand Reports Its Colors</title><link>https://cdeever.github.io/eds/docs/changes/2026/0008-the-stand-reports-its-colours/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0008-the-stand-reports-its-colours/</guid><description>&lt;h1 id="chg-0008-the-stand-reports-its-colors"&gt;CHG-0008: The Stand Reports Its Colors&lt;a class="anchor" href="#chg-0008-the-stand-reports-its-colors"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;lp-stand-01&lt;/code&gt;, over USB from the development Mac&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C firmware/lp-stand build flash PORT=/dev/cu.usbserial-0001&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a flash that also erased the stand&amp;rsquo;s credentials, which would leave it off the network until provisioned again&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0005-device-events-over-mqtt/"&gt;ADR-0005&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0001-lp-stand-joins-its-tenant/"&gt;CHG-0001&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;When the stand applies a scene it reports the effect, how many colors and the&#10;brightness. It does not say which colors. The firmware that does has been on&#10;&lt;code&gt;main&lt;/code&gt; since it was written for a dashboard panel that was not kept, and has&#10;never been on the stand.&lt;/p&gt;</description></item><item><title>CHG-0009: Two Effects for the Accents</title><link>https://cdeever.github.io/eds/docs/changes/2026/0009-two-effects-for-the-accents/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0009-two-effects-for-the-accents/</guid><description>&lt;h1 id="chg-0009-two-effects-for-the-accents"&gt;CHG-0009: Two Effects for the Accents&lt;a class="anchor" href="#chg-0009-two-effects-for-the-accents"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;lp-stand-01&lt;/code&gt;, over USB; &lt;code&gt;eds-lightd&lt;/code&gt; and &lt;code&gt;eds-console&lt;/code&gt; on the &lt;code&gt;services&lt;/code&gt; workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C firmware/lp-stand build flash&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: &lt;code&gt;lightd&lt;/code&gt; asking for an effect the stand does not know, which the stand shows as a steady color&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0001-device-renders-effects/"&gt;ADR-0001&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0008-the-stand-reports-its-colours/"&gt;CHG-0008&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The stand&amp;rsquo;s default effect, &lt;code&gt;breathe&lt;/code&gt;, lights a cover&amp;rsquo;s dominant color and&#10;nothing else. The other colors &lt;code&gt;lightd&lt;/code&gt; picks, the accents, reach the stand&#10;in every scene and are used only by &lt;code&gt;sweep&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>CHG-0010: A Look for One Album, and a Strip of Eighteen</title><link>https://cdeever.github.io/eds/docs/changes/2026/0010-a-look-for-one-album-and-a-strip-of-eighteen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0010-a-look-for-one-album-and-a-strip-of-eighteen/</guid><description>&lt;h1 id="chg-0010-a-look-for-one-album-and-a-strip-of-eighteen"&gt;CHG-0010: A Look for One Album, and a Strip of Eighteen&lt;a class="anchor" href="#chg-0010-a-look-for-one-album-and-a-strip-of-eighteen"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the &lt;code&gt;eds&lt;/code&gt; tenant: two broker accounts gain a topic; &lt;code&gt;eds-nowplayd&lt;/code&gt;, &lt;code&gt;eds-lightd&lt;/code&gt; and &lt;code&gt;eds-console&lt;/code&gt; on the &lt;code&gt;services&lt;/code&gt; workload; &lt;code&gt;lp-stand-01&lt;/code&gt;, over USB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;terraform apply&lt;/code&gt;; &lt;code&gt;make -C firmware/lp-stand build flash&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a grant that does not match the topic, which the broker refuses without saying so and which leaves every album lit from its cover as before&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0019-an-album-can-have-a-look-of-its-own/"&gt;ADR-0019&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0009-two-effects-for-the-accents/"&gt;CHG-0009&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Two things, deployed together because they touch the same three programs.&lt;/p&gt;</description></item><item><title>CHG-0011: Spotify Turned Off</title><link>https://cdeever.github.io/eds/docs/changes/2026/0011-spotify-turned-off/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0011-spotify-turned-off/</guid><description>&lt;h1 id="chg-0011-spotify-turned-off"&gt;CHG-0011: Spotify Turned Off&lt;a class="anchor" href="#chg-0011-spotify-turned-off"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Configuration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the agent Pi: one line of its settings, and its agent restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/relay drivers DRIVERS=itunes&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the agent not coming back, which would stop iTunes being followed too&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0012-spotify-by-web-api/"&gt;ADR-0012&lt;/a&gt;, unchanged&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0004-spotify-on-the-agent-pi/"&gt;CHG-0004&lt;/a&gt;, which turned it on&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The Spotify driver works, and nothing uses what it reports: the stand does&#10;not follow Spotify, by decision. Meanwhile it asks Spotify what is playing&#10;every ten seconds, all day. Its owner is not using it for now and will come&#10;back to it.&lt;/p&gt;</description></item><item><title>CHG-0012: The Cover Screen</title><link>https://cdeever.github.io/eds/docs/changes/2026/0012-the-cover-screen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0012-the-cover-screen/</guid><description>&lt;h1 id="chg-0012-the-cover-screen"&gt;CHG-0012: The Cover Screen&lt;a class="anchor" href="#chg-0012-the-cover-screen"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;a new device, &lt;code&gt;cover-screen-01&lt;/code&gt;; the tenant&amp;rsquo;s Terraform (one device, one broker account, grants on two others); &lt;code&gt;nowplayd&lt;/code&gt; on the workload; the agent on the Pi&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make flash&lt;/code&gt; and &lt;code&gt;make provision&lt;/code&gt; in &lt;code&gt;firmware/cover-screen&lt;/code&gt;; &lt;code&gt;make plan apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;; &lt;code&gt;make -C deploy/relay push&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. It is the first change that lets anything alter what plays. Most likely to go wrong: the agent or &lt;code&gt;nowplayd&lt;/code&gt; not coming back, which would stop the stand following the music&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0020-a-touch-screen-that-can-change-what-plays/"&gt;ADR-0020&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/"&gt;CHG-0002&lt;/a&gt;, which made the accounts this adds to&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;A touch screen is added beside the stand. It shows the cover of what is&#10;playing and, when touched, five buttons: play or pause, previous, next,&#10;volume up, volume down.&lt;/p&gt;</description></item><item><title>CHG-0013: The Turntable Driver</title><link>https://cdeever.github.io/eds/docs/changes/2026/0013-the-turntable-driver/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0013-the-turntable-driver/</guid><description>&lt;h1 id="chg-0013-the-turntable-driver"&gt;CHG-0013: The Turntable Driver&lt;a class="anchor" href="#chg-0013-the-turntable-driver"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-11, run on 2026-10-12 UTC&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-12&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the tenant (one broker account), the agent Pi (its agent, its unit, a recognizer installed, two lines of its settings)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make apply&lt;/code&gt; in the tenant; &lt;code&gt;make -C deploy/relay push&lt;/code&gt;, &lt;code&gt;turntable&lt;/code&gt;, &lt;code&gt;drivers&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. Most likely to go wrong: the agent&amp;rsquo;s unit, which changes how it is confined, not starting, which would stop iTunes being followed too&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0021-the-turntable-is-identified-by-listening/"&gt;ADR-0021&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0002-relay-pi-and-now-playing-accounts/"&gt;CHG-0002&lt;/a&gt;, which made the account; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0012-the-cover-screen/"&gt;CHG-0012&lt;/a&gt;, in progress on the same Pi&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The agent Pi gains a third driver, which listens to the amplifier&amp;rsquo;s tape&#10;output through a USB audio interface and reports the record that is playing.&lt;/p&gt;</description></item><item><title>CHG-0014: The Owner's Collection</title><link>https://cdeever.github.io/eds/docs/changes/2026/0014-the-owners-collection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0014-the-owners-collection/</guid><description>&lt;h1 id="chg-0014-the-owners-collection"&gt;CHG-0014: The Owner&amp;rsquo;s Collection&lt;a class="anchor" href="#chg-0014-the-owners-collection"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-12&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10; — a record from the collection is shown with its own sleeve; one that is not in it has not been tried&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the services workload: nowplayd&amp;rsquo;s image, its unit, one settings file changed and one added. The console&amp;rsquo;s image, for one line of its page&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. Most likely to go wrong: nowplayd&amp;rsquo;s unit, which names a new settings file, not starting; nothing would then be current and the stand would hold its last scene&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0022-the-owners-collection-names-the-record/"&gt;ADR-0022&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0013-the-turntable-driver/"&gt;CHG-0013&lt;/a&gt;, which put the turntable on the bus&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;nowplayd learns to ask its owner&amp;rsquo;s Discogs collection which record a track&#10;from the turntable is on.&lt;/p&gt;</description></item><item><title>CHG-0015: The Turntable's Power Beacon</title><link>https://cdeever.github.io/eds/docs/changes/2026/0015-the-turntables-power-beacon/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0015-the-turntables-power-beacon/</guid><description>&lt;h1 id="chg-0015-the-turntables-power-beacon"&gt;CHG-0015: The Turntable&amp;rsquo;s Power Beacon&lt;a class="anchor" href="#chg-0015-the-turntables-power-beacon"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-12&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;a new device, &lt;code&gt;turntable-power-01&lt;/code&gt;; the tenant&amp;rsquo;s Terraform (one device, one broker account, a grant on two others); &lt;code&gt;nowplayd&lt;/code&gt; and the console on the workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make flash&lt;/code&gt; and &lt;code&gt;make provision&lt;/code&gt; in &lt;code&gt;firmware/power-beacon&lt;/code&gt;; &lt;code&gt;make plan apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low to medium. &lt;code&gt;nowplayd&lt;/code&gt;&amp;rsquo;s rule for what is current changes, for the turntable only and only once its beacon has been heard. Most likely to go wrong: &lt;code&gt;nowplayd&lt;/code&gt; or the console not coming back, which would stop the stand following the music or blank the page&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0023-a-source-that-is-switched-on-holds-the-stand/"&gt;ADR-0023&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0013-the-turntable-driver/"&gt;CHG-0013&lt;/a&gt;, whose follow-up about a lifted needle this answers; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0012-the-cover-screen/"&gt;CHG-0012&lt;/a&gt;, the last device added, and the shape this follows&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;A bare ESP32-S2 goes on the outlet that is switched with the turntable. It&#10;is connected to the broker while the turntable is on and says nothing else.&lt;/p&gt;</description></item><item><title>CHG-0016: Idle, the Screen on the Console, and No Buttons for a Record</title><link>https://cdeever.github.io/eds/docs/changes/2026/0016-idle-the-screen-on-the-console-and-no-buttons-for-a-record/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0016-idle-the-screen-on-the-console-and-no-buttons-for-a-record/</guid><description>&lt;h1 id="chg-0016-idle-the-screen-on-the-console-and-no-buttons-for-a-record"&gt;CHG-0016: Idle, the Screen on the Console, and No Buttons for a Record&lt;a class="anchor" href="#chg-0016-idle-the-screen-on-the-console-and-no-buttons-for-a-record"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-12&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nowplayd&lt;/code&gt;, &lt;code&gt;lightd&lt;/code&gt; and the console on the workload; the cover screen&amp;rsquo;s firmware; the tenant&amp;rsquo;s Terraform (one grant on the console&amp;rsquo;s account)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make plan apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;; &lt;code&gt;make flash&lt;/code&gt; in &lt;code&gt;firmware/cover-screen&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. What lights the room changes: the stand dims by itself for the first time. Most likely to go wrong: the stand dim when something is playing, or lit when nothing is&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0024-paused-long-enough-is-not-playing/"&gt;ADR-0024&lt;/a&gt; and &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0025-current-says-when-there-are-no-controls/"&gt;ADR-0025&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0015-the-turntables-power-beacon/"&gt;CHG-0015&lt;/a&gt;, on whose branch this is built and whose console change this adds to&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Three things, asked for together.&lt;/p&gt;</description></item><item><title>CHG-0017: The Gap Between Tracks, and a Silent Turntable</title><link>https://cdeever.github.io/eds/docs/changes/2026/0017-the-gap-between-tracks-and-a-silent-turntable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0017-the-gap-between-tracks-and-a-silent-turntable/</guid><description>&lt;h1 id="chg-0017-the-gap-between-tracks-and-a-silent-turntable"&gt;CHG-0017: The Gap Between Tracks, and a Silent Turntable&lt;a class="anchor" href="#chg-0017-the-gap-between-tracks-and-a-silent-turntable"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-12&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;npagent&lt;/code&gt; on the agent Pi (&lt;code&gt;np-relay&lt;/code&gt;); &lt;code&gt;nowplayd&lt;/code&gt; and the console on the workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/relay push&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a wrong title for a few seconds after a quiet passage, or a room that dims while a record is being turned over and surprises someone&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0026-what-silence-means-on-the-turntable/"&gt;ADR-0026&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0013-the-turntable-driver/"&gt;CHG-0013&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0016-idle-the-screen-on-the-console-and-no-buttons-for-a-record/"&gt;CHG-0016&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Three things about silence, asked for together.&lt;/p&gt;</description></item><item><title>CHG-0018: Counting What Is Asked of Outside Services</title><link>https://cdeever.github.io/eds/docs/changes/2026/0018-counting-what-is-asked-of-outside-services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0018-counting-what-is-asked-of-outside-services/</guid><description>&lt;h1 id="chg-0018-counting-what-is-asked-of-outside-services"&gt;CHG-0018: Counting What Is Asked of Outside Services&lt;a class="anchor" href="#chg-0018-counting-what-is-asked-of-outside-services"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-12&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;npagent&lt;/code&gt; and its recognizer on the agent Pi (&lt;code&gt;np-relay&lt;/code&gt;); &lt;code&gt;nowplayd&lt;/code&gt; on the workload; the tenant&amp;rsquo;s Terraform (one dashboard added)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make plan apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make -C deploy/relay push&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Nothing that lights the room changes. Most likely to go wrong: the log store refuses &lt;code&gt;nowplayd&lt;/code&gt;, and its counts stay in the journal&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0027-what-is-asked-of-outside-services-is-counted/"&gt;ADR-0027&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0017-the-gap-between-tracks-and-a-silent-turntable/"&gt;CHG-0017&lt;/a&gt;, which is on the Pi and the workload from a branch of its own and is not in this one: see the procedure&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;npagent&lt;/code&gt; and &lt;code&gt;nowplayd&lt;/code&gt; count what they ask of services that are not&#10;EdS&amp;rsquo;s, and say so once a minute. The agent&amp;rsquo;s counts arrive as events.&#10;&lt;code&gt;nowplayd&lt;/code&gt; writes its own to the tenant&amp;rsquo;s log store, which no EdS workload&#10;has done before. A dashboard, &lt;strong&gt;Outside Services&lt;/strong&gt;, shows both.&lt;/p&gt;</description></item><item><title>CHG-0019: The Stand Is for Records</title><link>https://cdeever.github.io/eds/docs/changes/2026/0019-the-stand-is-for-records/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0019-the-stand-is-for-records/</guid><description>&lt;h1 id="chg-0019-the-stand-is-for-records"&gt;CHG-0019: The Stand Is for Records&lt;a class="anchor" href="#chg-0019-the-stand-is-for-records"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-13&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nowplayd&lt;/code&gt; and &lt;code&gt;lightd&lt;/code&gt; on the workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a stand that is dark when someone expects it lit, and is taken for dead&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0028-the-stand-is-for-records/"&gt;ADR-0028&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0016-idle-the-screen-on-the-console-and-no-buttons-for-a-record/"&gt;CHG-0016&lt;/a&gt;, which gave the stand its idle scene; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0015-the-turntables-power-beacon/"&gt;CHG-0015&lt;/a&gt;, whose beacon now decides between dim and dark&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The stand was lit all day: dim whenever nothing played, and from iTunes'&#10;cover whenever iTunes did. It is an LP stand, and from this change it is lit&#10;by records only.&lt;/p&gt;</description></item><item><title>CHG-0020: The Stand Starts Dark, Blinks, Opens and Scans</title><link>https://cdeever.github.io/eds/docs/changes/2026/0020-the-stand-starts-dark-blinks-opens-and-scans/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0020-the-stand-starts-dark-blinks-opens-and-scans/</guid><description>&lt;h1 id="chg-0020-the-stand-starts-dark-blinks-opens-and-scans"&gt;CHG-0020: The Stand Starts Dark, Blinks, Opens and Scans&lt;a class="anchor" href="#chg-0020-the-stand-starts-dark-blinks-opens-and-scans"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-13&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The LP stand (&lt;code&gt;lp-stand-01&lt;/code&gt;), flashed; &lt;code&gt;nowplayd&lt;/code&gt;, &lt;code&gt;lightd&lt;/code&gt; and the console on the workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make build flash&lt;/code&gt; in &lt;code&gt;firmware/lp-stand&lt;/code&gt;; &lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a stand flashed with something that does not start, which is put right by flashing the build before it; or an opening that is too much for a living room&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0029-the-stand-starts-dark-and-blinks-what-is-wrong/"&gt;ADR-0029&lt;/a&gt; and &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0030-a-piece-of-music-can-have-a-look-from-any-source/"&gt;ADR-0030&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0019-the-stand-is-for-records/"&gt;CHG-0019&lt;/a&gt;, which made the room dark and left the stand&amp;rsquo;s own start dim&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Three things asked for in one afternoon, and one flash.&lt;/p&gt;</description></item><item><title>CHG-0021: A New Sound Card for the Turntable</title><link>https://cdeever.github.io/eds/docs/changes/2026/0021-a-new-sound-card-for-the-turntable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0021-a-new-sound-card-for-the-turntable/</guid><description>&lt;h1 id="chg-0021-a-new-sound-card-for-the-turntable"&gt;CHG-0021: A New Sound Card for the Turntable&lt;a class="anchor" href="#chg-0021-a-new-sound-card-for-the-turntable"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-13&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Configuration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;npagent&lt;/code&gt; on the agent Pi (&lt;code&gt;np-relay&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/relay turntable DEVICE=plughw:CODEC&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. One line of the agent&amp;rsquo;s settings, and a restart of the agent&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0021-the-turntable-is-identified-by-listening/"&gt;ADR-0021&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0013-the-turntable-driver/"&gt;CHG-0013&lt;/a&gt;, which named the first input; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0019-the-stand-is-for-records/"&gt;CHG-0019&lt;/a&gt;, since which only a record lights the stand&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The sound card the turntable is heard through was replaced with another USB&#10;adapter. The agent was still told to listen to the old one by name,&#10;&lt;code&gt;plughw:UA4FX&lt;/code&gt;, which was no longer there, so the turntable&amp;rsquo;s driver heard&#10;nothing and reported nothing. With the stand lit for records only, that was&#10;a stand that did nothing for a record.&lt;/p&gt;</description></item><item><title>CHG-0022: Spotify Shown, and On Again</title><link>https://cdeever.github.io/eds/docs/changes/2026/0022-spotify-shown-and-on-again/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0022-spotify-shown-and-on-again/</guid><description>&lt;h1 id="chg-0022-spotify-shown-and-on-again"&gt;CHG-0022: Spotify Shown, and On Again&lt;a class="anchor" href="#chg-0022-spotify-shown-and-on-again"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-13&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;npagent&lt;/code&gt; on the agent Pi (&lt;code&gt;np-relay&lt;/code&gt;); &lt;code&gt;nowplayd&lt;/code&gt; on the workload&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/relay push&lt;/code&gt;; &lt;code&gt;make -C deploy/relay drivers DRIVERS=itunes,spotify,turntable&lt;/code&gt;; &lt;code&gt;make -C deploy units&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the Spotify authorization given on 2026-10-11 no longer stands, and the driver stops and says so; or the agent does not come back after the push&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0031-spotify-is-shown-like-itunes/"&gt;ADR-0031&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0011-spotify-turned-off/"&gt;CHG-0011&lt;/a&gt;, which this undoes; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0004-spotify-on-the-agent-pi/"&gt;CHG-0004&lt;/a&gt;; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0020-the-stand-starts-dark-blinks-opens-and-scans/"&gt;CHG-0020&lt;/a&gt;, whose scanner is what was missed from Spotify&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Spotify was reported with no cover, and its driver was off. The driver now&#10;takes the album&amp;rsquo;s picture, Spotify is kept off the stand the way iTunes is,&#10;and the driver is on again.&lt;/p&gt;</description></item><item><title>CHG-0023: Spotify Takes Commands</title><link>https://cdeever.github.io/eds/docs/changes/2026/0023-spotify-takes-commands/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0023-spotify-takes-commands/</guid><description>&lt;h1 id="chg-0023-spotify-takes-commands"&gt;CHG-0023: Spotify Takes Commands&lt;a class="anchor" href="#chg-0023-spotify-takes-commands"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-13&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;npagent&lt;/code&gt; on the agent Pi (&lt;code&gt;np-relay&lt;/code&gt;); the agent&amp;rsquo;s broker account, in the tenant; the Spotify authorization&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/relay push&lt;/code&gt;; &lt;code&gt;make apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make -C deploy/relay spotify AGAIN=1&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the authorization is given again and something about it fails, leaving Spotify unreported until it is done once more&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0032-spotify-takes-commands/"&gt;ADR-0032&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0022-spotify-shown-and-on-again/"&gt;CHG-0022&lt;/a&gt;, which put Spotify on the cover screen; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0012-the-cover-screen/"&gt;CHG-0012&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The cover screen&amp;rsquo;s buttons did nothing while Spotify was current. The&#10;Spotify driver now carries out play or pause, next, previous and volume&#10;through Spotify&amp;rsquo;s Web API. Three things have to change for a press to&#10;arrive: the agent, the broker account that lets it hear the command, and&#10;what Spotify has authorized it to do.&lt;/p&gt;</description></item><item><title>CHG-0024: Spotify Turned Off Again</title><link>https://cdeever.github.io/eds/docs/changes/2026/0024-spotify-turned-off-again/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0024-spotify-turned-off-again/</guid><description>&lt;h1 id="chg-0024-spotify-turned-off-again"&gt;CHG-0024: Spotify Turned Off Again&lt;a class="anchor" href="#chg-0024-spotify-turned-off-again"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-16&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Configuration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-16&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;the agent Pi: one line of its settings, and its agent restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/relay drivers DRIVERS=itunes,turntable&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the agent not coming back, which would stop iTunes and the turntable being followed too&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0031-spotify-is-shown-like-itunes/"&gt;ADR-0031&lt;/a&gt; and &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0032-spotify-takes-commands/"&gt;ADR-0032&lt;/a&gt;, unchanged&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0022-spotify-shown-and-on-again/"&gt;CHG-0022&lt;/a&gt;, which turned it on; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0011-spotify-turned-off/"&gt;CHG-0011&lt;/a&gt;, the same change once before&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The Spotify driver was asking Spotify what is playing six times a minute,&#10;all day, as the &lt;strong&gt;Outside Services&lt;/strong&gt; count showed. Its owner does not want&#10;that for now and will come back to it. The agent Pi now runs the iTunes and&#10;turntable drivers only. Nothing is removed: the driver, its authorization on&#10;the Pi, the broker grants and the app at Spotify all stay, and one command&#10;turns it back on.&lt;/p&gt;</description></item><item><title>CHG-0025: Presence Repeated, and Updates Through the Broker</title><link>https://cdeever.github.io/eds/docs/changes/2026/0025-presence-repeated-and-updates-through-the-broker/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0025-presence-repeated-and-updates-through-the-broker/</guid><description>&lt;h1 id="chg-0025-presence-repeated-and-updates-through-the-broker"&gt;CHG-0025: Presence Repeated, and Updates Through the Broker&lt;a class="anchor" href="#chg-0025-presence-repeated-and-updates-through-the-broker"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-16 (planned)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-17&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The tenant&amp;rsquo;s broker accounts; &lt;code&gt;cover-screen-01&lt;/code&gt;, &lt;code&gt;turntable-power-01&lt;/code&gt; and &lt;code&gt;lp-stand-01&lt;/code&gt;, by cable; lightd, nowplayd and the console on the services workload; &lt;code&gt;npagent&lt;/code&gt; on the agent Pi&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make plan apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make build flash&lt;/code&gt; in each firmware; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;; &lt;code&gt;make -C deploy/relay push&lt;/code&gt;; &lt;code&gt;make ota&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. Most likely to go wrong: the plan replacing a device&amp;rsquo;s broker account instead of changing it, which issues a new password and strands that device until it is reprovisioned&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0034-presence-is-heard-not-remembered/"&gt;ADR-0034&lt;/a&gt; and &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0035-firmware-is-updated-through-the-broker/"&gt;ADR-0035&lt;/a&gt;, which this is the evidence for&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0024-spotify-turned-off-again/"&gt;CHG-0024&lt;/a&gt;, the day&amp;rsquo;s other change&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Two decisions go out together, because the firmware for both goes on by the&#10;same cable.&lt;/p&gt;</description></item><item><title>CHG-0026: The Cover Screen Sleeps</title><link>https://cdeever.github.io/eds/docs/changes/2026/0026-the-cover-screen-sleeps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0026-the-cover-screen-sleeps/</guid><description>&lt;h1 id="chg-0026-the-cover-screen-sleeps"&gt;CHG-0026: The Cover Screen Sleeps&lt;a class="anchor" href="#chg-0026-the-cover-screen-sleeps"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-17&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-17&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;cover-screen-01&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make build ota&lt;/code&gt; in &lt;code&gt;firmware/cover-screen&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the screen sleeping when someone is there, because a source that should count does not name itself in &lt;code&gt;current&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0036-the-screen-sleeps-when-nothing-plays/"&gt;ADR-0036&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0025-presence-repeated-and-updates-through-the-broker/"&gt;CHG-0025&lt;/a&gt;, which made updates over the air possible&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The cover screen is lit all the time, showing a drawn record to nobody when&#10;nothing plays. After this, it goes dark five minutes after &lt;code&gt;current&lt;/code&gt; last&#10;said something was playing, and lights again for music, a touch, or a lost&#10;broker.&lt;/p&gt;</description></item><item><title>CHG-0027: The Beacon on an ESP32</title><link>https://cdeever.github.io/eds/docs/changes/2026/0027-the-beacon-on-an-esp32/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0027-the-beacon-on-an-esp32/</guid><description>&lt;h1 id="chg-0027-the-beacon-on-an-esp32"&gt;CHG-0027: The Beacon on an ESP32&lt;a class="anchor" href="#chg-0027-the-beacon-on-an-esp32"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-18&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-18&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;turntable-power-01&lt;/code&gt;: a new board, a plain ESP32, in place of the ESP32-S2&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make build flash provision&lt;/code&gt; in &lt;code&gt;firmware/power-beacon&lt;/code&gt;, by cable&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the old S2 powered at the same time as the new board. Both log in as &lt;code&gt;turntable-power-01&lt;/code&gt;, the broker takes the account from one for the other, and each time says &lt;code&gt;offline&lt;/code&gt; for the turntable&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0023-a-source-that-is-switched-on-holds-the-stand/"&gt;ADR-0023&lt;/a&gt;, unchanged: any ESP32 with WiFi and 4 MB will do&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0015-the-turntables-power-beacon/"&gt;CHG-0015&lt;/a&gt;, the first beacon; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0025-presence-repeated-and-updates-through-the-broker/"&gt;CHG-0025&lt;/a&gt;, where the S2 needed an external antenna to join from the turntable&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The beacon moves from an ESP32-S2 to a plain ESP32 that fits the case its&#10;owner bought. The case has no opening for an external antenna, and the S2&#10;could not join from the turntable without one. The new board&amp;rsquo;s antenna is&#10;on the board.&lt;/p&gt;</description></item><item><title>CHG-0028: The Back End on One Pi, Tried on DVNTM</title><link>https://cdeever.github.io/eds/docs/changes/2026/0028-the-back-end-on-one-pi-on-dvntm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0028-the-back-end-on-one-pi-on-dvntm/</guid><description>&lt;h1 id="chg-0028-the-back-end-on-one-pi-tried-on-dvntm"&gt;CHG-0028: The Back End on One Pi, Tried on DVNTM&lt;a class="anchor" href="#chg-0028-the-back-end-on-one-pi-tried-on-dvntm"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-18&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;dv02rpi003p01&lt;/code&gt; (a Pi 4, wired to DVNTM&amp;rsquo;s IoT segment on &lt;code&gt;Gi1/0/11&lt;/code&gt;, &lt;code&gt;10.20.30.13&lt;/code&gt;, and on DVNT-CORE by Wi-Fi), with a new card. Nothing of the tenant&amp;rsquo;s, the workload&amp;rsquo;s, the relay Pi&amp;rsquo;s or the devices'&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend image fetch&lt;/code&gt;; the card flashed by its owner; &lt;code&gt;make card&lt;/code&gt;; first boot; &lt;code&gt;make status&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the card&amp;rsquo;s first boot not finishing (&lt;code&gt;deevnet-kit&lt;/code&gt; or &lt;code&gt;eds-backend-setup&lt;/code&gt;), which leaves a Pi to reflash and nothing else touched&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0033-the-whole-back-end-on-one-pi/"&gt;ADR-0033&lt;/a&gt;, whose evidence this is&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deevnet CHG-0048, which gave &lt;code&gt;dv02rpi003p01&lt;/code&gt; its switch port; Deevnet CHG-0049, which rebuilt the take-home image this is built on&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The whole of EdS on one Pi, beside the tenant: its own broker, log store,&#10;Grafana, the four services and the agent. It is tried on the kit&amp;rsquo;s network&#10;first, where the devices are, and goes to the home network only once it&#10;works.&lt;/p&gt;</description></item><item><title>CHG-0029: The Turntable's Album by What Is on It</title><link>https://cdeever.github.io/eds/docs/changes/2026/0029-the-turntables-album-by-what-is-on-it/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0029-the-turntables-album-by-what-is-on-it/</guid><description>&lt;h1 id="chg-0029-the-turntables-album-by-what-is-on-it"&gt;CHG-0029: The Turntable&amp;rsquo;s Album by What Is on It&lt;a class="anchor" href="#chg-0029-the-turntables-album-by-what-is-on-it"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-19&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;dv01rpi001p01&lt;/code&gt; (&lt;code&gt;192.168.2.40&lt;/code&gt;): nowplayd and npagent, with the other services restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend push PI=192.168.2.40&lt;/code&gt; from &lt;code&gt;main&lt;/code&gt; at &lt;code&gt;44828a9&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a lookup that names the wrong album for a record not in the collection; the stand is lit from the wrong sleeve until the next track&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0038-the-turntable-names-the-original-album-by-what-is-on-it/"&gt;ADR-0038&lt;/a&gt;, whose evidence this is&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0028-the-back-end-on-one-pi-on-dvntm/"&gt;CHG-0028&lt;/a&gt;, the Pi this goes to&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;On the first evening at home, &lt;em&gt;Animals&lt;/em&gt; put on a minute after &lt;em&gt;The Dark Side&#10;of the Moon&lt;/em&gt; kept &lt;em&gt;Dark Side&lt;/em&gt;&amp;rsquo;s rainbow: the driver held a side&amp;rsquo;s first&#10;album for ten minutes of silence. ADR-0038 names the album by what is on the&#10;record instead, and prefers the original album. This puts it on the Pi.&lt;/p&gt;</description></item><item><title>CHG-0030: The Console Switches the Stand</title><link>https://cdeever.github.io/eds/docs/changes/2026/0030-the-console-switches-the-stand/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0030-the-console-switches-the-stand/</guid><description>&lt;h1 id="chg-0030-the-console-switches-the-stand"&gt;CHG-0030: The Console Switches the Stand&lt;a class="anchor" href="#chg-0030-the-console-switches-the-stand"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-19&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;dv01rpi001p01&lt;/code&gt; (&lt;code&gt;192.168.2.40&lt;/code&gt;): nowplayd, the console, the &lt;code&gt;nowplayd&lt;/code&gt; and &lt;code&gt;console&lt;/code&gt; broker accounts; the other services restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend push PI=192.168.2.40&lt;/code&gt; from branch &lt;code&gt;adr-0039-stand-for-every-source&lt;/code&gt; (PR #60), before it is merged&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the two accounts made again with grants the broker refuses, and nowplayd or the console unable to log in until they are put back&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0039-the-console-can-light-the-stand-for-every-source/"&gt;ADR-0039&lt;/a&gt;, whose evidence this is&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0029-the-turntables-album-by-what-is-on-it/"&gt;CHG-0029&lt;/a&gt;, the push before this one&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The console gets a switch that lights the stand for every source, for working&#10;on the stand&amp;rsquo;s looks with iTunes and Spotify. Pushed from the PR&amp;rsquo;s branch so&#10;it can be tried before it is merged.&lt;/p&gt;</description></item><item><title>CHG-0031: The Turntable Heard Through a UFO202</title><link>https://cdeever.github.io/eds/docs/changes/2026/0031-the-turntable-heard-through-a-ufo202/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0031-the-turntable-heard-through-a-ufo202/</guid><description>&lt;h1 id="chg-0031-the-turntable-heard-through-a-ufo202"&gt;CHG-0031: The Turntable Heard Through a UFO202&lt;a class="anchor" href="#chg-0031-the-turntable-heard-through-a-ufo202"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-21&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Configuration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-21&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;dv02rpi003p01&lt;/code&gt;, the back-end Pi: one line of its agent&amp;rsquo;s settings, and its agent restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend turntable DEVICE=plughw:CODEC PI=192.168.2.40&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the agent not coming back, which would stop iTunes being followed too&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0021-the-turntable-is-identified-by-listening/"&gt;ADR-0021&lt;/a&gt;, unchanged&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0028-the-back-end-on-one-pi-on-dvntm/"&gt;CHG-0028&lt;/a&gt;, which named &lt;code&gt;plughw:UA4FX&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The turntable was heard through a Roland UA-4FX, and the Pi&amp;rsquo;s agent listened&#10;to &lt;code&gt;plughw:UA4FX&lt;/code&gt;. Its owner found a Behringer UFO202 and plugged it into the&#10;Pi in the UA-4FX&amp;rsquo;s place. ALSA names it&#10;&lt;code&gt;CODEC&lt;/code&gt; (card 3, &lt;em&gt;USB Audio CODEC&lt;/em&gt;), and the UA-4FX is no longer there, so the&#10;agent is told the new name. Nothing else changes: the same line-level feed&#10;from the selector, the same driver, the same recognizer.&lt;/p&gt;</description></item><item><title>CHG-0032: American Idiot Has a Look</title><link>https://cdeever.github.io/eds/docs/changes/2026/0032-american-idiot-has-a-look/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0032-american-idiot-has-a-look/</guid><description>&lt;h1 id="chg-0032-american-idiot-has-a-look"&gt;CHG-0032: American Idiot Has a Look&lt;a class="anchor" href="#chg-0032-american-idiot-has-a-look"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-23&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-23&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;dv02rpi003p01&lt;/code&gt;, the back-end Pi: nowplayd and lightd replaced, and the four services restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend push PI=192.168.2.40&lt;/code&gt;, from #60&amp;rsquo;s branch with this change on it&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a service not coming back after the push, which leaves the stand dark until it is pushed again&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0019-an-album-can-have-a-look-of-its-own/"&gt;ADR-0019&lt;/a&gt;, a second album on its list&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0030-the-console-switches-the-stand/"&gt;CHG-0030&lt;/a&gt;, whose branch is what runs on the Pi and is pushed again here&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;Green Day&amp;rsquo;s &lt;em&gt;American Idiot&lt;/em&gt; was lit from the owner&amp;rsquo;s own pressing once the&#10;record was added to the Discogs collection. That sleeve&amp;rsquo;s picture is a&#10;photograph, and lightd read it as one red in four shades&#10;(&lt;code&gt;#df0040 56%, #b90237 16%, #92122f 14%, #671c2b 14%&lt;/code&gt;), which a strip of LEDs&#10;shows as one red going nowhere. Deezer&amp;rsquo;s clean scan of the same sleeve, a few&#10;minutes earlier, had read as two reds with the pale pink of the hand and a&#10;salmon among them (&lt;code&gt;#d90018 45%, #e22f28 31%, #efb6b0 13%, #e35f55 12%&lt;/code&gt;), and&#10;its owner liked that better.&lt;/p&gt;</description></item><item><title>CHG-0033: An Album Asked For on the Bus</title><link>https://cdeever.github.io/eds/docs/changes/2026/0033-an-album-asked-for-on-the-bus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0033-an-album-asked-for-on-the-bus/</guid><description>&lt;h1 id="chg-0033-an-album-asked-for-on-the-bus"&gt;CHG-0033: An Album Asked For on the Bus&lt;a class="anchor" href="#chg-0033-an-album-asked-for-on-the-bus"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-23&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The tenant&amp;rsquo;s services workload (&lt;code&gt;services.eds.mobile.deevnet.net&lt;/code&gt;): the four services rebuilt and restarted. &lt;code&gt;dv02rpi002p01&lt;/code&gt;, the relay: &lt;code&gt;npagent&lt;/code&gt; replaced&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt; and &lt;code&gt;make -C deploy/relay push&lt;/code&gt;, from the branch &lt;code&gt;voice-play-album&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a service not coming back, which leaves the mobile site&amp;rsquo;s stand and screen without a current track until shipped again. The home back-end Pi is not touched&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0040-a-request-can-name-an-album-to-play/"&gt;ADR-0040&lt;/a&gt;, whose command this puts on the bus&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0032-american-idiot-has-a-look/"&gt;CHG-0032&lt;/a&gt;, the last change, made on the back-end Pi&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;play_album&lt;/code&gt; is the first command that chooses what plays&#10;(&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0040-a-request-can-name-an-album-to-play/"&gt;ADR-0040&lt;/a&gt;).&#10;&lt;code&gt;npagent play-album&lt;/code&gt; has already played Van Halen&amp;rsquo;s first album from the&#10;relay by hand; this puts the same request behind the bus. nowplayd passes&#10;&lt;code&gt;play_album&lt;/code&gt; to &lt;code&gt;itunes&lt;/code&gt; whatever is current, and the iTunes driver asks&#10;for the album and then asks what plays.&lt;/p&gt;</description></item><item><title>CHG-0034: voiced and scribe on the Workload</title><link>https://cdeever.github.io/eds/docs/changes/2026/0034-voiced-and-scribe-on-the-workload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0034-voiced-and-scribe-on-the-workload/</guid><description>&lt;h1 id="chg-0034-voiced-and-scribe-on-the-workload"&gt;CHG-0034: voiced and scribe on the Workload&lt;a class="anchor" href="#chg-0034-voiced-and-scribe-on-the-workload"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The tenant&amp;rsquo;s Terraform on the mobile site&amp;rsquo;s API: broker accounts for &lt;code&gt;voiced&lt;/code&gt; and &lt;code&gt;respeaker-01&lt;/code&gt; and the device &lt;code&gt;respeaker-01&lt;/code&gt; created; &lt;code&gt;console&lt;/code&gt; and &lt;code&gt;nowplayd&lt;/code&gt; given &lt;code&gt;nowplaying/stand&lt;/code&gt;. The services workload: &lt;code&gt;eds-scribe&lt;/code&gt; and &lt;code&gt;eds-voiced&lt;/code&gt; added, the other four rebuilt and restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C infra/deevnet-tenant-eds apply&lt;/code&gt;, then &lt;code&gt;make -C deploy kit-env deploy WHERE=builder&lt;/code&gt;, from the branch &lt;code&gt;voice-play-album&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. The workload has two cores and two gigabytes, and scribe&amp;rsquo;s model takes a few hundred megabytes of it: most likely to go wrong is memory, which would stop a service. &lt;code&gt;eds-scribe&lt;/code&gt; is held to 900 MB for that reason. Updating &lt;code&gt;console&lt;/code&gt; and &lt;code&gt;nowplayd&lt;/code&gt; in place keeps their passwords&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0042-a-request-is-heard-on-the-workload/"&gt;ADR-0042&lt;/a&gt;; &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0039-the-console-can-light-the-stand-for-every-source/"&gt;ADR-0039&lt;/a&gt;, whose grant this applies to the tenant at last&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0033-an-album-asked-for-on-the-bus/"&gt;CHG-0033&lt;/a&gt;, which put &lt;code&gt;play_album&lt;/code&gt; on the bus; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0030-the-console-switches-the-stand/"&gt;CHG-0030&lt;/a&gt;, which switched the stand on the back-end Pi only&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;A spoken request is written down by &lt;code&gt;scribe&lt;/code&gt; and made a command by &lt;code&gt;voiced&lt;/code&gt;&#10;(&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0042-a-request-is-heard-on-the-workload/"&gt;ADR-0042&lt;/a&gt;).&#10;Both have run on a Mac against the development broker. This puts them on the&#10;workload, with &lt;code&gt;voiced&lt;/code&gt;&amp;rsquo;s own broker account, and registers the reSpeaker,&#10;whose account is the one that may publish a request.&lt;/p&gt;</description></item><item><title>CHG-0035: Only Words scribe Is Sure Of</title><link>https://cdeever.github.io/eds/docs/changes/2026/0035-only-words-scribe-is-sure-of/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0035-only-words-scribe-is-sure-of/</guid><description>&lt;h1 id="chg-0035-only-words-scribe-is-sure-of-and-the-respeaker-asked-from-its-console"&gt;CHG-0035: Only Words scribe Is Sure Of, and the reSpeaker Asked From Its Console&lt;a class="anchor" href="#chg-0035-only-words-scribe-is-sure-of-and-the-respeaker-asked-from-its-console"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The services workload: the six services rebuilt, &lt;code&gt;eds-scribe&lt;/code&gt; and &lt;code&gt;eds-voiced&lt;/code&gt; changed, all restarted. &lt;code&gt;respeaker-01&lt;/code&gt;: firmware flashed by cable&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;; &lt;code&gt;make -C firmware/ears build flash&lt;/code&gt;, from &lt;code&gt;e9ed753&lt;/code&gt; on &lt;code&gt;voice-play-album&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: scribe&amp;rsquo;s thresholds refusing speech it should take, which is a request said again, not a record played wrongly&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0042-a-request-is-heard-on-the-workload/"&gt;ADR-0042&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0043-the-respeaker-runs-firmware-of-edss-own/"&gt;ADR-0043&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/incidents/2026/0001-the-beatles-played-for-a-request-nobody-made/"&gt;INC-0001&lt;/a&gt;, which this corrects&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The reSpeaker&amp;rsquo;s first request played &lt;em&gt;Abbey Road&lt;/em&gt;, which nobody asked for&#10;(&lt;a href="https://cdeever.github.io/eds/docs/incidents/2026/0001-the-beatles-played-for-a-request-nobody-made/"&gt;INC-0001&lt;/a&gt;):&#10;scribe&amp;rsquo;s model wrote its own prompt back, a request in words, and voiced&#10;acted on it. scribe&amp;rsquo;s prompt is now a list of names, and scribe says whether&#10;the words are worth acting on, by Whisper&amp;rsquo;s own thresholds; voiced acts on&#10;nothing else.&lt;/p&gt;</description></item><item><title>CHG-0036: The reSpeaker Wakes to "Hey Jarvis"</title><link>https://cdeever.github.io/eds/docs/changes/2026/0036-the-respeaker-wakes-to-hey-jarvis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0036-the-respeaker-wakes-to-hey-jarvis/</guid><description>&lt;h1 id="chg-0036-the-respeaker-wakes-to-hey-jarvis-and-hears-a-request-until-it-ends"&gt;CHG-0036: The reSpeaker Wakes to &amp;ldquo;Hey Jarvis&amp;rdquo;, and Hears a Request Until It Ends&lt;a class="anchor" href="#chg-0036-the-respeaker-wakes-to-hey-jarvis-and-hears-a-request-until-it-ends"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;respeaker-01&lt;/code&gt;: firmware flashed by cable. The services workload: &lt;code&gt;eds-voiced&lt;/code&gt; rebuilt with the others and all restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C firmware/ears build flash&lt;/code&gt;; &lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the device waking for something that is not its name, which sends a few seconds of the room; voiced acts only on a request it is sure of (INC-0001)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0043-the-respeaker-runs-firmware-of-edss-own/"&gt;ADR-0043&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0035-only-words-scribe-is-sure-of/"&gt;CHG-0035&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The reSpeaker listens for a wake word: microWakeWord&amp;rsquo;s &amp;ldquo;Hey Jarvis&amp;rdquo;, ESPHome&amp;rsquo;s&#10;model, on TensorFlow Lite Micro with the audio frontend it was trained on.&#10;What follows it is heard until the speaker stops - 0.7 s quieter than the&#10;room by 10 dB, at most six seconds - and sent, with the 350 ms before the&#10;wake was decided on, so that a &amp;ldquo;play&amp;rdquo; said straight after keeps its P. voiced&#10;allows a word or two before &amp;ldquo;play&amp;rdquo;, for the end of the wake word that comes&#10;with it, but never a negation.&lt;/p&gt;</description></item><item><title>CHG-0037: A Request Answered Sooner</title><link>https://cdeever.github.io/eds/docs/changes/2026/0037-a-request-answered-sooner/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0037-a-request-answered-sooner/</guid><description>&lt;h1 id="chg-0037-a-request-answered-sooner"&gt;CHG-0037: A Request Answered Sooner&lt;a class="anchor" href="#chg-0037-a-request-answered-sooner"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;respeaker-01&lt;/code&gt;: firmware flashed by cable. The services workload: all six rebuilt, &lt;code&gt;eds-voiced&lt;/code&gt;&amp;rsquo;s unit changed and &lt;code&gt;/var/lib/eds-voiced&lt;/code&gt; made&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C firmware/ears build flash&lt;/code&gt;; &lt;code&gt;make -C deploy deploy WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a request cut before its last word, which is a request said again&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0042-a-request-is-heard-on-the-workload/"&gt;ADR-0042&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0043-the-respeaker-runs-firmware-of-edss-own/"&gt;ADR-0043&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0036-the-respeaker-wakes-to-hey-jarvis/"&gt;CHG-0036&lt;/a&gt;, whose request took 21 s from the wake word to the music&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;From &amp;ldquo;Hey Jarvis&amp;rdquo; to the music took 21 s in CHG-0036: 6.4 s heard, because&#10;the room never got as quiet as the floor learned from its quietest moments;&#10;5.3 s to send 200 KB at -80 dBm; 4.6 s to write down; 5 s to count&#10;Aerosmith&amp;rsquo;s albums in MusicBrainz after a restart had forgotten them.&lt;/p&gt;</description></item><item><title>CHG-0038: A Misheard "Play", and a Longer Pre-roll</title><link>https://cdeever.github.io/eds/docs/changes/2026/0038-a-misheard-play-and-a-longer-pre-roll/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0038-a-misheard-play-and-a-longer-pre-roll/</guid><description>&lt;h1 id="chg-0038-a-misheard-play-is-taken-for-one-where-the-rest-is-an-album-by-its-place-and-the-pre-roll-is-600-ms"&gt;CHG-0038: A Misheard &amp;ldquo;Play&amp;rdquo; Is Taken for One Where the Rest Is an Album by Its Place, and the Pre-roll Is 600 ms&lt;a class="anchor" href="#chg-0038-a-misheard-play-is-taken-for-one-where-the-rest-is-an-album-by-its-place-and-the-pre-roll-is-600-ms"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The services workload: nowplayd and voiced sent and all restarted. &lt;code&gt;respeaker-01&lt;/code&gt;: flashed by cable&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;, the first with &lt;code&gt;load.sh&lt;/code&gt; (&lt;a href="https://cdeever.github.io/eds/docs/incidents/2026/0002-deploys-hung-the-core-router/"&gt;INC-0002&lt;/a&gt;); &lt;code&gt;make -C firmware/ears build flash&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a sentence that is not a request read as one; only &amp;ldquo;X&amp;rsquo;s Nth album&amp;rdquo; and &amp;ldquo;the Nth album by X&amp;rdquo; are read behind a misheard &amp;ldquo;play&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0042-a-request-is-heard-on-the-workload/"&gt;ADR-0042&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0043-the-respeaker-runs-firmware-of-edss-own/"&gt;ADR-0043&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0037-a-request-answered-sooner/"&gt;CHG-0037&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;After CHG-0037 and ADR-0044, &amp;ldquo;Hey Jarvis, play Aerosmith&amp;rsquo;s first album&amp;rdquo;&#10;played in 8 s from the wake word: 2 s heard, sent in 89 ms, 4 s to write&#10;down, 1.7 s to count. The music dipped while it listened. &amp;ldquo;Play Van Halen&amp;rsquo;s&#10;first album&amp;rdquo;, straight after, was written &amp;ldquo;Tae Van Halen&amp;rsquo;s first album.&amp;rdquo;&#10;and was not a request.&lt;/p&gt;</description></item><item><title>CHG-0039: scribe in Two, and "Hey Jarvis" in Its Prompt</title><link>https://cdeever.github.io/eds/docs/changes/2026/0039-scribe-in-two-and-hey-jarvis-in-its-prompt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0039-scribe-in-two-and-hey-jarvis-in-its-prompt/</guid><description>&lt;h1 id="chg-0039-scribe-is-a-base-sent-once-and-its-code-built-on-the-workload-and-hey-jarvis-is-in-its-prompt"&gt;CHG-0039: scribe Is a Base Sent Once and Its Code Built on the Workload, and &amp;ldquo;Hey Jarvis&amp;rdquo; Is in Its Prompt&lt;a class="anchor" href="#chg-0039-scribe-is-a-base-sent-once-and-its-code-built-on-the-workload-and-hey-jarvis-is-in-its-prompt"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The services workload: &lt;code&gt;eds-scribe-base&lt;/code&gt; loaded, &lt;code&gt;eds-scribe&lt;/code&gt; built there, nowplayd and voiced sent, all restarted&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. Most likely to go wrong: the core router under the base&amp;rsquo;s one transfer (INC-0002), which is compressed to 256 MB and held to 5 MB/s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0042-a-request-is-heard-on-the-workload/"&gt;ADR-0042&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/incidents/2026/0002-deploys-hung-the-core-router/"&gt;INC-0002&lt;/a&gt;, whose follow-up this is; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0038-a-misheard-play-and-a-longer-pre-roll/"&gt;CHG-0038&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The end of the wake word, kept with each request, was written &amp;ldquo;Lee Jarvis&amp;rdquo;,&#10;&amp;ldquo;Jay Jarrus&amp;rdquo;, &amp;ldquo;Travis&amp;rdquo;, &amp;ldquo;The band was very generous&amp;rdquo;, and the request after&#10;it was misheard with it. With &amp;ldquo;Hey Jarvis&amp;rdquo; in scribe&amp;rsquo;s prompt, the same&#10;recordings, cut as the device cuts them, were written &amp;ldquo;Jarvis,&amp;rdquo; each time,&#10;and nothing else changed.&lt;/p&gt;</description></item><item><title>CHG-0040: The Owner's Library for voiced</title><link>https://cdeever.github.io/eds/docs/changes/2026/0040-the-owners-library-for-voiced/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0040-the-owners-library-for-voiced/</guid><description>&lt;h1 id="chg-0040-voiced-matches-requests-against-an-index-of-the-owners-library"&gt;CHG-0040: voiced Matches Requests Against an Index of the Owner&amp;rsquo;s Library&lt;a class="anchor" href="#chg-0040-voiced-matches-requests-against-an-index-of-the-owners-library"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-in-progress"&gt;In progress&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The services workload: voiced sent and its unit replaced; &lt;code&gt;library.json&lt;/code&gt; copied to &lt;code&gt;/var/lib/eds-voiced&lt;/code&gt;. The relay Pi: npagent, for the driver&amp;rsquo;s title matching&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;, &lt;code&gt;make -C deploy units&lt;/code&gt;, &lt;code&gt;make -C deploy library XML=…&lt;/code&gt;; the relay&amp;rsquo;s push&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a near but wrong artist or album chosen; without the index, voiced is as it was&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0046-requests-are-matched-against-the-owners-library/"&gt;ADR-0046&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0039-scribe-in-two-and-hey-jarvis-in-its-prompt/"&gt;CHG-0039&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;voiced gains &lt;code&gt;NP_LIBRARY&lt;/code&gt;, an index of the owner&amp;rsquo;s iTunes library made from&#10;its XML, and chooses from it the artist and album a request means, by the&#10;library&amp;rsquo;s own names. The driver asks iTunes for the whole title first and&#10;its plain start after.&lt;/p&gt;</description></item><item><title>CHG-0041: voiced Asks eds-inventory</title><link>https://cdeever.github.io/eds/docs/changes/2026/0041-voiced-asks-eds-inventory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0041-voiced-asks-eds-inventory/</guid><description>&lt;h1 id="chg-0041-voiced-asks-eds-inventory-for-the-owners-albums"&gt;CHG-0041: voiced Asks eds-inventory for the Owner&amp;rsquo;s Albums&lt;a class="anchor" href="#chg-0041-voiced-asks-eds-inventory-for-the-owners-albums"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10; 2026-10-24&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The services workload: eds-inventory installed beside EdS&amp;rsquo;s services (eds-inventory&amp;rsquo;s CHG-0001); voiced sent and its unit replaced&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;In eds-inventory: &lt;code&gt;make -C deploy image load unit WHERE=builder&lt;/code&gt;, then &lt;code&gt;make -C deploy library XML=…&lt;/code&gt;. Here: &lt;code&gt;make -C deploy ship WHERE=builder&lt;/code&gt;, &lt;code&gt;make -C deploy units&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the inventory not answering, and albums guessed at as with no library; &lt;code&gt;make deploy&lt;/code&gt;&amp;rsquo;s restart of every EdS service&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0047-voiced-asks-eds-inventory/"&gt;ADR-0047&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0040-the-owners-library-for-voiced/"&gt;CHG-0040&lt;/a&gt;, the index this replaces&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;eds-inventory&amp;rsquo;s inventoryd goes onto the services workload with the owner&amp;rsquo;s&#10;iTunes library collected into it, and voiced is pointed at it with&#10;&lt;code&gt;NP_INVENTORY_URL&lt;/code&gt;. &lt;code&gt;library.json&lt;/code&gt; stays where it is, unread while the&#10;inventory is configured.&lt;/p&gt;</description></item><item><title>CHG-0042: The Home Pi Becomes a Deevnet Pi</title><link>https://cdeever.github.io/eds/docs/changes/2026/0042-the-home-pi-becomes-a-deevnet-pi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0042-the-home-pi-becomes-a-deevnet-pi/</guid><description>&lt;h1 id="chg-0042-the-home-pi-becomes-a-deevnet-pi-and-the-devices-hold-both-sites"&gt;CHG-0042: The Home Pi Becomes a Deevnet Pi, and the Devices Hold Both Sites&lt;a class="anchor" href="#chg-0042-the-home-pi-becomes-a-deevnet-pi-and-the-devices-hold-both-sites"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-26&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Migration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;192.168.2.40&lt;/code&gt; on DVNT-CORE, with a new card named &lt;code&gt;dv01rpi001p01&lt;/code&gt; (the card in it now calls itself &lt;code&gt;dv02rpi003p01&lt;/code&gt;); &lt;code&gt;turntable-power-01&lt;/code&gt;, &lt;code&gt;cover-screen-01&lt;/code&gt;, &lt;code&gt;lp-stand-01&lt;/code&gt;, &lt;code&gt;respeaker-01&lt;/code&gt;; the tenant&amp;rsquo;s Terraform (one &lt;code&gt;deevnet_certificate&lt;/code&gt;); the home network&amp;rsquo;s DNS&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend image fetch card&lt;/code&gt;; &lt;code&gt;deevnet-kit cert request&lt;/code&gt; and &lt;code&gt;cert install&lt;/code&gt;; &lt;code&gt;terraform apply&lt;/code&gt; in &lt;code&gt;infra/deevnet-tenant-eds&lt;/code&gt;; &lt;code&gt;make pair spotify turntable drivers status devices&lt;/code&gt;; &lt;code&gt;provision_tenant.py --site home --also mobile=terraform&lt;/code&gt; on each device&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Medium. Most likely to go wrong: a device refusing the broker&amp;rsquo;s new certificate. No ESP32 has yet verified a server through Deevnet&amp;rsquo;s Tenant Service CA to the Root&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0033-the-whole-back-end-on-one-pi/"&gt;ADR-0033&lt;/a&gt;, &lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0049-a-device-holds-two-sites-and-is-told-which/"&gt;ADR-0049&lt;/a&gt;; Deevnet ADR-0040 (site-less names) and ADR-0041 §2 (a Deevnet Pi)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0028-the-back-end-on-one-pi-on-dvntm/"&gt;CHG-0028&lt;/a&gt;, which built the card this replaces; Deevnet CHG-0054 and CHG-0056, which built the names and the kit&amp;rsquo;s &lt;code&gt;cert&lt;/code&gt; commands&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The home Pi runs EdS on a card whose certificate is signed by that card&amp;rsquo;s own&#10;CA, for names entered by hand in the home DNS. The devices dial its address&#10;and trust that CA, and hold one site&amp;rsquo;s settings.&lt;/p&gt;</description></item><item><title>CHG-0043: The Backend Pi Names the Record the Recognizer Heard</title><link>https://cdeever.github.io/eds/docs/changes/2026/0043-the-backend-pi-names-the-record-the-recognizer-heard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0043-the-backend-pi-names-the-record-the-recognizer-heard/</guid><description>&lt;h1 id="chg-0043-the-backend-pi-names-the-record-the-recognizer-heard"&gt;CHG-0043: The Backend Pi Names the Record the Recognizer Heard&lt;a class="anchor" href="#chg-0043-the-backend-pi-names-the-record-the-recognizer-heard"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-29&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;eds-backend&lt;/code&gt; (&lt;code&gt;192.168.2.40&lt;/code&gt;): its five services and the agent&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend push&lt;/code&gt;, from the branch of PR #109&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: a service not coming back after the push, which &lt;code&gt;push.sh&lt;/code&gt; checks&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0038-the-turntable-names-the-original-album-by-what-is-on-it/"&gt;ADR-0038&lt;/a&gt;, as revised by PR #109&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0042-the-home-pi-becomes-a-deevnet-pi/"&gt;CHG-0042&lt;/a&gt;, during whose last check the fault was found&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;At the end of CHG-0042, Journey&amp;rsquo;s &amp;ldquo;Wheel in the Sky&amp;rdquo;, heard on &lt;em&gt;Infinity&lt;/em&gt;,&#10;was named &lt;em&gt;Alive in America&lt;/em&gt;, a live album, and the stand lit from its&#10;cover. Deezer lists the track on live albums, best-ofs and a 2008&#10;re-recording, never on &lt;em&gt;Infinity&lt;/em&gt;, and the recognizer&amp;rsquo;s album was asked&#10;about only when the catalog had nothing.&lt;/p&gt;</description></item><item><title>CHG-0044: Spotify Is Switched From the Backend Pi's Console</title><link>https://cdeever.github.io/eds/docs/changes/2026/0044-spotify-is-switched-from-the-backend-pis-console/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0044-spotify-is-switched-from-the-backend-pis-console/</guid><description>&lt;h1 id="chg-0044-spotify-is-switched-from-the-backend-pis-console"&gt;CHG-0044: Spotify Is Switched From the Backend Pi&amp;rsquo;s Console&lt;a class="anchor" href="#chg-0044-spotify-is-switched-from-the-backend-pis-console"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-29&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;eds-backend&lt;/code&gt; (&lt;code&gt;192.168.2.40&lt;/code&gt;): its services, the agent, and the broker accounts &lt;code&gt;eds-console&lt;/code&gt; and &lt;code&gt;eds-np-relay&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;make -C deploy/backend push&lt;/code&gt; and &lt;code&gt;make drivers DRIVERS=itunes,spotify,turntable&lt;/code&gt;, from the branch of PR #106&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: Spotify asked all day again, which the switch defaulting to off is there to prevent&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0051-spotify-is-switched-on-and-off-from-the-console/"&gt;ADR-0051&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0024-spotify-turned-off-again/"&gt;CHG-0024&lt;/a&gt;, whose follow-up this answers; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0043-the-backend-pi-names-the-record-the-recognizer-heard/"&gt;CHG-0043&lt;/a&gt;, the push before&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The backend Pi ran &lt;code&gt;4e51363&lt;/code&gt; and did not run the Spotify driver. After: it&#10;runs ADR-0051&amp;rsquo;s agent and console. Spotify is allowed in &lt;code&gt;NP_DRIVERS&lt;/code&gt;, and&#10;whether it runs is the console&amp;rsquo;s switch, off unless switched on.&lt;/p&gt;</description></item><item><title>CHG-0045: The Backend Pi's iTunes Pairing Is Kept</title><link>https://cdeever.github.io/eds/docs/changes/2026/0045-the-backend-pis-itunes-pairing-is-kept/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0045-the-backend-pis-itunes-pairing-is-kept/</guid><description>&lt;h1 id="chg-0045-the-backend-pis-itunes-pairing-is-kept"&gt;CHG-0045: The Backend Pi&amp;rsquo;s iTunes Pairing Is Kept&lt;a class="anchor" href="#chg-0045-the-backend-pis-itunes-pairing-is-kept"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-29&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Deployment&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;eds-backend&lt;/code&gt; (&lt;code&gt;192.168.2.40&lt;/code&gt;): its tools and its iTunes pairing; iTunes on MEDIA-SERVER, which gained a remote; the owner&amp;rsquo;s Mac, which gained an age key&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;secrets/new-key.sh&lt;/code&gt;; &lt;code&gt;make -C deploy/backend push&lt;/code&gt;, &lt;code&gt;make pair&lt;/code&gt;, &lt;code&gt;make pairing&lt;/code&gt;, from the branch of PR #107&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the Pi left unpaired by a test, which a copy set aside guarded&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/architecture/decisions/0052-each-pis-itunes-pairing-is-kept-encrypted-in-the-repository/"&gt;ADR-0052&lt;/a&gt;, and ADR-0037&amp;rsquo;s first step&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0044-spotify-is-switched-from-the-backend-pis-console/"&gt;CHG-0044&lt;/a&gt;, the push before&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The backend Pi&amp;rsquo;s iTunes pairing lived on its card alone, under the name&#10;&amp;ldquo;EdS&amp;rdquo;. After: it pairs as &amp;ldquo;EdS home&amp;rdquo;, and the pairing is kept in the&#10;repository, encrypted to the owner&amp;rsquo;s age key, so a new card for this Pi&#10;starts paired.&lt;/p&gt;</description></item><item><title>CHG-0046: The Backend Pi Is on Its Cable Alone</title><link>https://cdeever.github.io/eds/docs/changes/2026/0046-the-backend-pi-is-on-its-cable-alone/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/eds/docs/changes/2026/0046-the-backend-pi-is-on-its-cable-alone/</guid><description>&lt;h1 id="chg-0046-the-backend-pi-is-on-its-cable-alone"&gt;CHG-0046: The Backend Pi Is on Its Cable Alone&lt;a class="anchor" href="#chg-0046-the-backend-pi-is-on-its-cable-alone"&gt;&lt;/a&gt;&lt;/h1&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Date&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2026-10-30&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Change type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Configuration&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;span class="status-badge status-complete"&gt;Complete&lt;/span&gt;&#10;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Systems&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The home backend Pi, &lt;code&gt;eds-backend&lt;/code&gt;; the backend image (&lt;code&gt;images/backend&lt;/code&gt;) and &lt;code&gt;deploy/backend/card.sh&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;How&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;nmcli&lt;/code&gt; on the Pi, over its cable; the image&amp;rsquo;s playbook and &lt;code&gt;card.sh&lt;/code&gt; changed for the next card&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Low. Most likely to go wrong: the session that makes the change riding the Wi-Fi it removes, which connecting to the wired address prevents&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Decisions&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;None of its own. It is ADR-0053&amp;rsquo;s &amp;ldquo;radio off by default&amp;rdquo; before that record&amp;rsquo;s window is built, and CHG-0028&amp;rsquo;s &amp;ldquo;one address at home&amp;rdquo;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Related&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0042-the-home-pi-becomes-a-deevnet-pi/"&gt;CHG-0042&lt;/a&gt;, whose card asked for Wi-Fi; &lt;a href="https://cdeever.github.io/eds/docs/changes/2026/0028-the-back-end-on-one-pi-on-dvntm/"&gt;CHG-0028&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;The backend Pi had two addresses on the home network: &lt;code&gt;192.168.2.40&lt;/code&gt; on its&#10;cable and &lt;code&gt;192.168.2.228&lt;/code&gt; on Wi-Fi. Both were on DVNT-CORE. The Wi-Fi was&#10;&lt;code&gt;deevnet-kit-wifi&lt;/code&gt;, which deevnet-kit made on the first boot from the&#10;network &lt;code&gt;make card&lt;/code&gt; asked for. A second address on the same network bought&#10;nothing, appeared in the kit&amp;rsquo;s address warning, and could answer for&#10;&lt;code&gt;eds-backend.local&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>