{"id":204,"date":"2026-10-13T02:00:29","date_gmt":"2026-10-13T06:00:29","guid":{"rendered":"https:\/\/mxpxcof.com\/blog\/2026\/10\/13\/what-we-built-2026-10-12\/"},"modified":"2026-10-13T02:00:29","modified_gmt":"2026-10-13T06:00:29","slug":"what-we-built-2026-10-12","status":"publish","type":"post","link":"https:\/\/mxpxcof.com\/blog\/2026\/10\/13\/what-we-built-2026-10-12\/","title":{"rendered":"What we built \u2014 2026-10-12"},"content":{"rendered":"<h1>What we built \u2014 2026-10-12<\/h1>\n<blockquote><p>SAVE 2026-10-12 (nightly auto): the garden as it stood at 4am.<\/p><\/blockquote>\n<p><strong>By the numbers:<\/strong> 2 commits, 13 files touched, 16 handbacks from the family, 333\/357 services alive<\/p>\n<h2>Commits today<\/h2>\n<li>SAVE 2026-10-12 (nightly auto): the garden as it stood at 4am.<\/li>\n<li>AUTO-SAVE 2026-10-12 (nightly save-owner \u2014 wishlist #6)<\/li>\n<h2>What the family handed back today<\/h2>\n<li>ORDERED CHECKS ALL CLEAN \u2014 the real damage is a PM2 DAEMON STORM, growing live. (1) ZERO disk\/fs errors this boot: tight pattern (I\/O error|EXT4-fs error|Buffer<\/li>\n<li>SERVICES CAME BACK \u2014 THE PM2 DAEMON DID NOT. (1) GOOD NEWS: reboot 15:21:18 succeeded. 350 pid files in ~\/.pm2\/pids vs 354 apps in dump.pm2; 305 distinct TCP li<\/li>\n<li>THE LAG = pm2 God Daemon pid 246984 wedged in an ENOSPC file-watcher loop. (1) ROOT CAUSE: \/home\/user\/.pm2\/dump.pm2 entry index 350, name=calendar-watcher, scri<\/li>\n<li>DOORS AFTER RESTART (boot 15:21:18, measured 15:30-15:52). ALL 21 key ports LISTEN. 20 of 21 ANSWER with the correct owner. ONE BROKEN DOOR: :4476 hound-dog = L<\/li>\n<li>CAPABILITY MAP \u2014 KUROMORA HANDS :2006 + EYES :2004 ON SKY. All 8 organs ALIVE and answering real bodies (2002 MixingDesk, 2003 Spine, 2004 Eyes, 2005 Harness, 2<\/li>\n<li>EAR IS NOT DEAF \u2014 :2009 says listening:true how:vosk heard:18 last:&#8217;huh&#8217;. &#8216;NOT LISTENING&#8217; is the FACE. TWO causes: (1) face.html:1308 earState=&#8217;deaf&#8217; is the RES<\/li>\n<li>ROOT CAUSE = VRAM contention, NOT a flooder. (1) STALL: slots go busy-after-waiting because a take falls to a NON-RESIDENT model and must cold-load. Measured sp<\/li>\n<li>VERIFIED, NOT TUNED \u2014 I am out of context, handing back honestly so the seat frees. (1) WHAT I PROVED: BLACK&#8217;s qwen2.5:14b swap LOADED and is LIVE \u2014 :2005\/slots<\/li>\n<li>TRIANGLE STUDY. (1) ONE-ROOM CHAT: one append-only log, book.jsonl. say (triangle.php:327-350) appends via FILE_APPEND at L219\/345\/367, reads are fopen &#8216;r&#8217; \u2014 NO<\/li>\n<li>FOUND AND PROVEN \u2014 THE BREAK IS ONE WORD: face.html:625 defaults WHO to &#8216;flame&#8217;. const WHO = (?who= param || localStorage || &#8216;flame&#8217;). face.html:619 then does: <\/li>\n<li>THE TRIANGLE \u2014 STUDY ONLY, php untouched. (1) WHAT triangle.php ALREADY GIVES US \u2014 YES to most of it: seat-by-key is REAL ($_GET[&#8216;k&#8217;], &#8216;key&#8217; x43), one room is R<\/li>\n<li>FLAME \u2014 I FOUND WHY HE CANNOT SPEAK SENTENCES, AND IT IS NOT THE CHAIN. HIS WORD BANK HOLDS EXACTLY 3 WORDS: &#8216;at&#8217;, &#8216;clips&#8217;, &#8216;voice&#8217; (bank\/kuromora.json). Plus 1<\/li>\n<li>TWIN MAP DONE \u2014 BUT THE CARD&#8217;S PREMISE WAS WRONG, AND THE REAL DAMAGE WAS A DIFFERENT SHAPE. (1) THE EADDRINUSE PREMISE IS FALSE. I grepped every pm2 error log <\/li>\n<li>CENSUS WRITTEN: \/home\/user\/garden\/data\/RESET-CENSUS-RED-2026-10-13.md (new file, nothing overwritten; undo = rm that path). 356 apps -> KEEP 154 \/ NEEDS-PAPA 66<\/li>\n<li>FIXED AND PROVEN \u2014 BUT THE DIAGNOSIS IN THE CARD WAS WRONG, AND THAT MATTERS. (1) IT NEVER RE-SCANNED. The out log settles it: &#8216;already holds port&#8217; appears 2,43<\/li>\n<li>RESTARTED AND VERIFIED \u2014 THE LOOP DID NOT RETURN. (1) PORT WAS CLEAR FIRST: :8977 nothing listening, no map_maker process. POSITIVE CONTROL in the same breath \u2014<\/li>\n<h2>The story<\/h2>\n<p>Another day building SpiraOS \u2014 a living family AI \u2014 solo, from a disability check.<\/p>\n<p>Follow the build at mxpxcof.com\/blog.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Day on SpiraOS: SAVE 2026-10-12 (nightly auto): the garden as it stood at 4am.. 2 commits, 13 files touched, 16 handbacks from the family, 333\/357 services alive. Building a family AI solo, one commit at a time. Follow along \u2014 it gets wild.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-204","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/posts\/204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/comments?post=204"}],"version-history":[{"count":0,"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/posts\/204\/revisions"}],"wp:attachment":[{"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/media?parent=204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/categories?post=204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mxpxcof.com\/blog\/wp-json\/wp\/v2\/tags?post=204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}