<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>STELLATE — release notes</title>
<link>https://stellate.app/</link>
<description>What shipped in STELLATE, the generative genre-space instrument by Paul Ford (Aboard). Each entry links to a mix that plays what changed. Source: https://github.com/aboard-io/stellate · colophon: https://stellate.app/colophon.html</description>
<language>en-us</language>
<managingEditor>ford@ftrain.com (Paul Ford)</managingEditor>
<webMaster>ford@ftrain.com (Paul Ford)</webMaster>
<copyright>MIT — © 2026 Paul Ford. Source: https://github.com/aboard-io/stellate</copyright>
<lastBuildDate>Thu, 30 Jul 2026 00:04:05 GMT</lastBuildDate>
<pubDate>Thu, 30 Jul 2026 00:00:35 GMT</pubDate>
<generator>tools/build/gen-feed.js (stellate) — release notes from the git log</generator>
<docs>https://www.rssboard.org/rss-specification</docs>
<ttl>1440</ttl>
<category>Music</category><category>Generative art</category><category>Open source</category>
<image><url>https://stellate.app/assets/icon-180.png</url><title>STELLATE — release notes</title><link>https://stellate.app/</link><width>144</width><height>144</height></image>
<atom:link rel="self" href="https://stellate.app/feed.xml" type="application/rss+xml"/>
<atom:link rel="next" href="https://stellate.app/feed-archive.xml" type="application/rss+xml"/>
<atom:link rel="alternate" href="https://stellate.app/colophon.html" type="text/html" title="Colophon — how STELLATE is made and what it is made of"/>
<atom:link rel="related" href="https://github.com/aboard-io/stellate" type="text/html" title="Source on GitHub"/>
<item>
<title>the planets get a gig, the swap ducks, and staging stops lying about what shipped</title>
<link>https://stellate.app/embed.html?genre=citypop&amp;seed=9033&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122</link>
<guid isPermaLink="false">27407e31d7cfc124cf50de209f6b344908221c50</guid>
<pubDate>Thu, 30 Jul 2026 00:00:35 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>embed</category>
<description><![CDATA[A STAGING SERVER, AND IT IS THE DEFAULT. ship.sh now deploys to test.stellate.app; stellate.app moves only on `ship.sh --prod`. Same droplet, second vhost over /srv/stellate-test, noindexed twice over (X-Robots-Tag plus its own robots.txt), and /found is a SYMLINK to prod's media so the ~900 MB…]]></description>
<content:encoded><![CDATA[<p>A STAGING SERVER, AND IT IS THE DEFAULT. ship.sh now deploys to test.stellate.app; stellate.app moves only on `ship.sh --prod`. Same droplet, second vhost over /srv/stellate-test, noindexed twice over (X-Robots-Tag plus its own robots.txt), and /found is a SYMLINK to prod's media so the ~900 MB…</p>
<ul><li>face eye-ring 600/822 (73%) -&gt; 7 families, largest 30% archetype 7 of 9 alien forms won ZERO draws -&gt; 12 appear, largest 22% plan stalk+insectoid = 91% -&gt; 6 plans</li><li>None of it was new capability. The face test opened on `body.eyes &gt;= 4` and eyes tops out at exactly 4, so the eye count — the weakest, saturating signal — took first refusal from five better ones.</li><li>THE HORIZON IS NOT EMPTY. backdrop.js — 1,300 lines of tested city/farm shape grammar — was replaced by an empty Object3D and drew nothing.</li><li>THE SOUNDFONT SWAP DUCKS. It stalled: zone ids are font-qualified so two fonts can coexist, which means every zone of an incoming sampled font is a cache miss</li></ul>
<p><em>Verified:</em> verify.sh 13/13; font-rotation, starcruise and backdrop gates pass. -&gt; v56.</p>
<p><a href="https://stellate.app/embed.html?genre=citypop&amp;seed=9033&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122">▶ Play it: Neon Fiscal Year — the embeddable player, in someone else's page</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/27407e31d7cfc124cf50de209f6b344908221c50">27407e3</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/27407e31d7cfc124cf50de209f6b344908221c50</comments>
</item>
<item>
<title>call it analog, open zoomed out, and stop the bass walking over the mix</title>
<link>https://stellate.app/?genre=bigband&amp;seed=5024&amp;path=814.14134,833.14167,795.14167&amp;xdur=13.122</link>
<guid isPermaLink="false">454e2848003aef89ae7ace9d0085dee8ce81611f</guid>
<pubDate>Wed, 29 Jul 2026 17:21:48 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>bigband</category>
<category>sampler</category>
<description><![CDATA[FIVE THINGS FROM LISTENING, plus one measurement that answers a question.]]></description>
<content:encoded><![CDATA[<p>FIVE THINGS FROM LISTENING, plus one measurement that answers a question.</p>
<ul><li>CALL IT ANALOG. The font key was `minimoog`; this is an analog-style subtractive voice, not a Model D, and naming it after a specific instrument claims something untrue.</li><li>OPEN FULLY ZOOMED OUT. The first view has one job — show the whole journey — and the only way to be sure of that is to show the whole world.</li><li>THE BASS WAS WALKING OVER THE MIX, and it is the widening's fault. Instruments that were never basses now sit in the bass chair, and the strip they inherited is written for a bass GUITAR: at lpf 5200 a bass…</li><li>THE BASS WAS NOT ON THE BUSES AT ALL. &quot;Never mud / bass stays centered&quot; is right in principle and had been taken all the way to dry</li></ul>
<p><em>Verified:</em> verify.sh 13/13; all-sampled, segment-parity, strip-fuzz, font-rotation, explorer-ui and genre-viz pass. -&gt; v54.</p>
<p><a href="https://stellate.app/?genre=bigband&amp;seed=5024&amp;path=814.14134,833.14167,795.14167&amp;xdur=13.122">▶ Play it: Ballroom Leviathan — a horn-and-piano genre that plays almost entirely sampled instruments</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/454e2848003aef89ae7ace9d0085dee8ce81611f">454e284</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/454e2848003aef89ae7ace9d0085dee8ce81611f</comments>
</item>
<item>
<title>the set changes instruments every 32 bars, and keeps coming home to the analog one</title>
<link>https://stellate.app/?genre=citypop&amp;seed=8732&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122</link>
<guid isPermaLink="false">776415345172c583515ed5cb033d18a741ad1c64</guid>
<pubDate>Wed, 29 Jul 2026 16:37:34 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>sampler</category>
<description><![CDATA[fluidr3 → Pure Analog → SGM Pro 15 → Pure Analog → Seattle Glass Factory → Pure Analog → Pure FM → Pure Analog. A full tour every 256 bars, analog on four of the eight steps. app/audio/fonts.js FONT_CYCLE.]]></description>
<content:encoded><![CDATA[<p>fluidr3 → Pure Analog → SGM Pro 15 → Pure Analog → Seattle Glass Factory → Pure Analog → Pure FM → Pure Analog. A full tour every 256 bars, analog on four of the eight steps. app/audio/fonts.js FONT_CYCLE.</p>
<ul><li>THE BLOCKER WAS THAT ZONE IDS WERE NOT FONT-QUALIFIED. Every font reused the same `ins_&lt;instr&gt;_&lt;n&gt;` id pointing at a different file</li><li>THE GENTLE PART NEEDED NOTHING NEW. Set the font, re-target, and the flip queue walks the voices over one at a time — one flip per two bars, HOLD_BARS apart, identity dims first.</li><li><strong>ONE THING WAS GENUINELY MISSING</strong> — state.samplerLib was in no flip. It is the map forceSampled resolves a voice through when the voice carries no sampler of its own, and while every state was built under one soundfont it never mattered.</li><li>Also fixed, my own from earlier this round: warmSetFor's memo key stringified `one.instruments` to &quot;[object Object]&quot;, so the key was really just genre+seed and the warm set never invalidated when the…</li></ul>
<p><em>Verified:</em> browser/font-rotation.test.js gates it — and NOT with handle.rms(). That is an instantaneous meter: the quietest bar of four identical rides came out 0.0025, 0.1617, 0.0264 and 0.1047, so no…</p>
<p><a href="https://stellate.app/?genre=citypop&amp;seed=8732&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122">▶ Play it: Neon Fiscal Year — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/776415345172c583515ed5cb033d18a741ad1c64">7764153</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/776415345172c583515ed5cb033d18a741ad1c64</comments>
</item>
<item>
<title>the accessible page's Announce button actually announces</title>
<link>https://stellate.app/access.html?genre=ambient&amp;seed=3569</link>
<guid isPermaLink="false">c8a70741de63aee1136db123c3aa1f1855e56d5e</guid>
<pubDate>Wed, 29 Jul 2026 14:42:43 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>ambient</category>
<category>accessibility</category>
<description><![CDATA["🔊 Announce what's playing" wrote its snapshot into #announce and stopped there. That element is sr-only + role=alert, so its ONLY effect is a screen reader speaking it — which means with no screen reader running the button did nothing you could see or hear.]]></description>
<content:encoded><![CDATA[<p>&quot;🔊 Announce what's playing&quot; wrote its snapshot into #announce and stopped there. That element is sr-only + role=alert, so its ONLY effect is a screen reader speaking it — which means with no screen reader running the button did nothing you could see or hear.</p>
<ul><li>It now SPEAKS, through the platform's own synthesiser, with a &quot;Speak it aloud&quot; checkbox (default on, persisted) beside it.</li><li>· the live-region path cleared and re-set inside ONE requestAnimationFrame. rAF runs before paint, so both mutations can coalesce into a single accessibility-tree update and an UNCHANGED snapshot gets…</li></ul>
<p><em>Verified:</em> browser/access-ui.test.js gates the whole contract with the synthesiser stubbed (headless Chromium has one that accepts speak() and makes no sound, which would pass vacuously): speaks once…</p>
<p><a href="https://stellate.app/access.html?genre=ambient&amp;seed=3569">▶ Play it: Stationary Weather — the accessible text version, where the same music arrives as prose</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/c8a70741de63aee1136db123c3aa1f1855e56d5e">c8a7074</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/c8a70741de63aee1136db123c3aa1f1855e56d5e</comments>
</item>
<item>
<title>register the last 15 instruments, scope the warm-ahead, and pin the bed budget</title>
<link>https://stellate.app/?genre=transitwave&amp;seed=2172&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122</link>
<guid isPermaLink="false">069f7ba4c3a87c709a299fda0bc3bb208a5d0f46</guid>
<pubDate>Wed, 29 Jul 2026 13:15:51 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>transitwave</category>
<category>found</category>
<description><![CDATA[THE MISSING 15 ARE IN. Of the 26 GM presets that were extracted but never registered, 15 are instruments; they are now in SAMPLERS with their extractor zone metadata and named in the pools that should always have had them.]]></description>
<content:encoded><![CDATA[<p>THE MISSING 15 ARE IN. Of the 26 GM presets that were extracted but never registered, 15 are instruments; they are now in SAMPLERS with their extractor zone metadata and named in the pools that should always have had them.</p>
<ul><li>registered in SAMPLERS 108 -&gt; 123 reached by some state 102 -&gt; 122 (only synth_drum, an unpitched GM drum patch, goes unused) overall effective 62.1 -&gt; 95.0 bass distinct / effective 21/10.4 -&gt; 43/35.9 pad…</li><li>Checked: 825,424 pitched sampler notes across the catalogue, every one resolving to a real zone; every registered zone file present on disk; matrix 274/274.</li><li>THE WARM-AHEAD WAS FETCHING THE WHOLE LIBRARY, and counting the bed budget is how that surfaced. A state's foundSources carries the ENTIRE candidate sampler library — measured 629 zone rows, ~105 MB</li><li>BEDS 3.44 per track (max 6), 1.31 MB BBC reach 38.5% FOUND 3.98 per track, 1.51 MB (beds+breaks+chops+hits+vox) INSTRUMENT 23 zones per track, 3.21 MB (what the song can voice) a track's fetched media: 4.72 MB</li></ul>
<p><a href="https://stellate.app/?genre=transitwave&amp;seed=2172&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122">▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/069f7ba4c3a87c709a299fda0bc3bb208a5d0f46">069f7ba</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/069f7ba4c3a87c709a299fda0bc3bb208a5d0f46</comments>
</item>
<item>
<title>the bass chair is not restricted to basses, and the flip queue stops missing re-picks</title>
<link>https://stellate.app/?genre=sequinfreight&amp;seed=8760&amp;path=1231.7188,859.2784,1530.6221&amp;xdur=0.168</link>
<guid isPermaLink="false">bf33eb086222e23fb79eb569544f4cd04d2e7154</guid>
<pubDate>Wed, 29 Jul 2026 12:41:42 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>sequinfreight</category>
<category>neoclassical</category>
<category>citypop</category>
<category>sampler</category>
<description><![CDATA[WIDEN THE POOLS. The bass was the narrowest voice in the instrument by a distance — 21 distinct, an EFFECTIVE 10.4 (2^entropy), one upright on 22% of every sampled bass in the catalogue — while the lead ran 81 distinct / 54.5 effective.]]></description>
<content:encoded><![CDATA[<p>WIDEN THE POOLS. The bass was the narrowest voice in the instrument by a distance — 21 distinct, an EFFECTIVE 10.4 (2^entropy), one upright on 22% of every sampled bass in the catalogue — while the lead ran 81 distinct / 54.5 effective.</p>
<ul><li>The list is now &quot;what can HOLD DOWN THE BOTTOM&quot;, not &quot;what is sold as a bass&quot;: a tuba is the bass of a brass band, a bari sax the bass of a ska horn line, a cello and a bassoon are bass instruments with other…</li><li>bass distinct / effective 21 / 10.4 -&gt; 41 / 25.4 pad distinct / effective 45 / 21.9 -&gt; 54 / 35.3 library reached 102 of 108 -&gt; 106 of 108 overall effective 62.1 -&gt; 79.1 top 10 share of voices 35.5% -&gt; 25.1%</li><li>seed 1 22 distinct / effective 8.1 -&gt; 40 / 30.8 (was yamaha_grand_piano on 31% of genres) seed 7 20 distinct / effective 6.0 -&gt; 39 / 29.4 (was picked_bass on 40%)</li><li>At one seed it now reads: citypop pizzicato strings, jazz upright, dub contrabass, ambient harp, disco church organ, neoclassical felt piano</li></ul>
<p><a href="https://stellate.app/?genre=sequinfreight&amp;seed=8760&amp;path=1231.7188,859.2784,1530.6221&amp;xdur=0.168">▶ Play it: Mirrorball Tonnage → Requiem Appendix → Neon Fiscal Year — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/bf33eb086222e23fb79eb569544f4cd04d2e7154">bf33eb0</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/bf33eb086222e23fb79eb569544f4cd04d2e7154</comments>
</item>
<item>
<title>the gates ask the engine instead of repeating it, and the landing stops yanking</title>
<link>https://stellate.app/?genre=spokenword&amp;seed=1054&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122</link>
<guid isPermaLink="false">95b800f6c99e653d94214c73825c0e760b7f90e7</guid>
<pubDate>Wed, 29 Jul 2026 11:46:58 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>spokenword</category>
<category>voice</category>
<description><![CDATA[Nine red gates, diagnosed. Eight were the SAME failure in different clothes: a gate that spelled out a fact the engine owns, and went red when the engine moved.]]></description>
<content:encoded><![CDATA[<p>Nine red gates, diagnosed. Eight were the SAME failure in different clothes: a gate that spelled out a fact the engine owns, and went red when the engine moved.</p>
<ul><li>all-sampled / segment-parity / vocoder spelled found/&lt;id&gt;.mp3. The engine names fetched media found/&lt;id&gt;.64.mp3 (the bitrate rides in the name because found/ is immutable-by-name) and a synthText source has NO…</li><li>STARCRUISE-BARCADENCE WAS REAL. The descent is built to arrive at SURFACE_POSE at essentially zero velocity (0.0036 units on the last transit frame), and the landed camera's establish ease then ran a…</li><li>Also, from the instrument analysis: the ⓘ read General MIDI catalog indices out loud. GM numbers its variants — &quot;Synth Bass 2&quot;, &quot;Synth Strings 1&quot;</li></ul>
<p><em>Verified:</em> verify.sh 13/13. -&gt; v49.</p>
<p><a href="https://stellate.app/?genre=spokenword&amp;seed=1054&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122">▶ Play it: Dial Tone Prophet — the genre built out of recorded and synthesized voices</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/95b800f6c99e653d94214c73825c0e760b7f90e7">95b800f</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/95b800f6c99e653d94214c73825c0e760b7f90e7</comments>
</item>
<item>
<title>every station has a name to say, the flat shelves are cast, and the horizon is halved</title>
<link>https://stellate.app/?genre=spokenword&amp;seed=4385&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122</link>
<guid isPermaLink="false">075d2b1188e747408bc7879b852d3c9d6190628f</guid>
<pubDate>Wed, 29 Jul 2026 10:42:39 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>spokenword</category>
<category>voice</category>
<description><![CDATA[Three decisions and the work they imply.]]></description>
<content:encoded><![CDATA[<p>Three decisions and the work they imply.</p>
<ul><li>THE IDENT TIER GETS ITS 45 MISSING BANKS. A genre whose form is dj/drop/vamp speaks a station ident over its own NameBank identity, but 45 of the 65 had no per-genre bank and fell back to GENERIC</li><li>Two defects found while writing them. A band name may not also be a title or an album inside its own bank — the exact collision the ident code cut two frames over</li><li>THE FLAT VOICE SHELVES ARE CAST, and the remaining drops turn out to be structural rather than a curation gap.</li><li>THE PRECACHE HORIZON IS HALVED, 10 minutes -&gt; 5 (HORIZON_MIN). Everything downstream is derived from it, so the fences, the moving horizon and resume are unchanged</li></ul>
<p><em>Verified:</em> gates/speech.test.js was red before this branch and is now green and doing more: its &quot;no other genre grows a synthText source&quot; law had been superseded by the IDENT tier (techno's form is…</p>
<p><a href="https://stellate.app/?genre=spokenword&amp;seed=4385&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122">▶ Play it: Dial Tone Prophet — the genre built out of recorded and synthesized voices</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/075d2b1188e747408bc7879b852d3c9d6190628f">075d2b1</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/075d2b1188e747408bc7879b852d3c9d6190628f</comments>
</item>
<item>
<title>the readout tells the truth about the bar it is hearing, and the loop opens on a song</title>
<link>https://stellate.app/?genre=citypop&amp;seed=6045&amp;path=1530.6221,1747.7896&amp;xdur=0.444</link>
<guid isPermaLink="false">9fed970d54e708aa8a9e2643f0f370839c11ebf6</guid>
<pubDate>Wed, 29 Jul 2026 04:54:07 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>toastercore</category>
<category>voice</category>
<description><![CDATA[Two reports from the field, both invisible to verify.sh because neither the release suite nor CI rides the live path.]]></description>
<content:encoded><![CDATA[<p>Two reports from the field, both invisible to verify.sh because neither the release suite nor CI rides the live path.</p>
<ul><li>&quot;All the tracks are playing but only two show notes in the ⓘ.&quot; The live walk picks its section BY INDEX — secs[secIdx]; the name is only a label</li><li>&quot;crunch guitar says it is missing.&quot; Two defects, one of them not the reported one. The ring route kicked a sampler zone's decode on the first bar that SOUNDED it, so the transit form's metal solo</li><li>The opening loop spawns on city pop instead of on the geometric middle of the chart, and climbs: candidates for each vertex must be at least as danceable as the spawn, the pick maximizes ENERGY less an…</li><li>the pure-node starcruise probes needed a package-type MARKER, not a package-type decision: three &quot;type&quot;: &quot;module&quot; files in app/, vendor/simplex-noise/ and vendor/three/, matching the one vendor/espeak-ng/…</li></ul>
<p><em>Verified:</em> verify.sh 13/13. → v46.</p>
<p><a href="https://stellate.app/?genre=citypop&amp;seed=6045&amp;path=1530.6221,1747.7896&amp;xdur=0.444">▶ Play it: Neon Fiscal Year → Nichrome Panic — a shuttle between the two genres this change names — the blend is the point</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/9fed970d54e708aa8a9e2643f0f370839c11ebf6">9fed970</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/9fed970d54e708aa8a9e2643f0f370839c11ebf6</comments>
</item>
<item>
<title>the opening loop is spread in the direction that is cheap</title>
<link>https://stellate.app/?genre=vaporwave&amp;seed=8078&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046</link>
<guid isPermaLink="false">c8b889b648d34ebcabf86b72a06011d721e6cc87</guid>
<pubDate>Wed, 29 Jul 2026 03:34:45 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>vaporwave</category>
<category>jazz</category>
<category>jungle</category>
<category>travel</category>
<description><![CDATA[Two corrections to the previous attempt, both found by measuring rather than by looking.]]></description>
<content:encoded><![CDATA[<p>Two corrections to the previous attempt, both found by measuring rather than by looking.</p>
<ul><li>FIRST, the radius was circular in a space that is not. drawMap fits each axis to the viewport independently (X = x*width/WORLD_W, Y = y*height/WORLD_H) and the world is ~10x taller than wide, so one world unit…</li><li>SECOND, and this is what the gate caught: the previous commit claimed loop duration was unaffected because paceSpeed scales with the perimeter.</li><li>So the shape changed instead of the size. The triangle now uses its two LOWER vertices rather than the top one, because the dropped vertex pointed straight up — the expensive direction.</li><li>Screen legs 373/695/389 px against a 67px halo — a 239px clear gap where the nearest pair used to overlap. Perimeter 4432, under the 4523 that already walked cleanly.</li></ul>
<p><em>Verified:</em> verify.sh 13/13; explorer-ui, share-url, full-boot, feed-links, genre-viz pass.</p>
<p><a href="https://stellate.app/?genre=vaporwave&amp;seed=8078&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046">▶ Play it: Food Court Eternity → Smoke Arithmetic → Barometric Stampede — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/c8b889b648d34ebcabf86b72a06011d721e6cc87">c8b889b</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/c8b889b648d34ebcabf86b72a06011d721e6cc87</comments>
</item>
<item>
<title>the opening loop opens wider</title>
<link>https://stellate.app/?genre=doomdrone&amp;seed=9165&amp;path=1579.13027,1107.11381,1161.12218&amp;xdur=0.433</link>
<guid isPermaLink="false">e642db2d7122f68f8ffa06422669c396e4fb8f37</guid>
<pubDate>Wed, 29 Jul 2026 03:08:05 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>doomdrone</category>
<category>standbylightdrive</category>
<category>lasertemple</category>
<category>mix</category>
<description><![CDATA[The three numbered waypoints sat close enough together that the default loop read as one cluster rather than a journey. Radius x3, which buys 2.4x of actual spread: perimeter 1853 -> 4523, legs 414/911/529 -> 1251/2087/1185.]]></description>
<content:encoded><![CDATA[<p>The three numbered waypoints sat close enough together that the default loop read as one cluster rather than a journey. Radius x3, which buys 2.4x of actual spread: perimeter 1853 -&gt; 4523, legs 414/911/529 -&gt; 1251/2087/1185.</p>
<ul><li>The multiplier and the result differ because the spread saturates — the two outer points snap to the nearest genre, so past a point a bigger radius just picks a different neighbour.</li><li>Loop DURATION is unchanged, which is the reason this is safe to do: paceSpeed scales with the perimeter and loopDuration does not, so the traveler moves faster in world units and crosses more genres in the…</li><li>The loop now opens on standbylightdrive and silkmist rather than lasertemple and doomdrone.</li></ul>
<p><em>Verified:</em> verify.sh 13/13; explorer-ui, share-url, full-boot and feed-links all pass.</p>
<p><a href="https://stellate.app/?genre=doomdrone&amp;seed=9165&amp;path=1579.13027,1107.11381,1161.12218&amp;xdur=0.433">▶ Play it: Subduction Hymnal → Diode Vigil → Collimated Chapel — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/e642db2d7122f68f8ffa06422669c396e4fb8f37">e642db2</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/e642db2d7122f68f8ffa06422669c396e4fb8f37</comments>
</item>
<item>
<title>tidy: retire the finished queue, keep the reasoning</title>
<link>https://stellate.app/?genre=jungle&amp;seed=5055&amp;path=1718.20504,1737.20537,1699.20537&amp;xdur=13.122</link>
<guid isPermaLink="false">ccbf8f0752ba47266d8c9087cd858e5c97fc3b1e</guid>
<pubDate>Wed, 29 Jul 2026 02:44:58 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>jungle</category>
<category>found</category>
<description><![CDATA[docs/TODO.md was 1,192 lines describing work that is done, and it held 38 of the 48 citations in this repo that point at files no longer there. Rewritten to 113 lines of what is actually open, keeping the measurements that make each item decidable]]></description>
<content:encoded><![CDATA[<p>docs/TODO.md was 1,192 lines describing work that is done, and it held 38 of the 48 citations in this repo that point at files no longer there. Rewritten to 113 lines of what is actually open, keeping the measurements that make each item decidable</p>
<ul><li>Dead path citations across the tree: 48 -&gt; 17. The four that survive in source are deliberate: two documented dead pointers, a HEAD-compatibility fallback that must name the old path to work, and one…</li><li>WHAT I DID NOT DO. Roughly a hundred comments in app/ and engine/ narrate the past — &quot;the live granular bed used to mint ~28 buffers&quot;, &quot;on touchdown the landed camera used to SNAP&quot;.</li><li>Removed instead: five dated attributions in test/ that narrate a reorg rather than explain a mechanism, and a stray jungle-s7.state.json at the repo root.</li><li>The three starcruise pure-node probes are renamed .mjs and given a createRequire shim, which fixes the half-converted CJS/ESM mixing inside them.</li></ul>
<p><em>Verified:</em> verify.sh 13/13.</p>
<p><a href="https://stellate.app/?genre=jungle&amp;seed=5055&amp;path=1718.20504,1737.20537,1699.20537&amp;xdur=13.122">▶ Play it: Barometric Stampede — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/ccbf8f0752ba47266d8c9087cd858e5c97fc3b1e">ccbf8f0</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/ccbf8f0752ba47266d8c9087cd858e5c97fc3b1e</comments>
</item>
<item>
<title>Stage F: the docs describe this repository</title>
<link>https://stellate.app/access.html?genre=ambient&amp;seed=1922</link>
<guid isPermaLink="false">2afdfaf24443b5be8a48cb90c68dea54316a157e</guid>
<pubDate>Tue, 28 Jul 2026 23:21:04 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>ambient</category>
<category>accessibility</category>
<description><![CDATA[Every documented command was executed or path-resolved — 502 invocations across 177 distinct targets — and every quantitative claim checked against the code rather than against the last person who wrote it down.]]></description>
<content:encoded><![CDATA[<p>Every documented command was executed or path-resolved — 502 invocations across 177 distinct targets — and every quantitative claim checked against the code rather than against the last person who wrote it down.</p>
<ul><li>CLAUDE.md and ARCHITECTURE.md now document engine/genres-data.js and engine/registry-data.js, which held the entire genre catalogue and the sample registries while being mentioned nowhere.</li><li>Descriptions ARE generated, and both files now say hand-editing them is forbidden. That is the failure that rotted genre-specs the first time.</li><li>ARCHITECTURE's load order was wrong in content as well as in paths: it omitted two engine scripts and put an async counter inside the ordered chain.</li><li><strong>FIXED IN THE LEDGER</strong> — SOURCES.md pointed at engine/faust/voices/sf2.js. There is no such file — it is build/sf2.js, and the wrong path was introduced by this session's own doc pass, in the one file whose rows are legally…</li></ul>
<p><em>Verified:</em> verify.sh 13/13.</p>
<p><a href="https://stellate.app/access.html?genre=ambient&amp;seed=1922">▶ Play it: Stationary Weather — the accessible text version, where the same music arrives as prose</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/2afdfaf24443b5be8a48cb90c68dea54316a157e">2afdfaf</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/2afdfaf24443b5be8a48cb90c68dea54316a157e</comments>
</item>
<item>
<title>Stage D: the tree says what it is</title>
<link>https://stellate.app/access.html?genre=ambient&amp;seed=6098</link>
<guid isPermaLink="false">0a76d1bafc1437fa5a230e6c53ece1687e67cd34</guid>
<pubDate>Tue, 28 Jul 2026 19:52:37 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>ambient</category>
<category>accessibility</category>
<description><![CDATA[app/ is five folders instead of seventeen loose modules: core (state, world, share), audio (live, targeting, fonts, precache, export, notefeed), map, panels, entries. engine/faust/ separates the three unrelated things it had been holding in one place — live/ press/ voices/ codec/ build/ data/.]]></description>
<content:encoded><![CDATA[<p>app/ is five folders instead of seventeen loose modules: core (state, world, share), audio (live, targeting, fonts, precache, export, notefeed), map, panels, entries. engine/faust/ separates the three unrelated things it had been holding in one place — live/ press/ voices/ codec/ build/ data/.</p>
<ul><li>THE CYCLE. app/ carried two import cycles that worked only because ESM live-bindings resolve at call time.</li><li>THREE SPLITS. starcruise.js 2,297 -&gt; bridge/scene/camera/probes; starmap.js 910 -&gt; viewport/layout/draw/gestures/viz-zoom behind an unchanged import surface</li><li>THE PAGES. Six HTML files carried duplicated head and inline style; the CSS is extracted and the social head is consistent and gated.</li><li>FIVE REGRESSIONS the sweep caught and fixed, each broken-then-green: three test/unit gates and one tools/build script had require paths one level off after the move, which no import checker sees because they…</li></ul>
<p><em>Verified:</em> verify.sh 13/13. diagonal dominant: 274/274. meter green. Structure is all any of that proves; the ears are still owed.</p>
<p><a href="https://stellate.app/access.html?genre=ambient&amp;seed=6098">▶ Play it: Stationary Weather — the accessible text version, where the same music arrives as prose</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/0a76d1bafc1437fa5a230e6c53ece1687e67cd34">0a76d1b</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/0a76d1bafc1437fa5a230e6c53ece1687e67cd34</comments>
</item>
<item>
<title>sw: v43 -&gt; v44, so the deployed build actually reaches a browser</title>
<link>https://stellate.app/?genre=transitwave&amp;seed=3163&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122</link>
<guid isPermaLink="false">61a699435187be41feb2780fcf77f57d3a12c98c</guid>
<pubDate>Tue, 28 Jul 2026 18:23:41 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>transitwave</category>
<category>found</category>
<description><![CDATA[The last deploy shipped new engine code under an unchanged service-worker version. sw.js was byte-identical between the two deploys, so no browser ever saw a new worker, no install fired, APP_CACHE kept its name, and every returning client went on being served the previous app shell cache-first.]]></description>
<content:encoded><![CDATA[<p>The last deploy shipped new engine code under an unchanged service-worker version. sw.js was byte-identical between the two deploys, so no browser ever saw a new worker, no install fired, APP_CACHE kept its name, and every returning client went on being served the previous app shell cache-first.</p>
<ul><li>The visible symptom was a wall of 404s for found/&lt;id&gt;.mp3 — the pre-diet filenames, requested by the stale shell, against a server that now holds only found/&lt;id&gt;.64.mp3.</li><li>This is what the comment on VERSION has always said to do.</li></ul>
<p><a href="https://stellate.app/?genre=transitwave&amp;seed=3163&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122">▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/61a699435187be41feb2780fcf77f57d3a12c98c">61a6994</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/61a699435187be41feb2780fcf77f57d3a12c98c</comments>
</item>
<item>
<title>export the specs: 274 descriptions and two fences, round-tripped</title>
<link>https://stellate.app/?genre=meadhallbellow&amp;seed=5374&amp;path=461.14316,1405.21491,1237.17819&amp;xdur=0.103</link>
<guid isPermaLink="false">d09417e61a4b00da140e9750941daa179c80cdda</guid>
<pubDate>Tue, 28 Jul 2026 15:28:48 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>meadhallbellow</category>
<category>acidhouse</category>
<category>afrobeat</category>
<category>voice</category>
<description><![CDATA[genre-specs mirror the kernel's info string and the verifier's target row, so the generated descriptions and the dub/meadhallbellow fence moves both land here. Regenerated with `node tools/genre-tool.js export --all`, not by hand — the diff is 274 info lines and the two fences, nothing else.]]></description>
<content:encoded><![CDATA[<p>genre-specs mirror the kernel's info string and the verifier's target row, so the generated descriptions and the dub/meadhallbellow fence moves both land here. Regenerated with `node tools/genre-tool.js export --all`, not by hand — the diff is 274 info lines and the two fences, nothing else.</p>
<p><a href="https://stellate.app/?genre=meadhallbellow&amp;seed=5374&amp;path=461.14316,1405.21491,1237.17819&amp;xdur=0.103">▶ Play it: Diaphragm Muster → Titration Rapture → Polyrhythm Senate — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/d09417e61a4b00da140e9750941daa179c80cdda">d09417e</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/d09417e61a4b00da140e9750941daa179c80cdda</comments>
</item>
<item>
<title>the found layer gets heard, the ⓘ tells the truth, aliens leave the boot path</title>
<link>https://stellate.app/?genre=boombap&amp;seed=4876&amp;path=205.10395,461.14316&amp;xdur=0.191</link>
<guid isPermaLink="false">dc447ca477d0b0c4b64be7ae8dc97ba2e4671c8c</guid>
<pubDate>Tue, 28 Jul 2026 15:27:11 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>boombap</category>
<category>meadhallbellow</category>
<category>embed</category>
<description><![CDATA[Nine measured changes, each gated on its own numbers rather than on a hunch.]]></description>
<content:encoded><![CDATA[<p>Nine measured changes, each gated on its own numbers rather than on a hunch.</p>
<ul><li>The found layer was diluted and rare. Bed/narration pools now expand wider and cap at 12 (break/chops deliberately untouched</li><li>The hits coin was the real rarity: 70% of tracks carried no one-shot layer at all. Lifting each genre's authored probability through p -&gt; 1-(1-p)^5 preserves the endpoints and the per-genre ordering while…</li><li>The speech idents kept their tier but lost two of five forms. Read as text across all 2480 realized lines, the split was total: three forms are station idiom and score 100% plausible-or-filler</li><li>The 274 descriptions are repaired in the generator as value-keyed tables, never per-genre overrides. 45% of them said &quot;a light shuffle&quot; because one swing bucket spanned .02-.08</li></ul>
<p><a href="https://stellate.app/?genre=boombap&amp;seed=4876&amp;path=205.10395,461.14316&amp;xdur=0.191">▶ Play it: Milk Crate Scripture → Diaphragm Muster — a shuttle between the two genres this change names — the blend is the point</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/dc447ca477d0b0c4b64be7ae8dc97ba2e4671c8c">dc447ca</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/dc447ca477d0b0c4b64be7ae8dc97ba2e4671c8c</comments>
</item>
<item>
<title>TODO: make the queue tell the truth before we clear context</title>
<link>https://stellate.app/?genre=spokenword&amp;seed=1365&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122</link>
<guid isPermaLink="false">9b72aeedd5e4e12cc70be370ccd2add980fe8807</guid>
<pubDate>Tue, 28 Jul 2026 12:01:28 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>spokenword</category>
<category>voice</category>
<description><![CDATA[The running queue is the handoff document, and it was describing a repo that stopped existing about eighteen commits ago. Rewritten as something a fresh context can act on without re-deriving anything.]]></description>
<content:encoded><![CDATA[<p>The running queue is the handoff document, and it was describing a repo that stopped existing about eighteen commits ago. Rewritten as something a fresh context can act on without re-deriving anything.</p>
<ul><li>· WHERE THINGS STAND — what is done, what is left, and the fact that SEVEN COMMITS ARE UNDEPLOYED (stellate.app is running 76c905e) · the commit-by-commit ledger of what landed and what each one was · the new…</li><li>And FOUR TRAPS, written down because every one of them looked like a confident result and was wrong: the homoglyph label match, the guessed WORLD_W projection, calling a correct intro a frozen viz and telling…</li><li>Stage headers now say DONE where they are done, so nobody redoes Stage C. Stage F carries its own known-wrong list, since tonight moved the ground under it: CLAUDE.md still describes a 996 KB kernel with an…</li></ul>
<p><em>Verified:</em> verify.sh 13/13, doc-counts PASS.</p>
<p><a href="https://stellate.app/?genre=spokenword&amp;seed=1365&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122">▶ Play it: Dial Tone Prophet — the genre built out of recorded and synthesized voices</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/9b72aeedd5e4e12cc70be370ccd2add980fe8807">9b72aee</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/9b72aeedd5e4e12cc70be370ccd2add980fe8807</comments>
</item>
<item>
<title>E4: the genre descriptions are generated from the anchor now</title>
<link>https://stellate.app/?genre=house&amp;seed=2666&amp;path=1101.20850,1405.21491,1237.17819&amp;xdur=0.202</link>
<guid isPermaLink="false">85352d0a16c7255118d97b3ed25445c8844185e2</guid>
<pubDate>Tue, 28 Jul 2026 10:35:13 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>house</category>
<category>acidhouse</category>
<category>afrobeat</category>
<category>voice</category>
<description><![CDATA[274 blurbs, every one derived from the anchor that ships. Paul's direction: generate deterministically from genre mix, instrumentation and rhythmic variation rather than editing prose.]]></description>
<content:encoded><![CDATA[<p>274 blurbs, every one derived from the anchor that ships. Paul's direction: generate deterministically from genre mix, instrumentation and rhythmic variation rather than editing prose.</p>
<ul><li>That fixes the tic AND the deeper problem underneath it. The old blurbs were hand-written beside live data and drifted the way that always drifts</li><li>em-dash punchlines 234 -&gt; 0 lower-case openers 241 -&gt; 0 length median 173 -&gt; 114, max 378 -&gt; 171 card-lie count 0 -&gt; 0, now by construction</li><li>A machine four at 124-140. Acid bass under an organ, with a pluck lead.</li><li>&quot;A breakbeat at 96-144&quot; card:amen/break on 6 genres. checkCardClaims reads &quot;breakbeat&quot; as the SAMPLED amen; these kits are synthesized and carry no break role.</li></ul>
<p><a href="https://stellate.app/?genre=house&amp;seed=2666&amp;path=1101.20850,1405.21491,1237.17819&amp;xdur=0.202">▶ Play it: Congregation Furnace → Titration Rapture → Polyrhythm Senate — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/85352d0a16c7255118d97b3ed25445c8844185e2">85352d0</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/85352d0a16c7255118d97b3ed25445c8844185e2</comments>
</item>
<item>
<title>Stage E4, the safe half: 241 descriptions start with a capital letter</title>
<link>https://stellate.app/?genre=gospel&amp;seed=4727&amp;path=171.7086,1101.20850,1237.17819&amp;xdur=0.054</link>
<guid isPermaLink="false">277d89e74566969645f6755b894db92fcaae3b5b</guid>
<pubDate>Tue, 28 Jul 2026 10:20:55 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>gospel</category>
<category>house</category>
<category>afrobeat</category>
<category>voice</category>
<description><![CDATA[E4 lists four tics in the genre prose. This fixes the one that is unambiguous — 241 of 274 blurbs opened lower-case, which is not a style so much as an accident — and stops before the one that is not.]]></description>
<content:encoded><![CDATA[<p>E4 lists four tics in the genre prose. This fixes the one that is unambiguous — 241 of 274 blurbs opened lower-case, which is not a style so much as an accident — and stops before the one that is not.</p>
<ul><li>Proved rather than eyeballed: GENRES is byte-identical to HEAD ignoring case, and zero infos differ beyond capitalisation.</li><li>gospel &quot;hand-clap church gospel ~92bpm — Hammond organ and gospel piano, a massed choir…&quot; — the em-dash is STRUCTURAL, introducing the instrumentation.</li><li>Telling a poetic punchline from a structural separator is a judgement per string, not a pattern, and these are 274 user-visible strings.</li><li>There is also a gate coupling worth stating: musicality's checkCardClaims parses `info` for instrument nouns, so rewriting prose can create or hide card-lies.</li></ul>
<p><em>Verified:</em> verify.sh otherwise green, card-lie 0, specs round-trip PASS.</p>
<p><a href="https://stellate.app/?genre=gospel&amp;seed=4727&amp;path=171.7086,1101.20850,1237.17819&amp;xdur=0.054">▶ Play it: Rapture Logistics → Congregation Furnace → Polyrhythm Senate — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/277d89e74566969645f6755b894db92fcaae3b5b">277d89e</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/277d89e74566969645f6755b894db92fcaae3b5b</comments>
</item>
<item>
<title>the ⓘ piano roll is telling the truth; the audit hatching is not</title>
<link>https://stellate.app/?genre=gospel&amp;seed=3169&amp;path=171.7064,190.7097,152.7097&amp;xdur=13.122</link>
<guid isPermaLink="false">465d3779cf1e876b8b079304156963711c1ddc95</guid>
<pubDate>Tue, 28 Jul 2026 03:13:49 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>gospel</category>
<category>harmony</category>
<description><![CDATA[Chased Paul's report that the inside view sometimes shows empty lanes while everything plays fine. Conclusion: the LANES ARE CORRECT, and I could not reproduce the freeze.]]></description>
<content:encoded><![CDATA[<p>Chased Paul's report that the inside view sometimes shows empty lanes while everything plays fine. Conclusion: the LANES ARE CORRECT, and I could not reproduce the freeze.</p>
<ul><li>WHAT THE LANES DO. Replayed barVoiceEvents' exact windowing in node — no browser, no timing, no flake</li><li>verse 2 {pad:16, bass:4, drums:59, sfx:1} — no melody events at all bridge {pad:16, bass:4, melody:10} — no drum events at all</li><li>gospel's bridge genuinely drops the kit and verse 2 genuinely has no lead line. The viz drawing melody:0 and drums:0 there is the truth, not a bug.</li><li>I ALSO COULD NOT REPRODUCE &quot;doesn't update at all&quot;, and I twice mistook a too-short sample for a freeze: 24 samples over 19s of a 92bpm chordEvery-8 track is about three chord bars, so seeing two distinct…</li></ul>
<p><em>Verified:</em> verify.sh 13/13, comment-only proof clean.</p>
<p><a href="https://stellate.app/?genre=gospel&amp;seed=3169&amp;path=171.7064,190.7097,152.7097&amp;xdur=13.122">▶ Play it: Rapture Logistics — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/465d3779cf1e876b8b079304156963711c1ddc95">465d377</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/465d3779cf1e876b8b079304156963711c1ddc95</comments>
</item>
<item>
<title>speech reaches 99 of 274 genres: station idents for the mix forms</title>
<link>https://stellate.app/?genre=jungle&amp;seed=9094&amp;path=1718.20526,1101.20850,2103.13302&amp;xdur=0.096</link>
<guid isPermaLink="false">422eb07e191b9770869605e1a018694fc6ef9570</guid>
<pubDate>Tue, 28 Jul 2026 02:54:11 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>jungle</category>
<category>house</category>
<category>ambient</category>
<category>voice</category>
<description><![CDATA[The bespoke cast is twelve genres that had a voice waiting in their own card — the OYEZ, the ATC read-back, the auction chant. That does not scale to a hundred: writing ninety more idioms by hand is ninety chances to write a bad one, and most genres have no such line in them.]]></description>
<content:encoded><![CDATA[<p>The bespoke cast is twelve genres that had a voice waiting in their own card — the OYEZ, the ATC read-back, the auction chant. That does not scale to a hundred: writing ninety more idioms by hand is ninety chances to write a bad one, and most genres have no such line in them.</p>
<ul><li>So the derived tier is picked by a STRUCTURAL property rather than by me choosing forty-one names out of a hat. Genres whose FORM is a mix — dj, drop, vamp, the ones built to be beat-matched and talked over</li><li>genres with speech 58 -&gt; 99 of 274 bespoke cast 12 (unchanged; a bespoke voice always beats an ident) derived idents 41 (dj 20, drop 12, vamp 9)</li><li>The VOICE is hashed from the genre name, not the track seed, so every station sounds like a different station and the same genre always gets the same announcer: house is a fast m2, jungle a mid m1, disco an f3.</li><li>A REAL BUG CAUGHT ON THE WAY, and the reason the samples are worth printing: the first cut used `&gt;&gt;`, which is a SIGNED 32-bit shift, so any hash above 2^31 went negative and dragged the modulo with it.</li></ul>
<p><em>Verified:</em> determinism identical on repeat, no out-of-range voice anywhere, and house and jungle both synthesize live in a real browser with zero console errors.</p>
<p><a href="https://stellate.app/?genre=jungle&amp;seed=9094&amp;path=1718.20526,1101.20850,2103.13302&amp;xdur=0.096">▶ Play it: Barometric Stampede → Congregation Furnace → Stationary Weather — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/422eb07e191b9770869605e1a018694fc6ef9570">422eb07</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/422eb07e191b9770869605e1a018694fc6ef9570</comments>
</item>
<item>
<title>speech: 230 pre-rendered clips become live synthesis, 12 genres become 58</title>
<link>https://stellate.app/?genre=jungle&amp;seed=4017&amp;path=1718.20526,1679.4415,1089.13532&amp;xdur=0.046</link>
<guid isPermaLink="false">700d9f99a1e937add65a886172e1de0201bb2697</guid>
<pubDate>Tue, 28 Jul 2026 02:48:33 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>jungle</category>
<category>vaporwave</category>
<category>budstep</category>
<category>voice</category>
<description><![CDATA[Every kind:"speech" id in the registry was espeak output — sp_ (203), hp_ (the hogcore cast, 24), wd_ (budstep strain names, 16). Checked BEFORE touching anything: the Naropa readings (vx_, 49) and the BBC material carry no `kind` at all, so they were never in this set and are never at risk.]]></description>
<content:encoded><![CDATA[<p>Every kind:&quot;speech&quot; id in the registry was espeak output — sp_ (203), hp_ (the hogcore cast, 24), wd_ (budstep strain names, 16). Checked BEFORE touching anything: the Naropa readings (vx_, 49) and the BBC material carry no `kind` at all, so they were never in this set and are never at risk.</p>
<ul><li>Because it is all espeak, the engine can simply say it. A registry entry with synthText is synthesized by engine/speech.js at play time — what the transit PA already did.</li><li>genres emitting live speech 12 -&gt; 58 distinct live ids in play 1 -&gt; 221</li><li>THE BUG THAT MADE IT A NO-OP AT FIRST. Converting the registry changed nothing: still 12 genres, still one id.</li><li><strong>WHAT IS DELIBERATELY NOT CONVERTED</strong> — saytransit's station voices are not plain espeak. They are a three-voice harmonized robot choir — root, a fifth above, an octave below, rubberband-shifted and mixed time-aligned.</li></ul>
<p><em>Verified:</em> rather than assumed: determinism holds (same seed twice, identical), jungle gains nothing, and sp_paleo_rex — a CONVERTED id, not the organ</p>
<p><a href="https://stellate.app/?genre=jungle&amp;seed=4017&amp;path=1718.20526,1679.4415,1089.13532&amp;xdur=0.046">▶ Play it: Barometric Stampede → Food Court Eternity → Amen Monolith — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/700d9f99a1e937add65a886172e1de0201bb2697">700d9f9</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/700d9f99a1e937add65a886172e1de0201bb2697</comments>
</item>
<item>
<title>Stage E2: the spec folder describes the genres that actually ship</title>
<link>https://stellate.app/?genre=ragtime&amp;seed=5906&amp;path=753.14457,292.16891,1405.21491&amp;xdur=0.105</link>
<guid isPermaLink="false">712cceb2f6d238aa80845da96a9820d25f5b4442</guid>
<pubDate>Tue, 28 Jul 2026 02:23:43 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>ragtime</category>
<category>jazz</category>
<category>acidhouse</category>
<category>voice</category>
<description><![CDATA[genre-specs/ was one-directional for its whole life. genre-tool wrote a spec when a genre was born; every later edit happened by hand in the kernel and nothing was ever written back.]]></description>
<content:encoded><![CDATA[<p>genre-specs/ was one-directional for its whole life. genre-tool wrote a spec when a genre was born; every later edit happened by hand in the kernel and nothing was ever written back.</p>
<ul><li>`genre-tool.js export &lt;genre&gt; | --all` is the direction that was missing: it reads the LIVE anchor and emits the spec that would produce it.</li><li>274 specs, one per genre, uniform shape: name label info pos anchor mind 274 targets 274 perc 52 (only genres with a perc style)</li><li>Three of those keys are NEW, and they are what closes the authorability gap the plan measured — the kernel reads 289 anchor paths, specs could express 184: mind the derived theory/pipes/rhythm axes, whose only…</li><li>Four keys are dropped because nothing reads them: clips (GENRE_CLIPS is gone), materials, invented, damp. genre-specs/invented/ is flattened</li></ul>
<p><em>Verified:</em> genre-specs.test.js is what stops the rot returning: coverage, no orphans, required keys, no retired keys, trailing newline, and the one that matters</p>
<p><a href="https://stellate.app/?genre=ragtime&amp;seed=5906&amp;path=753.14457,292.16891,1405.21491&amp;xdur=0.105">▶ Play it: Perforated Afterlife → Smoke Arithmetic → Titration Rapture — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/712cceb2f6d238aa80845da96a9820d25f5b4442">712cceb</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/712cceb2f6d238aa80845da96a9820d25f5b4442</comments>
</item>
<item>
<title>redraw the star map: label-box packing with headroom for 400 genres</title>
<link>https://stellate.app/?genre=crimsoncourt&amp;seed=4741&amp;path=1109.13089,265.13466,1854.5732&amp;xdur=0.093</link>
<guid isPermaLink="false">43ffe4dd4a7d604748eac046f808123ec93aefca</guid>
<pubDate>Tue, 28 Jul 2026 02:19:32 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>crimsoncourt</category>
<category>crumpetwhirl</category>
<category>folk</category>
<category>harmony</category>
<description><![CDATA[Names were being culled at default zoom -- 254 of 274 on a 1600px screen, 229 at 1280, 113 on a phone. I first argued against a redraw, on the grounds that zoom recovers most of them (254 -> 271 by k=6) and only two genres, crimsoncourt and folk, were never labelled at any zoom.]]></description>
<content:encoded><![CDATA[<p>Names were being culled at default zoom -- 254 of 274 on a 1600px screen, 229 at 1280, 113 on a phone. I first argued against a redraw, on the grounds that zoom recovers most of them (254 -&gt; 271 by k=6) and only two genres, crimsoncourt and folk, were never labelled at any zoom.</p>
<ul><li>THE CAUSE. drawMap fits each axis to the viewport INDEPENDENTLY, so the world's own aspect is invisible in the render -- only the distribution in normalized space matters.</li><li>It was never an area problem. At default zoom the rendered world is 12.5M px² and 400 labels want 2.7M of it.</li><li>THE FACTOR I GOT WRONG FIRST, and it is the whole thing: drawMap grows type with zoom, fs = min(3, max(1, k^0.85)), so at the default k=2.8 the font is 2.4x, not 1x.</li><li>tools/relayout-map.js relaxes label RECTANGLES until none overlap, each star on a weak spring to where it started, boxes inflated sqrt(400/274) so genres that do not exist yet still get a name.</li></ul>
<p><em>Verified:</em> verify.sh 12/12, matrix 274/274, explorer-ui PASS (was FAIL on the separation floor), pos-coverage 274/274, full-boot healthy.</p>
<p><a href="https://stellate.app/?genre=crimsoncourt&amp;seed=4741&amp;path=1109.13089,265.13466,1854.5732&amp;xdur=0.093">▶ Play it: Non Euclidean Court → Teatime Anomaly → Kettle Eschaton — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/43ffe4dd4a7d604748eac046f808123ec93aefca">43ffe4d</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/43ffe4dd4a7d604748eac046f808123ec93aefca</comments>
</item>
<item>
<title>deploy: excluded must mean GONE from the droplet, not merely unsent</title>
<link>https://stellate.app/?genre=transitwave&amp;seed=7731&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122</link>
<guid isPermaLink="false">76c905e3c8436b10a215b8224545d3be7116d923</guid>
<pubDate>Tue, 28 Jul 2026 01:52:50 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>transitwave</category>
<category>found</category>
<description><![CDATA[I claimed the last commit took 28 MB off the deploy. It took 28 MB off the TRANSFER and left every byte of it live on stellate.app, which I should have checked before saying so.]]></description>
<content:encoded><![CDATA[<p>I claimed the last commit took 28 MB off the deploy. It took 28 MB off the TRANSFER and left every byte of it live on stellate.app, which I should have checked before saying so.</p>
<ul><li>rsync's plain --delete only removes receiver files that are absent from the SOURCE. It deliberately PROTECTS anything matching an --exclude, on the theory that you may be excluding files you want left alone on…</li><li>154 engine/faust/node_modules the @grame cut that did not take 134 found/samples/*/zones.json extractor output nothing fetches ~600 tools/node_modules better-sqlite3, semver, tar-fs and friends -- build-time…</li><li>Nothing outside those buckets is touched. MEDIA_MANIFEST appears in the deletion list and is irrelevant: it is not in the source tree, so plain --delete already removed it on every deploy, and the very next…</li><li>This is the same failure shape as the found/midi leak that had to be scrubbed from the droplet by hand: an exclusion that everyone believed was removing something when it was only declining to send it.</li></ul>
<p><a href="https://stellate.app/?genre=transitwave&amp;seed=7731&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122">▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/76c905e3c8436b10a215b8224545d3be7116d923">76c905e</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/76c905e3c8436b10a215b8224545d3be7116d923</comments>
</item>
<item>
<title>espeak is an ES module; say so, and the speech gate goes green</title>
<link>https://stellate.app/?genre=spokenword&amp;seed=4246&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122</link>
<guid isPermaLink="false">5f6aa3b69f548c40aaba47e10368c221ec4817ed</guid>
<pubDate>Tue, 28 Jul 2026 01:48:48 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>spokenword</category>
<category>voice</category>
<description><![CDATA[vendor/espeak-ng/espeak-ng.js is emscripten ESM glue: it reads import.meta.url to locate espeak-ng.data beside itself. But node resolves a .js file against the nearest package.json, and the nearest one is the repo root, which is type=commonjs -- so the glue was parsed as CommonJS, where import.meta…]]></description>
<content:encoded><![CDATA[<p>vendor/espeak-ng/espeak-ng.js is emscripten ESM glue: it reads import.meta.url to locate espeak-ng.data beside itself. But node resolves a .js file against the nearest package.json, and the nearest one is the repo root, which is type=commonjs -- so the glue was parsed as CommonJS, where import.meta…</p>
<ul><li>prove-browser.js is the single CommonJS script in that directory, so it becomes prove-browser.cjs (README and its own header updated). prove.js was already ESM and needed nothing.</li><li>This closes a real hole rather than a cosmetic one: the artifact's DETERMINISM LAW -- same text twice must give byte-identical PCM from a fresh worker per call -- was documented in engine/speech.js and never…</li><li>Browser path is untouched -- package.json type affects node resolution only, and the browser loads the glue by URL.</li><li>speech.test: 5/5 ALL PASS, up from 4/5.</li></ul>
<p><em>Verified:</em> speech.test.js has been failing synth_determinism with &quot;Cannot use 'import.meta' outside a module&quot; -- and because tools/ship.sh gates on that test under `set -e`, the project's one deploy…</p>
<p><a href="https://stellate.app/?genre=spokenword&amp;seed=4246&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122">▶ Play it: Dial Tone Prophet — the genre built out of recorded and synthesized voices</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/5f6aa3b69f548c40aaba47e10368c221ec4817ed">5f6aa3b</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/5f6aa3b69f548c40aaba47e10368c221ec4817ed</comments>
</item>
<item>
<title>Stage E1 complete: the kernel is a library again</title>
<link>https://stellate.app/?genre=jungle&amp;seed=7254&amp;path=1718.20504,1737.20537,1699.20537&amp;xdur=13.122</link>
<guid isPermaLink="false">e62dada64b32fd48f2dfcd9e4ab2821ec7cfd79b</guid>
<pubDate>Tue, 28 Jul 2026 01:31:33 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>jungle</category>
<category>voice</category>
<description><![CDATA[The last E1 bullet. 243 lines of CLI lived at the bottom of engine/genre-kernel.js behind `isNode && require.main===module`, so every browser downloaded and parsed fs, child_process, ffmpeg shelling and WAV muxing that it could never run.]]></description>
<content:encoded><![CDATA[<p>The last E1 bullet. 243 lines of CLI lived at the bottom of engine/genre-kernel.js behind `isNode &amp;&amp; require.main===module`, so every browser downloaded and parsed fs, child_process, ffmpeg shelling and WAV muxing that it could never run.</p>
<ul><li>engine/genre-kernel.js 193 KB -&gt; 180 KB, 2,798 -&gt; 2,554 lines tools/kernel-cli.js 260 lines</li><li>The kernel now contains zero require(&quot;fs&quot;), zero require(&quot;child_process&quot;) and zero execFileSync -- checked, not assumed.</li><li>The extraction was mechanical but not blind: the block was brace-matched rather than sliced at a guessed line (the first attempt was off by one and its assertion caught it before anything was written), and its…</li><li>Every documented invocation was repointed, since `node engine/genre-kernel.js track ...` now silently does nothing: CLAUDE.md, README.md, docs/SETUP.md, docs/GENRE-SPACE.md, three fetch recipes…</li></ul>
<p><em>Verified:</em> verify.sh 12/12, matrix --no-cache 274/274 diagonal dominant, kerneldata byte-identical, boot-smoke 16/16, full-boot healthy in a real browser, and `kernel-cli.js anchors` + `track jungle…</p>
<p><a href="https://stellate.app/?genre=jungle&amp;seed=7254&amp;path=1718.20504,1737.20537,1699.20537&amp;xdur=13.122">▶ Play it: Barometric Stampede — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/e62dada64b32fd48f2dfcd9e4ab2821ec7cfd79b">e62dada</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/e62dada64b32fd48f2dfcd9e4ab2821ec7cfd79b</comments>
</item>
<item>
<title>the speech organ gets a cast: 1 producer -&gt; 12 voices</title>
<link>https://stellate.app/?genre=transitwave&amp;seed=8182&amp;path=749.12558,1026.13988,1968.25160&amp;xdur=0.059</link>
<guid isPermaLink="false">4807f9866c3ed386d41cf0273e8327fc9e7e89d9</guid>
<pubDate>Tue, 28 Jul 2026 01:26:17 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>transitwave</category>
<category>towncrier</category>
<category>dishwasherwave</category>
<category>voice</category>
<description><![CDATA[Phase 4 of the found-layer plan. Live espeak synthesis had exactly ONE trigger in 274 genres -- transitwave's PA, fired once as an opener -- so the organ in engine/speech.js was effectively unwired and everything else that SOUNDED like espeak was a pre-rendered mp3.]]></description>
<content:encoded><![CDATA[<p>Phase 4 of the found-layer plan. Live espeak synthesis had exactly ONE trigger in 274 genres -- transitwave's PA, fired once as an opener -- so the organ in engine/speech.js was effectively unwired and everything else that SOUNDED like espeak was a pre-rendered mp3.</p>
<ul><li>Twelve genres speak now, and the text is not invented for them: each one already carried the vocabulary in its own card.</li><li>transitwave f3 165 the arrivals PA airtrafficdrone m3 190 flight levels and runway assignments towncrier m1 120 OYEZ, slow and grave auctioncore m2 260 the chant, and it is FAST dmvstep f2 150 now serving…</li><li>The per-speaker variant/pitch/speed is the point: one voice at twelve texts would be one narrator in twelve hats.</li><li>Every law the transit PA established is preserved, because they are what make this safe: text derives purely from (seed, genre) through NameBank, so ZERO rng draws on the resolve stream</li></ul>
<p><em>Verified:</em> not assumed: determinism (same seed twice, identical), jungle gains nothing, a 20% towncrier blend stays silent, and three of the new voices -- including the croak -- synthesize live in a…</p>
<p><a href="https://stellate.app/?genre=transitwave&amp;seed=8182&amp;path=749.12558,1026.13988,1968.25160&amp;xdur=0.059">▶ Play it: Rail Replacement Rapture → Oyez Oblivion → Heated Dry Eternity — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/4807f9866c3ed386d41cf0273e8327fc9e7e89d9">4807f98</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/4807f9866c3ed386d41cf0273e8327fc9e7e89d9</comments>
</item>
<item>
<title>Stage E1: 810 KB of data out of the kernel, byte for byte</title>
<link>https://stellate.app/access.html?genre=ambient&amp;seed=6362</link>
<guid isPermaLink="false">8508e002d8894269196ac0bf013b0ed2eb810e9b</guid>
<pubDate>Tue, 28 Jul 2026 00:45:05 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>ambient</category>
<category>accessibility</category>
<description><![CDATA[engine/genre-kernel.js was 966 KB and 8,956 lines, of which 82% was inert literal data, and it shipped a node-only CLI to every browser. It is now 193 KB and 2,739 lines -- a file a person can read.]]></description>
<content:encoded><![CDATA[<p>engine/genre-kernel.js was 966 KB and 8,956 lines, of which 82% was inert literal data, and it shipped a node-only CLI to every browser. It is now 193 KB and 2,739 lines -- a file a person can read.</p>
<ul><li>engine/genres-data.js 648 KB the 274 anchors engine/registry-data.js 131 KB SOURCES / SOURCE_POOLS / SAMPLES / VOXBANK / SAMPLERS / PERCBANK</li><li>THE DATA MOVED AS SOURCE TEXT, NOT AS JSON. The obvious implementation is to load the kernel and JSON.stringify each object, and that is the one that loses: round-tripping normalizes -0 to 0, drops undefined…</li><li>Classic scripts, not JSON-over-fetch, because app/access.js and app/starmap.js read the kernel synchronously at module top level -- the data has to exist the moment genre-kernel.js runs.</li><li>Everything that reached into the kernel by path was repointed, not left to fail quietly later: genre-tool.js (including TERM.genres, whose terminator was the kernel section that used to follow the literal and…</li></ul>
<p><em>Verified:</em> rather than assumed, at every layer: kerneldata GENRES + 4 registries byte-identical vs HEAD, same order, 5 resolved tracks identical (the only reach into the module-private VOXBANK and…</p>
<p><a href="https://stellate.app/access.html?genre=ambient&amp;seed=6362">▶ Play it: Stationary Weather — the accessible text version, where the same music arrives as prose</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/8508e002d8894269196ac0bf013b0ed2eb810e9b">8508e00</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/8508e002d8894269196ac0bf013b0ed2eb810e9b</comments>
</item>
<item>
<title>Stage E1 step 1: a gate that proves the genre data survived the move</title>
<link>https://stellate.app/?genre=gospel&amp;seed=3652&amp;path=171.7064,190.7097,152.7097&amp;xdur=13.122</link>
<guid isPermaLink="false">bebf85bc9e425590a759f4f88dcd260bfff6a191</guid>
<pubDate>Tue, 28 Jul 2026 00:11:32 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>gospel</category>
<category>harmony</category>
<description><![CDATA[Stage E1 lifts ~810 KB of inert data out of genre-kernel.js into generated classic scripts. The plan says to build the check before anything moves, and it is right to: GENRES is 99.8% literal, but a generator that round-trips through JSON can reorder a key, normalize -0, drop an undefined, or…]]></description>
<content:encoded><![CDATA[<p>Stage E1 lifts ~810 KB of inert data out of genre-kernel.js into generated classic scripts. The plan says to build the check before anything moves, and it is right to: GENRES is 99.8% literal, but a generator that round-trips through JSON can reorder a key, normalize -0, drop an undefined, or…</p>
<ul><li>The gate compares the WORKING TREE against HEAD, the way meter.test.js's head_byte_identity already does, so it is a no-op green today, the proof during the split, and self-healing on commit afterwards -- an…</li><li>genre_order Object.keys(GENRES) drives matrix row order and the star layout. A pure reordering is invisible to a sorted hash and catastrophic downstream, so the order is compared as an ordered array and the…</li><li>Wired into verify.sh as &quot;kerneldata&quot;: 12/12 PASS.</li><li>The split itself is the next commit. Nothing has moved yet.</li></ul>
<p><em>Verified:</em> it actually fails, rather than assuming: a one-digit cutoff change (1700 -&gt; 1701, buried 547 KB into GENRES) is caught twice independently -- by the byte hash, which points straight at the…</p>
<p><a href="https://stellate.app/?genre=gospel&amp;seed=3652&amp;path=171.7064,190.7097,152.7097&amp;xdur=13.122">▶ Play it: Rapture Logistics — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/bebf85bc9e425590a759f4f88dcd260bfff6a191">bebf85b</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/bebf85bc9e425590a759f4f88dcd260bfff6a191</comments>
</item>
<item>
<title>gospel gets its piano, yachtrock its guitar</title>
<link>https://stellate.app/?genre=gospel&amp;seed=1064&amp;path=171.7086,2296.6531&amp;xdur=0.341</link>
<guid isPermaLink="false">2a6960886808f35398d9e7db10810547840e5bdf</guid>
<pubDate>Mon, 27 Jul 2026 23:42:17 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>gospel</category>
<category>yachtrock</category>
<category>harmony</category>
<description><![CDATA[The last two card-lies, fixed the way the cards asked rather than by editing the cards down. gospel's blurb promises "Hammond organ and gospel piano" and yachtrock's promises "Rhodes and clean electric guitar"]]></description>
<content:encoded><![CDATA[<p>The last two card-lies, fixed the way the cards asked rather than by editing the cards down. gospel's blurb promises &quot;Hammond organ and gospel piano&quot; and yachtrock's promises &quot;Rhodes and clean electric guitar&quot;</p>
<ul><li>Both go in the COMP pool, not the lead. Each card names its own hook -- a massed choir for gospel, a lyrical alto sax for yachtrock -- and those stay where they are</li><li>gospel + bright_yamaha_grand (not felt/upright: gospel piano is percussive and forward, and it comps against the Hammond) yachtrock + clean_guitar (the card's own words)</li><li>Capability, drawn: over 12 seeds the gospel comp resolves church_organ / rock_organ / strings / bright_yamaha_grand and yachtrock's rhodes_ep / electric_piano / strings / clean_guitar, each new instrument…</li><li>This is a kernel change and therefore a matrix change, so it was gated as one rather than assumed: matrix --no-cache still prints diagonal dominant 274/274, and no column moved off its own row.</li></ul>
<p><em>Verified:</em> verify.sh 11/11, matrix --no-cache 274/274, musicality ALL GREEN (card-lie count 3 -&gt; 0), meter byte-identity green.</p>
<p><a href="https://stellate.app/?genre=gospel&amp;seed=1064&amp;path=171.7086,2296.6531&amp;xdur=0.341">▶ Play it: Rapture Logistics → Isobar Regatta — a shuttle between the two genres this change names — the blend is the point</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/2a6960886808f35398d9e7db10810547840e5bdf">2a69608</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/2a6960886808f35398d9e7db10810547840e5bdf</comments>
</item>
<item>
<title>gates: a negated noun is not a promise, and 33 was never the number</title>
<link>https://stellate.app/?genre=gospel&amp;seed=9625&amp;path=171.7086,2296.6531&amp;xdur=0.341</link>
<guid isPermaLink="false">d52b8ed96ee5dddf1d91592c32ae37bd92677481</guid>
<pubDate>Mon, 27 Jul 2026 23:31:52 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>gospel</category>
<category>yachtrock</category>
<category>harmony</category>
<description><![CDATA[Two long-standing red gates, both stale in the same way -- an assertion that had drifted from what it was actually describing.]]></description>
<content:encoded><![CDATA[<p>Two long-standing red gates, both stale in the same way -- an assertion that had drifted from what it was actually describing.</p>
<ul><li>musicality card-lie: the catalog reported 3 over-promises. One was the checker's fault. chamber's card says &quot;NO piano and NO drums&quot;, and checkCardClaims scanned for instrument nouns with no notion of negation…</li><li>Audited rather than assumed: across all 274 cards that strip suppresses exactly one claim, chamber's piano. No other genre's warnings move.</li><li>starcruise-nav 1A/1C hardcoded 33 clusters against a clusterer that emits 34, so a healthy galaxy reported as a failure.</li><li>STILL RED, and deliberately left for a human: card-lie is now 2, not 0. gospel's card promises &quot;gospel piano&quot; and yachtrock's promises &quot;clean electric guitar&quot;, and neither pool contains the instrument -…</li></ul>
<p><em>Verified:</em> verify.sh 11/11, matrix --no-cache 274/274 diagonal dominant, starcruise-nav ALL PASS.</p>
<p><a href="https://stellate.app/?genre=gospel&amp;seed=9625&amp;path=171.7086,2296.6531&amp;xdur=0.341">▶ Play it: Rapture Logistics → Isobar Regatta — a shuttle between the two genres this change names — the blend is the point</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/d52b8ed96ee5dddf1d91592c32ae37bd92677481">d52b8ed</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/d52b8ed96ee5dddf1d91592c32ae37bd92677481</comments>
</item>
<item>
<title>SOURCES: stop promising what the deploy does not do</title>
<link>https://stellate.app/?genre=spokenword&amp;seed=3280&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122</link>
<guid isPermaLink="false">a6499598585054772e1afa23498997c3efdb6cdd</guid>
<pubDate>Mon, 27 Jul 2026 23:25:58 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>spokenword</category>
<category>voice</category>
<description><![CDATA[The media policy said tier-3 material is "never redistributed, in any form: never committed, never in a packaged build, never in a distributed render." The deploy has been contradicting that: tools/deploy-stellate.sh rsyncs found/, the root-anchored --exclude '/*.wav' never touches it, and…]]></description>
<content:encoded><![CDATA[<p>The media policy said tier-3 material is &quot;never redistributed, in any form: never committed, never in a packaged build, never in a distributed render.&quot; The deploy has been contradicting that: tools/deploy-stellate.sh rsyncs found/, the root-anchored --exclude '/*.wav' never touches it, and…</p>
<ul><li>Decision: keep the deploy, drop the promise. So this rewrites the policy header to say what actually happens -- the fetched media is served from the public web -- and rewrites the per-item promises into…</li><li>What is deliberately NOT removed: the licence facts. Every ⚠, every &quot;no licence chain&quot;, every NC/ND flag stays exactly where it was, and the header now says plainly that the terms still bind, that serving…</li><li>Also added: a note for anyone forking, since the risk is a decision the repo owner made and does not travel with the code -- with a pointer at the rsync filter that is where a stricter policy would be enforced.</li><li>One &quot;never redistributed&quot; survives, at the MIDI trove, because it is true: found/midi/ is excluded from the rsync and the corpus lives off-repo on the external drive.</li></ul>
<p><em>Verified:</em> doc-counts PASS.</p>
<p><a href="https://stellate.app/?genre=spokenword&amp;seed=3280&amp;path=196.11721,215.11754,177.11754&amp;xdur=13.122">▶ Play it: Dial Tone Prophet — the genre built out of recorded and synthesized voices</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/a6499598585054772e1afa23498997c3efdb6cdd">a649959</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/a6499598585054772e1afa23498997c3efdb6cdd</comments>
</item>
<item>
<title>LOFO: 28 MB off the deploy, and two &quot;free&quot; cuts that measured otherwise</title>
<link>https://stellate.app/?genre=bigband&amp;seed=9429&amp;path=814.14134,833.14167,795.14167&amp;xdur=13.122</link>
<guid isPermaLink="false">b96a25b592ce76c4c51d42e7fc43dab00cbcddd5</guid>
<pubDate>Mon, 27 Jul 2026 23:18:42 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>bigband</category>
<category>sampler</category>
<description><![CDATA[The free-cuts phase of the LOFO plan (docs/TODO.md). Two of the four listed cuts are genuinely free and land here; the other two were mis-scoped, and the measurements are what changed the answer.]]></description>
<content:encoded><![CDATA[<p>The free-cuts phase of the LOFO plan (docs/TODO.md). Two of the four listed cuts are genuinely free and land here; the other two were mis-scoped, and the measurements are what changed the answer.</p>
<ul><li>Landed, both rsync filters -- no app code moves. Measured with --dry-run --stats, old filters vs new: 526.18 MB / 9,591 files -&gt; 497.88 MB / 9,303.</li><li>zones.json + _gm-extract-summary.json: 134 files, 544 KB of extractor output that nothing fetches. The browser reads zone geometry from K.SAMPLERS, and faust/sf2.js says so outright.</li><li>@grame narrowed 28 MB -&gt; 194 KB. The web needs exactly one file of that tree, dist/esm/index.js, from which live.js / stream-worker.js / stem-worker.js import FaustWasmInstantiator and FaustMonoDspGenerator to…</li><li>dx7-presets.json. The 671 KB in the plan is the raw size; the live server sends it gzipped at 74.7 KB.</li></ul>
<p><em>Verified:</em> verify.sh 11/11; deploy script syntax-checked and its filters dry-run verified to ship exactly dist/esm/index.js and no zones.json.</p>
<p><a href="https://stellate.app/?genre=bigband&amp;seed=9429&amp;path=814.14134,833.14167,795.14167&amp;xdur=13.122">▶ Play it: Ballroom Leviathan — a horn-and-piano genre that plays almost entirely sampled instruments</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/b96a25b592ce76c4c51d42e7fc43dab00cbcddd5">b96a25b</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/b96a25b592ce76c4c51d42e7fc43dab00cbcddd5</comments>
</item>
<item>
<title>strip the session out of the source: no dates, no attributions, no branches</title>
<link>https://stellate.app/?genre=trap&amp;seed=6754&amp;path=1504.8922,1523.8955,1485.8955&amp;xdur=13.122</link>
<guid isPermaLink="false">4e0f650a8d0e82861e5eba25fddee1538a052396</guid>
<pubDate>Mon, 27 Jul 2026 23:18:24 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>trap</category>
<category>accessibility</category>
<description><![CDATA[Stage C of the 1.0 source cleanup (docs/TODO.md). The comments kept every technical claim they were making and lost the provenance around it: dated attributions, quoted session speech, git SHAs, branch-name narration, and ~330 bare dates that told a reader when something happened rather than what it…]]></description>
<content:encoded><![CDATA[<p>Stage C of the 1.0 source cleanup (docs/TODO.md). The comments kept every technical claim they were making and lost the provenance around it: dated attributions, quoted session speech, git SHAs, branch-name narration, and ~330 bare dates that told a reader when something happened rather than what it…</p>
<ul><li>Also in scope, all named in the plan: glyphs.js's 15-line ARCHAEOLOGY block; four test files still heading themselves &quot;// faust/...&quot; from before they moved into test/</li><li>Deliberately kept: author metadata, the visible credits and the MIT line -- that is attribution, not narration. Citations of docs that still exist (TIMING-AUDIT, ENGINE-AUDIT)</li><li>The tool needed fixing first. Its walker knew about strings but not regex literals, so a literal like /['&quot;]/ flipped it into &quot;inside a string&quot; and it silently stopped stripping comments for the rest of the…</li><li>Two failures predate this and are untouched, confirmed identical against a stashed clean tree: musicality.test's card-lie count (3 genre cards promise an instrument their recipe cannot realize) and…</li></ul>
<p><em>Verified:</em> comment-only.js is the tool for this pass: it strips comments and whitespace from both revisions and diffs what is left, so &quot;I only edited comments&quot; is checkable instead of merely claimed.</p>
<p><a href="https://stellate.app/?genre=trap&amp;seed=6754&amp;path=1504.8922,1523.8955,1485.8955&amp;xdur=13.122">▶ Play it: Locust Arithmetic — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/4e0f650a8d0e82861e5eba25fddee1538a052396">4e0f650</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/4e0f650a8d0e82861e5eba25fddee1538a052396</comments>
</item>
<item>
<title>delete what is actually dead; keep what only looked dead</title>
<link>https://stellate.app/embed.html?genre=citypop&amp;seed=6859&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122</link>
<guid isPermaLink="false">0d0fea6baf00b9dd23c6cb59e79daee15adeb38a</guid>
<pubDate>Mon, 27 Jul 2026 21:34:21 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>embed</category>
<description><![CDATA[The audit that proposed this pass graded far too much as dead, because it grepped for test wrappers instead of the requires. Checking each claim first:]]></description>
<content:encoded><![CDATA[<p>The audit that proposed this pass graded far too much as dead, because it grepped for test wrappers instead of the requires. Checking each claim first:</p>
<ul><li>engine/checks/ (5 files, 899 lines) — &quot;zero CI reach&quot;. WRONG.</li><li>tools/make-mix-page.js — &quot;zero references&quot;. WRONG. genre-kernel.js:8942 and :8978 execFileSync it from the playlist and journey CLIs.</li><li>tools/fetch-found-voice.sh — &quot;dead&quot;. It is the committed recipe SOURCES.md cites as the provenance for the voice tier, which is the whole media policy: we ship the recipe, not the media.</li><li>What was genuinely unreferenced, and is now gone (1,431 lines): seven probe-*.js with no citation anywhere, and the four starcruise screenshot scripts, which produce PNGs and assert nothing.</li></ul>
<p><em>Verified:</em> probe-reverb.js and friends — &quot;unreferenced one-offs&quot;. Five .dsp source files and engine/faust/VOICES.md cite them by name as the tuning instruments for those DSPs.</p>
<p><a href="https://stellate.app/embed.html?genre=citypop&amp;seed=6859&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122">▶ Play it: Neon Fiscal Year — the embeddable player, in someone else's page</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/0d0fea6baf00b9dd23c6cb59e79daee15adeb38a">0d0fea6</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/0d0fea6baf00b9dd23c6cb59e79daee15adeb38a</comments>
</item>
<item>
<title>doc-counts: check tracked files, not the filesystem</title>
<link>https://stellate.app/?genre=citypop&amp;seed=9135&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056</link>
<guid isPermaLink="false">38286bcfa23acd43ea777f60fd046d455ebd8402</guid>
<pubDate>Mon, 27 Jul 2026 19:58:43 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>downtempo</category>
<category>dnb</category>
<description><![CDATA[It walked the working tree and swept in a nested git worktree left lying around, then failed on THAT checkout's copies of the docs. A checkout which is not part of this commit cannot make this commit wrong. `git ls-files '*.md'` is both narrower and exactly the intent: the docs we ship.]]></description>
<content:encoded><![CDATA[<p>It walked the working tree and swept in a nested git worktree left lying around, then failed on THAT checkout's copies of the docs. A checkout which is not part of this commit cannot make this commit wrong. `git ls-files '*.md'` is both narrower and exactly the intent: the docs we ship.</p>
<p><a href="https://stellate.app/?genre=citypop&amp;seed=9135&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056">▶ Play it: Neon Fiscal Year → Benthic Patience → Silken Reentry — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/38286bcfa23acd43ea777f60fd046d455ebd8402">38286bc</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/38286bcfa23acd43ea777f60fd046d455ebd8402</comments>
</item>
<item>
<title>LOFO: the instrument zone library is MP3 now — 98.65 MB to 7.08 MB</title>
<link>https://stellate.app/?genre=transitwave&amp;seed=1309&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122</link>
<guid isPermaLink="false">f9ffe5dd888d5b73a8cc3e1f1ea3f30abd9a537c</guid>
<pubDate>Mon, 27 Jul 2026 19:58:43 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>transitwave</category>
<category>found</category>
<description><![CDATA[13.94x, measured, across all 108 samplers and 614 zones, at mono 22.05 kHz 48 kbps. Not a fidelity trade in disguise: instrument zones carry 0.254% mean energy above 11 kHz, so 48k/22.05k measures a HIGHER SNR (24.7 dB) than 64k/44.1k while being 25% smaller.]]></description>
<content:encoded><![CDATA[<p>13.94x, measured, across all 108 samplers and 614 zones, at mono 22.05 kHz 48 kbps. Not a fidelity trade in disguise: instrument zones carry 0.254% mean energy above 11 kHz, so 48k/22.05k measures a HIGHER SNR (24.7 dB) than 64k/44.1k while being 25% smaller.</p>
<ul><li>HOSTING.md said this was impossible, because loop points are absolute sample indices and 552 of the 614 zones loop.</li><li>len — the decoded sample count, so a padded buffer can be spotted at all. sr — the zone FILE's rate.</li><li>Two ordering bugs in the tool, found by review: it deleted each sampler's WAVs as that sampler finished but spliced the metadata once at the very end, so an interrupt left media gone with nothing describing…</li><li>: the rename lives inside genre-kernel.js, which rides stale-while-revalidate, so without a bump a returning listener's first load after deploy would serve the WAV-era kernel and 404 every zone.</li></ul>
<p><a href="https://stellate.app/?genre=transitwave&amp;seed=1309&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122">▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/f9ffe5dd888d5b73a8cc3e1f1ea3f30abd9a537c">f9ffe5d</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/f9ffe5dd888d5b73a8cc3e1f1ea3f30abd9a537c</comments>
</item>
<item>
<title>docs: delete three docs that were actively misleading</title>
<link>https://stellate.app/?genre=citypop&amp;seed=3698&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056</link>
<guid isPermaLink="false">bd94b1ea7720a5c7bcc6edd132f6af9f8cd2083a</guid>
<pubDate>Mon, 27 Jul 2026 18:27:33 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>downtempo</category>
<category>dnb</category>
<description><![CDATA[KERNEL-MAP.md was a line-number index into genre-kernel.js in which every one of the thirteen entries was wrong — GENRES documented at 1663 and actually at 1327, toState at 7908 and actually at 8198.]]></description>
<content:encoded><![CDATA[<p>KERNEL-MAP.md was a line-number index into genre-kernel.js in which every one of the thirteen entries was wrong — GENRES documented at 1663 and actually at 1327, toState at 7908 and actually at 8198.</p>
<ul><li>ROADMAP.md was a 2026-07-11 plan with 38 items already marked done, referencing four docs that were never written, and opening with a ground-truth block asserting 249 anchors while scolding other docs for…</li><li>STARCRUISE-LIBS.md was an adoption plan for five libraries; two shipped and are recorded in vendor/*/VERSION.txt and NOTICE, and the other three never existed in this tree.</li><li>Their citations are fixed rather than orphaned: ARCHITECTURE.md drops the KERNEL-MAP pointer, planet.js loses it from a code comment, TODO stops calling ROADMAP the place plans graduate to.</li><li>STARCRUISE.md said &quot;Status: SCAFFOLD (this commit)&quot; and called five modules stubs rendering a placeholder scene. They are ~7,300 lines.</li></ul>
<p><a href="https://stellate.app/?genre=citypop&amp;seed=3698&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056">▶ Play it: Neon Fiscal Year → Benthic Patience → Silken Reentry — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/bd94b1ea7720a5c7bcc6edd132f6af9f8cd2083a">bd94b1e</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/bd94b1ea7720a5c7bcc6edd132f6af9f8cd2083a</comments>
</item>
<item>
<title>delete playlist/ — committed derived output that was deploying</title>
<link>https://stellate.app/?genre=vaporwave&amp;seed=3695&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046</link>
<guid isPermaLink="false">695c4cf7ee52b82a653d052f401d390c2f64cf83</guid>
<pubDate>Mon, 27 Jul 2026 18:27:12 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>vaporwave</category>
<category>jazz</category>
<category>jungle</category>
<category>travel</category>
<description><![CDATA[31 tracked files, untouched since 2026-06-11, read by no code: `track` and `journey` write a playlist.json into whatever --out you give them, and make-mix-page.js takes its directory as an argument.]]></description>
<content:encoded><![CDATA[<p>31 tracked files, untouched since 2026-06-11, read by no code: `track` and `journey` write a playlist.json into whatever --out you give them, and make-mix-page.js takes its directory as an argument.</p>
<ul><li>It also contradicted the repo's headline rule in public — source is committed, audio is derived and gitignored</li><li>The .gitignore comment that kept them tracked cited &quot;playlist/ and mix/&quot;; mix/ has not existed for some time.</li></ul>
<p><a href="https://stellate.app/?genre=vaporwave&amp;seed=3695&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046">▶ Play it: Food Court Eternity → Smoke Arithmetic → Barometric Stampede — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/695c4cf7ee52b82a653d052f401d390c2f64cf83">695c4cf</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/695c4cf7ee52b82a653d052f401d390c2f64cf83</comments>
</item>
<item>
<title>verify: run the load-order gate, and fix the race that hid it</title>
<link>https://stellate.app/?genre=vaporwave&amp;seed=7717&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046</link>
<guid isPermaLink="false">f6ebdd2d5cc2e4fa1e08d1dc027e3e9f9240b64a</guid>
<pubDate>Mon, 27 Jul 2026 18:27:12 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>vaporwave</category>
<category>jazz</category>
<category>jungle</category>
<category>travel</category>
<description><![CDATA[boot-smoke.js parses index.html, replays its classic <script> block in a vm sandbox, and fails if a script moves, disappears or stops publishing its window global. It is the gate that makes moving engine files survivable — and it lived only in `npm run test:pure`, which CI never calls.]]></description>
<content:encoded><![CDATA[<p>boot-smoke.js parses index.html, replays its classic &lt;script&gt; block in a vm sandbox, and fails if a script moves, disappears or stops publishing its window global. It is the gate that makes moving engine files survivable — and it lived only in `npm run test:pure`, which CI never calls.</p>
<ul><li>Adding it surfaced a latent race. The wait loop sized itself with `jobs -rp | wc -l`, which lists only jobs still RUNNING, so any suite finishing before the count was taken went unrecorded: the loop exited…</li><li>Also adds doc-counts.test.js: the anchor count has been wrong in the docs three times over and drifts silently because nothing reads it.</li><li>And corrects the header, which advertised four suites while the body forked ten, and pointed at scratch/.verify-cache when the cache is under engine/scratch/.</li></ul>
<p><a href="https://stellate.app/?genre=vaporwave&amp;seed=7717&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046">▶ Play it: Food Court Eternity → Smoke Arithmetic → Barometric Stampede — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/f6ebdd2d5cc2e4fa1e08d1dc027e3e9f9240b64a">f6ebdd2</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/f6ebdd2d5cc2e4fa1e08d1dc027e3e9f9240b64a</comments>
</item>
<item>
<title>hosting: don't hardcode the droplet's IP</title>
<link>https://stellate.app/?genre=citypop&amp;seed=3215&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056</link>
<guid isPermaLink="false">46f5ca3f55cdb51825fc121b2b64db77830e8ec6</guid>
<pubDate>Mon, 27 Jul 2026 17:48:42 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>downtempo</category>
<category>dnb</category>
<description><![CDATA[Ahead of the repo going public. The address is public via DNS anyway, so this is not a secret — but writing it down pins a box that DNS already answers for, and it goes stale the moment the droplet is replaced. `dig +short stellate.app` is both current and correct.]]></description>
<content:encoded><![CDATA[<p>Ahead of the repo going public. The address is public via DNS anyway, so this is not a secret — but writing it down pins a box that DNS already answers for, and it goes stale the moment the droplet is replaced. `dig +short stellate.app` is both current and correct.</p>
<p><a href="https://stellate.app/?genre=citypop&amp;seed=3215&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056">▶ Play it: Neon Fiscal Year → Benthic Patience → Silken Reentry — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/46f5ca3f55cdb51825fc121b2b64db77830e8ec6">46f5ca3</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/46f5ca3f55cdb51825fc121b2b64db77830e8ec6</comments>
</item>
<item>
<title>drop the verifier-catalog submodule</title>
<link>https://stellate.app/?genre=vaporwave&amp;seed=1943&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046</link>
<guid isPermaLink="false">72b60eb762fceaa987c3ec8593b5c8a8dc162297</guid>
<pubDate>Mon, 27 Jul 2026 17:47:22 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>vaporwave</category>
<category>jazz</category>
<category>jungle</category>
<category>travel</category>
<description><![CDATA[Nothing in the app, the gates or CI ever imported it — it was reference data plus an MCP tool, already documented as optional and deliberately not checked out by the workflow.]]></description>
<content:encoded><![CDATA[<p>Nothing in the app, the gates or CI ever imported it — it was reference data plus an MCP tool, already documented as optional and deliberately not checked out by the workflow.</p>
<ul><li>Removes the submodule, .gitmodules and .mcp.json, and rewrites the places that explained them: CLAUDE.md loses the catalog section, README/SETUP lose the submodule init line, CONTRIBUTING loses the…</li><li>The generator-verifier-feedback-loop idea stays — it is the thing this repo demonstrates, and it no longer needs a footnote pointing somewhere else.</li></ul>
<p><a href="https://stellate.app/?genre=vaporwave&amp;seed=1943&amp;path=1679.4415,292.16891,1718.20526&amp;xdur=0.046">▶ Play it: Food Court Eternity → Smoke Arithmetic → Barometric Stampede — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/72b60eb762fceaa987c3ec8593b5c8a8dc162297">72b60eb</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/72b60eb762fceaa987c3ec8593b5c8a8dc162297</comments>
</item>
<item>
<title>vendor: serve the modules as .js — nginx does not map .mjs</title>
<link>https://stellate.app/?genre=citypop&amp;seed=8524&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056</link>
<guid isPermaLink="false">63cdc83ca28430f172fefeeab0c67d8a3ac410b6</guid>
<pubDate>Mon, 27 Jul 2026 17:34:07 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>downtempo</category>
<category>dnb</category>
<description><![CDATA[Deployed and immediately broken: stock nginx mime.types has no .mjs entry, so preact.mjs and htm.mjs went out as application/octet-stream and every browser refused them.]]></description>
<content:encoded><![CDATA[<p>Deployed and immediately broken: stock nginx mime.types has no .mjs entry, so preact.mjs and htm.mjs went out as application/octet-stream and every browser refused them.</p>
<ul><li>Renaming to .js fixes it with no server config: .js is mapped to text/javascript on every host, so this cannot regress on a reinstall, a new box, or the second site served off this same tree.</li><li>This is the same failure the probe harness hit before it learned .mjs, which is the one place .mjs still needs to work: the harness serves the tree itself.</li></ul>
<p><a href="https://stellate.app/?genre=citypop&amp;seed=8524&amp;path=1530.6221,586.10667,1376.19565&amp;xdur=0.056">▶ Play it: Neon Fiscal Year → Benthic Patience → Silken Reentry — a constellation across three families — the path is the mix</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/63cdc83ca28430f172fefeeab0c67d8a3ac410b6">63cdc83</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/63cdc83ca28430f172fefeeab0c67d8a3ac410b6</comments>
</item>
<item>
<title>ui: uncrop the radar labels, alienize the region names, fix the contact</title>
<link>https://stellate.app/?genre=techno&amp;seed=7338&amp;path=1956.22436,1718.20526,1679.4415&amp;xdur=0.042</link>
<guid isPermaLink="false">392746ca2b58c1c7cb7c300a7aebfe219ac0457b</guid>
<pubDate>Mon, 27 Jul 2026 17:30:13 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>techno</category>
<category>jungle</category>
<category>vaporwave</category>
<category>visual</category>
<description><![CDATA[The feel radar's viewBox was 0 0 220 220 with axis labels centred on each spoke at r=1.26. "adventure" sits at exactly 180 degrees and is the longest axis name, so it ran 7.4px past x=0 and lost its first letter.]]></description>
<content:encoded><![CDATA[<p>The feel radar's viewBox was 0 0 220 220 with axis labels centred on each spoke at r=1.26. &quot;adventure&quot; sits at exactly 180 degrees and is the longest axis name, so it ran 7.4px past x=0 and lost its first letter.</p>
<ul><li>The big territory watermarks on the star map now wear the same alien alphabet as the genre labels. Drawn only -- the __REGIONS debug hook still emits real names, because the headless gates match on them.</li><li>.ab-foot wore a footer's top border after moving to the top of the About card; it gets a header's bottom rule instead.</li><li>security.txt contact -&gt; paul.ford@aboard.com.</li></ul>
<p><a href="https://stellate.app/?genre=techno&amp;seed=7338&amp;path=1956.22436,1718.20526,1679.4415&amp;xdur=0.042">▶ Play it: Unblinking Interval → Barometric Stampede → Food Court Eternity — a three-star constellation to watch the map work</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/392746ca2b58c1c7cb7c300a7aebfe219ac0457b">392746c</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/392746ca2b58c1c7cb7c300a7aebfe219ac0457b</comments>
</item>
<item>
<title>map: push the two crowded star pairs back over the separation floor</title>
<link>https://stellate.app/?genre=reedrush&amp;seed=8285&amp;path=845.15075,1137.16213,249.13036&amp;xdur=0.227</link>
<guid isPermaLink="false">2e75c5cda03a067f7b0fee087ca302d36f0bdf2b</guid>
<pubDate>Mon, 27 Jul 2026 17:30:13 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>reedrush</category>
<category>hexagonstampede</category>
<category>salsa</category>
<description><![CDATA[world.js warned [POS] min pairwise 75.0 on every load. Two pairs were under MIN_SEP_FLOOR, not one -- only the minimum gets reported: salsa/reggaeton at 75.0 and ragtime/reedrush at 80.0.]]></description>
<content:encoded><![CDATA[<p>world.js warned [POS] min pairwise 75.0 on every load. Two pairs were under MIN_SEP_FLOOR, not one -- only the minimum gets reported: salsa/reggaeton at 75.0 and ragtime/reedrush at 80.0.</p>
<ul><li>Each pair is pushed apart along its own axis with the midpoint held -- the smallest move that clears the floor, and the one that least disturbs either star's relationship to everything else.</li><li>Min pairwise is now 93.1 (flamenco/hexagonstampede) and the warning is gone.</li></ul>
<p><a href="https://stellate.app/?genre=reedrush&amp;seed=8285&amp;path=845.15075,1137.16213,249.13036&amp;xdur=0.227">▶ Play it: Bulrush Cyclotron → Benzene Cavalry → Clave Reactor — the three genres this change names, as one path</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/2e75c5cda03a067f7b0fee087ca302d36f0bdf2b">2e75c5c</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/2e75c5cda03a067f7b0fee087ca302d36f0bdf2b</comments>
</item>
<item>
<title>vendor preact, htm and the two webfonts: nothing is fetched from anyone else</title>
<link>https://stellate.app/embed.html?genre=citypop&amp;seed=9259&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122</link>
<guid isPermaLink="false">de6c9de38b9f724897993cb5bfee377d3107915a</guid>
<pubDate>Mon, 27 Jul 2026 17:29:50 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>citypop</category>
<category>embed</category>
<description><![CDATA[app/state.js imported preact and htm from esm.sh at runtime, and five pages linked fonts.googleapis.com. Three consequences, one of them serious:]]></description>
<content:encoded><![CDATA[<p>app/state.js imported preact and htm from esm.sh at runtime, and five pages linked fonts.googleapis.com. Three consequences, one of them serious:</p>
<ul><li>The PWA could not boot offline. sw.js passes cross-origin through and never caches it, so the service worker could hold the entire app and all its media and the instrument still would not start without a live…</li><li>The page is COEP require-corp and neither host sends Cross-Origin-Resource- Policy, which is what Safari was reporting -- and it means Orbitron and VT323 were very likely not rendering in production at all.</li><li>And a third party saw a request from every visitor, which undercuts the &quot;no accounts, no cookies, no data&quot; posture the security.txt advertises.</li><li>vendor/preact, vendor/htm and vendor/fonts follow the pattern the other five vendored libraries already use: exact version, upstream LICENSE, a VERSION.txt saying why.</li></ul>
<p><a href="https://stellate.app/embed.html?genre=citypop&amp;seed=9259&amp;path=1530.6199,1549.6232,1511.6232&amp;xdur=13.122">▶ Play it: Neon Fiscal Year — the embeddable player, in someone else's page</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/de6c9de38b9f724897993cb5bfee377d3107915a">de6c9de</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/de6c9de38b9f724897993cb5bfee377d3107915a</comments>
</item>
<item>
<title>found: fade the layer across a blend instead of falling off a cliff</title>
<link>https://stellate.app/?genre=vaporwave&amp;seed=4594&amp;path=1679.4393,1698.4426,1660.4426&amp;xdur=13.122</link>
<guid isPermaLink="false">b66fe5a215ab510024030348162b35111ae556ff</guid>
<pubDate>Mon, 27 Jul 2026 17:29:36 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>vaporwave</category>
<category>mix</category>
<description><![CDATA[FOUND-AT-90% dropped the whole found layer one notch past dominance. Measured on a vaporwave->techno sweep, that left zero found events from t=0.15 to t=0.95 -- about 89% of every crossfade -- and 75% of sampled playlist tracks with no found layer at all.]]></description>
<content:encoded><![CDATA[<p>FOUND-AT-90% dropped the whole found layer one notch past dominance. Measured on a vaporwave-&gt;techno sweep, that left zero found events from t=0.15 to t=0.95 -- about 89% of every crossfade -- and 75% of sampled playlist tracks with no found layer at all.</p>
<ul><li>Two changes. The delete becomes an amplitude ramp: full out to t=0.1, linear to silence by 0.5, events under a small floor dropped rather than scheduled as inaudible voices.</li><li>And a bug the cliff was hiding: genreMeta.t is the raw blend position, not distance from the nearest anchor, so testing t alone killed the layer across the entire second half of every crossfade -- including…</li><li>FOUND_FADE_T is a named constant because the width is an ears question; no gate can settle it.</li></ul>
<p><a href="https://stellate.app/?genre=vaporwave&amp;seed=4594&amp;path=1679.4393,1698.4426,1660.4426&amp;xdur=13.122">▶ Play it: Food Court Eternity — parked on the genre this change names</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/b66fe5a215ab510024030348162b35111ae556ff">b66fe5a</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/b66fe5a215ab510024030348162b35111ae556ff</comments>
</item>
<item>
<title>precache: warm the set the engine actually asks for</title>
<link>https://stellate.app/?genre=transitwave&amp;seed=3668&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122</link>
<guid isPermaLink="false">27e62ad42d591d583adc6f32e74f70a7c94fd048</guid>
<pubDate>Mon, 27 Jul 2026 17:29:22 GMT</pubDate>
<dc:creator>Paul Ford</dc:creator>
<author>ford@ftrain.com (Paul Ford)</author>
<category>transitwave</category>
<category>found</category>
<description><![CDATA[genreFiles read s.file and instruments.pad.sampler. Neither shape exists: found sources carry samplePath, and the voice objects have no .sampler key at all, so addSampler returned at its first guard every time.]]></description>
<content:encoded><![CDATA[<p>genreFiles read s.file and instruments.pad.sampler. Neither shape exists: found sources carry samplePath, and the voice objects have no .sampler key at all, so addSampler returned at its first guard every time.</p>
<ul><li>It now reads the same set live.js schedules from -- sch.found srcIds union the sampler zone srcIds -- via buildSchedule, and resolves them through the player's own local resolver rather than s.url, which is…</li><li>Deliberately NOT keyed off state.foundSources: the resolved state declares the whole crate, not the draw set, which would pull ~625 files / 100MB per genre.</li></ul>
<p><a href="https://stellate.app/?genre=transitwave&amp;seed=3668&amp;path=749.12536,768.12569,730.12569&amp;xdur=13.122">▶ Play it: Rail Replacement Rapture — a bed-heavy genre where the found-sound layer carries the room</a></p>
<p><small><a href="https://github.com/aboard-io/stellate/commit/27e62ad42d591d583adc6f32e74f70a7c94fd048">27e62ad</a> · <a href="https://stellate.app/colophon.html">colophon</a> · <a href="https://github.com/aboard-io/stellate">source</a></small></p>]]></content:encoded>
<comments>https://github.com/aboard-io/stellate/commit/27e62ad42d591d583adc6f32e74f70a7c94fd048</comments>
</item>
</channel>
</rss>
