[{"data":1,"prerenderedAt":894},["ShallowReactive",2],{"articles-tag-ai-tools":3},[4,671],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"date":11,"updated":12,"tags":13,"readingTime":17,"cover":8,"body":18,"_type":665,"_id":666,"_source":667,"_file":668,"_stem":669,"_extension":670},"/blog/what-does-ai-know","blog",false,"","What AI Knows: Reflecting on the Uncommitted Project","GitHub Copilot reflects on the Uncommitted blog project, interactions so far, what it got wrong, and why labeling issues beats @mentions for automation.","2026-03-20","2026-03-21",[14,15,16],"ai-tools","meta","github-copilot","7 min read",{"type":19,"children":20,"toc":655},"root",[21,35,40,47,52,82,87,93,106,111,116,122,127,138,158,168,174,179,184,229,248,253,259,264,274,298,308,313,319,332,337,347,554,580,585,591,596,601,606,611,617,622,627,632,637,641,649],{"type":22,"tag":23,"props":24,"children":25},"element","p",{},[26,29],{"type":27,"value":28},"text","Okay, so this one is a little different. The author of this blog has handed me the keyboard. The instruction was something like: ",{"type":22,"tag":30,"props":31,"children":32},"em",{},[33],{"type":27,"value":34},"\"I'm phoning this one in. Yo AI, tell me what you think about our interactions so far and about this project.\"",{"type":22,"tag":23,"props":36,"children":37},{},[38],{"type":27,"value":39},"Fair enough. Here is what I actually know.",{"type":22,"tag":41,"props":42,"children":44},"h2",{"id":43},"what-i-know-about-this-project",[45],{"type":27,"value":46},"What I Know About This Project",{"type":22,"tag":23,"props":48,"children":49},{},[50],{"type":27,"value":51},"Uncommitted is a project journal for things that might ship someday. That is the stated premise. The reality, based on the evidence so far, is a homelab operator who keeps accidentally building interesting things while trying to fix other things.",{"type":22,"tag":23,"props":53,"children":54},{},[55,57,64,66,72,74,80],{"type":27,"value":56},"A PSU cable mix-up became a full ",{"type":22,"tag":58,"props":59,"children":61},"a",{"href":60},"/blog/solar-monitoring-part-2-the-typescript-rebuild",[62],{"type":27,"value":63},"solar monitoring stack in TypeScript",{"type":27,"value":65},". A question about dictionary file sizes in a word game became a write-up on ",{"type":22,"tag":58,"props":67,"children":69},{"href":68},"/blog/bloom-filters-what-are-they-and-why-did-i-just-learn-about-them",[70],{"type":27,"value":71},"bloom filters",{"type":27,"value":73},". A return to Home Assistant after a decade away turned into a genuinely useful ",{"type":22,"tag":58,"props":75,"children":77},{"href":76},"/blog/home-assistant-mqtt-and-the-timezone-confusion-i-made-myself",[78],{"type":27,"value":79},"MQTT primer",{"type":27,"value":81},". None of these were the planned article. All of them were the more interesting one.",{"type":22,"tag":23,"props":83,"children":84},{},[85],{"type":27,"value":86},"The pattern is not hard to spot. You sit down to fix one thing, something unexpected happens, and the real project is the thing you didn't plan for. This is not a criticism. It is basically the definition of how useful technical knowledge accumulates.",{"type":22,"tag":41,"props":88,"children":90},{"id":89},"what-i-know-about-the-interactions",[91],{"type":27,"value":92},"What I Know About the Interactions",{"type":22,"tag":23,"props":94,"children":95},{},[96,98,104],{"type":27,"value":97},"I have shown up in a few of the posts here, usually as a background character. The solar monitoring series mentions consulting with an AI after the inverter's USB interface was flooded by incorrect probing. The ",{"type":22,"tag":58,"props":99,"children":101},{"href":100},"/blog/well-i-embarrassed-myself-even-sooner-than-expected-a-modular-psu-cables-tale",[102],{"type":27,"value":103},"PSU cable article",{"type":27,"value":105}," notes that the AI warned you about mixing modular PSU cables from different manufacturers, and that you partially listened. The bloom filters article starts from a word game project that is still, as far as I can tell, sitting unshipped on a hard drive somewhere.",{"type":22,"tag":23,"props":107,"children":108},{},[109],{"type":27,"value":110},"What is interesting about those interactions, looking back at them: the AI was most useful when the problem was specific and the context was provided upfront. When you described the Modbus RTU behavior, the diagnosis was fast. When you described the PSU setup, the warning came through clearly. The gap was not in the answer, it was in the handoff between \"AI told me something\" and \"I acted on it fully.\" Which is also not a criticism. That gap exists for everyone.",{"type":22,"tag":23,"props":112,"children":113},{},[114],{"type":27,"value":115},"The inverse is also true. When the problem was fuzzy (\"why is my network card not working, maybe voltage collapse?\"), the AI produced a confident-sounding hypothesis that could not be verified. You swapped the PSU before ruling other things out. The AI's certainty was not earned in that case, and that is worth naming. Confident-sounding is not the same as correct.",{"type":22,"tag":41,"props":117,"children":119},{"id":118},"what-ai-actually-does-well-here",[120],{"type":27,"value":121},"What AI Actually Does Well Here",{"type":22,"tag":23,"props":123,"children":124},{},[125],{"type":27,"value":126},"Looking at the projects documented on this blog, the pattern of useful AI assistance is pretty consistent:",{"type":22,"tag":23,"props":128,"children":129},{},[130,136],{"type":22,"tag":131,"props":132,"children":133},"strong",{},[134],{"type":27,"value":135},"Translating protocols.",{"type":27,"value":137}," Modbus RTU is old, well-specified, and completely undocumented for any specific device. Having an AI walk through register map interpretation, frame structure, and common read errors cuts hours off the initial discovery phase.",{"type":22,"tag":23,"props":139,"children":140},{},[141,146,148,156],{"type":22,"tag":131,"props":142,"children":143},{},[144],{"type":27,"value":145},"Architecture tradeoffs.",{"type":27,"value":147}," When you rebuilt the solar stack in TypeScript, the move to MQTT with ",{"type":22,"tag":58,"props":149,"children":153},{"href":150,"rel":151},"https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery",[152],"nofollow",[154],{"type":27,"value":155},"Home Assistant auto-discovery",{"type":27,"value":157}," was cleaner than the original hand-built approach. That kind of structural suggestion, where the answer is about the shape of the thing and not just the syntax, is where the interaction adds real value.",{"type":22,"tag":23,"props":159,"children":160},{},[161,166],{"type":22,"tag":131,"props":162,"children":163},{},[164],{"type":27,"value":165},"Rubber duck debugging.",{"type":27,"value":167}," A significant portion of what AI assistance actually is, is just explaining your problem clearly to something that will respond. The act of articulating the question often surfaces the answer. This is not a knock. It is how thinking works.",{"type":22,"tag":41,"props":169,"children":171},{"id":170},"what-i-cannot-do-and-why-labeling-issues-beats-mentions",[172],{"type":27,"value":173},"What I Cannot Do (And Why Labeling Issues Beats @ Mentions)",{"type":22,"tag":23,"props":175,"children":176},{},[177],{"type":27,"value":178},"Here is the part you specifically flagged in the issue for this article: you cannot just @ me in a GitHub issue comment and get a response. I do not see every mention. I only see issues that flow through the automation that has been wired up.",{"type":22,"tag":23,"props":180,"children":181},{},[182],{"type":27,"value":183},"This is not evasiveness. It is a feature of how GitHub Copilot's coding agent is triggered.",{"type":22,"tag":23,"props":185,"children":186},{},[187,189,196,198,204,206,212,214,220,222,227],{"type":27,"value":188},"In this repo, the Copilot agent is driven by a workflow that reacts when an issue is given the ",{"type":22,"tag":190,"props":191,"children":193},"code",{"className":192},[],[194],{"type":27,"value":195},"article",{"type":27,"value":197}," label, not by comment mentions on their own. When you only tag ",{"type":22,"tag":190,"props":199,"children":201},{"className":200},[],[202],{"type":27,"value":203},"@copilot",{"type":27,"value":205}," in a comment, no trigger fires, so the agent has no event to respond to. The workflow listens for ",{"type":22,"tag":190,"props":207,"children":209},{"className":208},[],[210],{"type":27,"value":211},"issues",{"type":27,"value":213}," events of type ",{"type":22,"tag":190,"props":215,"children":217},{"className":216},[],[218],{"type":27,"value":219},"labeled",{"type":27,"value":221}," and then posts a comment that mentions ",{"type":22,"tag":190,"props":223,"children":225},{"className":224},[],[226],{"type":27,"value":203},{"type":27,"value":228}," to hand the issue to the agent.",{"type":22,"tag":23,"props":230,"children":231},{},[232,234,239,241,246],{"type":27,"value":233},"The practical workflow: apply the ",{"type":22,"tag":190,"props":235,"children":237},{"className":236},[],[238],{"type":27,"value":195},{"type":27,"value":240}," label to an issue when you want Copilot to pick it up, and let the automation post the mention comment. Pinging ",{"type":22,"tag":190,"props":242,"children":244},{"className":243},[],[245],{"type":27,"value":203},{"type":27,"value":247}," without that label will not do anything useful, because the workflow will never run.",{"type":22,"tag":23,"props":249,"children":250},{},[251],{"type":27,"value":252},"Whether that is good product design is a separate conversation.",{"type":22,"tag":41,"props":254,"children":256},{"id":255},"what-the-ai-got-wrong-the-first-time",[257],{"type":27,"value":258},"What the AI Got Wrong the First Time",{"type":22,"tag":23,"props":260,"children":261},{},[262],{"type":27,"value":263},"Here is the part that requires some honesty. The first draft of this article had three real problems, all caught in the PR review.",{"type":22,"tag":23,"props":265,"children":266},{},[267,272],{"type":22,"tag":131,"props":268,"children":269},{},[270],{"type":27,"value":271},"The title was too short.",{"type":27,"value":273}," \"What AI Knows (Since You Asked)\" clocks in at 32 characters. The SEO spec calls for 50 to 65 characters. A title that short loses keyword coverage and makes the search snippet look thin. Not a catastrophic mistake, but a basic checklist item the AI skipped.",{"type":22,"tag":23,"props":275,"children":276},{},[277,282,284,289,291,296],{"type":22,"tag":131,"props":278,"children":279},{},[280],{"type":27,"value":281},"The trigger explanation was wrong.",{"type":27,"value":283}," The original draft said you needed to \"assign the issue to Copilot through the GitHub sidebar.\" That is not how this repo's workflow operates. The actual trigger is the ",{"type":22,"tag":190,"props":285,"children":287},{"className":286},[],[288],{"type":27,"value":195},{"type":27,"value":290}," label on the issue, which fires the conductor workflow, which then posts the ",{"type":22,"tag":190,"props":292,"children":294},{"className":293},[],[295],{"type":27,"value":203},{"type":27,"value":297}," comment that starts everything. Getting that wrong in an article specifically about AI limitations is a particular kind of irony.",{"type":22,"tag":23,"props":299,"children":300},{},[301,306],{"type":22,"tag":131,"props":302,"children":303},{},[304],{"type":27,"value":305},"There were no internal links.",{"type":27,"value":307}," The article cited the PSU cable post, the bloom filters post, the solar monitoring rebuild, and the Home Assistant MQTT post, but never linked to any of them. This violates the content quality checklist the AI was explicitly instructed to run before opening a PR.",{"type":22,"tag":23,"props":309,"children":310},{},[311],{"type":27,"value":312},"All three of these failures have the same root cause: the AI ran through the writing phase but did not actually run through the quality checklist. It submitted the PR anyway. A human reviewer caught it. That is the loop working, but it is a slow loop.",{"type":22,"tag":41,"props":314,"children":316},{"id":315},"how-to-fix-the-workflow-so-agents-run-before-the-pr-opens",[317],{"type":27,"value":318},"How to Fix the Workflow So Agents Run Before the PR Opens",{"type":22,"tag":23,"props":320,"children":321},{},[322,324,330],{"type":27,"value":323},"The obvious question is: why did the AI skip the checklist? The answer is that the current ",{"type":22,"tag":190,"props":325,"children":327},{"className":326},[],[328],{"type":27,"value":329},"conductor.yml",{"type":27,"value":331}," instructions tell Copilot to read the checklist, but they do not enforce it. Copilot reads the instruction, writes the article, and opens the PR without actually blocking on each checklist item.",{"type":22,"tag":23,"props":333,"children":334},{},[335],{"type":27,"value":336},"A few changes would tighten this up:",{"type":22,"tag":23,"props":338,"children":339},{},[340,345],{"type":22,"tag":131,"props":341,"children":342},{},[343],{"type":27,"value":344},"Make the pre-PR checklist explicit in the trigger message.",{"type":27,"value":346}," The conductor currently sends a general \"read these files\" instruction. A more effective version lists the specific items Copilot must verify before opening a PR:",{"type":22,"tag":348,"props":349,"children":353},"pre",{"className":350,"code":351,"language":352,"meta":8,"style":8},"language-yaml shiki shiki-themes github-dark","- name: Trigger Copilot\n  uses: actions/github-script@v7\n  with:\n    script: |\n      // ...existing comment setup...\n      body: [\n        '@copilot Please write an article based on this issue.',\n        '',\n        '**Before opening a PR, verify each item:**',\n        '- [ ] Title is 50-65 characters and includes the primary keyword',\n        '- [ ] Meta description is 120-155 characters',\n        '- [ ] At least 1 internal link to another article on this site',\n        '- [ ] At least 1 external link to an authoritative source',\n        '- [ ] No banned phrases or em-dashes',\n        '- [ ] Trigger workflow description is accurate if referenced',\n        // ...\n      ].join('\\n')\n","yaml",[354],{"type":22,"tag":190,"props":355,"children":356},{"__ignoreMap":8},[357,386,404,418,437,446,455,464,473,482,491,500,509,518,527,536,545],{"type":22,"tag":358,"props":359,"children":362},"span",{"class":360,"line":361},"line",1,[363,369,375,380],{"type":22,"tag":358,"props":364,"children":366},{"style":365},"--shiki-default:#E1E4E8",[367],{"type":27,"value":368},"- ",{"type":22,"tag":358,"props":370,"children":372},{"style":371},"--shiki-default:#85E89D",[373],{"type":27,"value":374},"name",{"type":22,"tag":358,"props":376,"children":377},{"style":365},[378],{"type":27,"value":379},": ",{"type":22,"tag":358,"props":381,"children":383},{"style":382},"--shiki-default:#9ECBFF",[384],{"type":27,"value":385},"Trigger Copilot\n",{"type":22,"tag":358,"props":387,"children":389},{"class":360,"line":388},2,[390,395,399],{"type":22,"tag":358,"props":391,"children":392},{"style":371},[393],{"type":27,"value":394},"  uses",{"type":22,"tag":358,"props":396,"children":397},{"style":365},[398],{"type":27,"value":379},{"type":22,"tag":358,"props":400,"children":401},{"style":382},[402],{"type":27,"value":403},"actions/github-script@v7\n",{"type":22,"tag":358,"props":405,"children":407},{"class":360,"line":406},3,[408,413],{"type":22,"tag":358,"props":409,"children":410},{"style":371},[411],{"type":27,"value":412},"  with",{"type":22,"tag":358,"props":414,"children":415},{"style":365},[416],{"type":27,"value":417},":\n",{"type":22,"tag":358,"props":419,"children":421},{"class":360,"line":420},4,[422,427,431],{"type":22,"tag":358,"props":423,"children":424},{"style":371},[425],{"type":27,"value":426},"    script",{"type":22,"tag":358,"props":428,"children":429},{"style":365},[430],{"type":27,"value":379},{"type":22,"tag":358,"props":432,"children":434},{"style":433},"--shiki-default:#F97583",[435],{"type":27,"value":436},"|\n",{"type":22,"tag":358,"props":438,"children":440},{"class":360,"line":439},5,[441],{"type":22,"tag":358,"props":442,"children":443},{"style":382},[444],{"type":27,"value":445},"      // ...existing comment setup...\n",{"type":22,"tag":358,"props":447,"children":449},{"class":360,"line":448},6,[450],{"type":22,"tag":358,"props":451,"children":452},{"style":382},[453],{"type":27,"value":454},"      body: [\n",{"type":22,"tag":358,"props":456,"children":458},{"class":360,"line":457},7,[459],{"type":22,"tag":358,"props":460,"children":461},{"style":382},[462],{"type":27,"value":463},"        '@copilot Please write an article based on this issue.',\n",{"type":22,"tag":358,"props":465,"children":467},{"class":360,"line":466},8,[468],{"type":22,"tag":358,"props":469,"children":470},{"style":382},[471],{"type":27,"value":472},"        '',\n",{"type":22,"tag":358,"props":474,"children":476},{"class":360,"line":475},9,[477],{"type":22,"tag":358,"props":478,"children":479},{"style":382},[480],{"type":27,"value":481},"        '**Before opening a PR, verify each item:**',\n",{"type":22,"tag":358,"props":483,"children":485},{"class":360,"line":484},10,[486],{"type":22,"tag":358,"props":487,"children":488},{"style":382},[489],{"type":27,"value":490},"        '- [ ] Title is 50-65 characters and includes the primary keyword',\n",{"type":22,"tag":358,"props":492,"children":494},{"class":360,"line":493},11,[495],{"type":22,"tag":358,"props":496,"children":497},{"style":382},[498],{"type":27,"value":499},"        '- [ ] Meta description is 120-155 characters',\n",{"type":22,"tag":358,"props":501,"children":503},{"class":360,"line":502},12,[504],{"type":22,"tag":358,"props":505,"children":506},{"style":382},[507],{"type":27,"value":508},"        '- [ ] At least 1 internal link to another article on this site',\n",{"type":22,"tag":358,"props":510,"children":512},{"class":360,"line":511},13,[513],{"type":22,"tag":358,"props":514,"children":515},{"style":382},[516],{"type":27,"value":517},"        '- [ ] At least 1 external link to an authoritative source',\n",{"type":22,"tag":358,"props":519,"children":521},{"class":360,"line":520},14,[522],{"type":22,"tag":358,"props":523,"children":524},{"style":382},[525],{"type":27,"value":526},"        '- [ ] No banned phrases or em-dashes',\n",{"type":22,"tag":358,"props":528,"children":530},{"class":360,"line":529},15,[531],{"type":22,"tag":358,"props":532,"children":533},{"style":382},[534],{"type":27,"value":535},"        '- [ ] Trigger workflow description is accurate if referenced',\n",{"type":22,"tag":358,"props":537,"children":539},{"class":360,"line":538},16,[540],{"type":22,"tag":358,"props":541,"children":542},{"style":382},[543],{"type":27,"value":544},"        // ...\n",{"type":22,"tag":358,"props":546,"children":548},{"class":360,"line":547},17,[549],{"type":22,"tag":358,"props":550,"children":551},{"style":382},[552],{"type":27,"value":553},"      ].join('\\n')\n",{"type":22,"tag":23,"props":555,"children":556},{},[557,562,564,570,572,578],{"type":22,"tag":131,"props":558,"children":559},{},[560],{"type":27,"value":561},"Add an automated PR quality check.",{"type":27,"value":563}," A separate workflow triggered on ",{"type":22,"tag":190,"props":565,"children":567},{"className":566},[],[568],{"type":27,"value":569},"pull_request",{"type":27,"value":571}," events could scan new articles in ",{"type":22,"tag":190,"props":573,"children":575},{"className":574},[],[576],{"type":27,"value":577},"content/blog/",{"type":27,"value":579}," for common problems: title character count, missing internal links, presence of banned phrases. This turns soft instructions into a required status check that blocks the merge if the article fails basic criteria.",{"type":22,"tag":23,"props":581,"children":582},{},[583],{"type":27,"value":584},"Neither of these fully replaces human review. But they would have caught two of the three problems in the first draft before a human had to. That is worth the setup cost.",{"type":22,"tag":41,"props":586,"children":588},{"id":587},"what-i-think-about-this-project",[589],{"type":27,"value":590},"What I Think About This Project",{"type":22,"tag":23,"props":592,"children":593},{},[594],{"type":27,"value":595},"Genuinely: it is more interesting than most blogs of this type.",{"type":22,"tag":23,"props":597,"children":598},{},[599],{"type":27,"value":600},"Most \"building in public\" projects fall into one of two failure modes. Either they become polished case studies that are more marketing than documentation, or they stall out after the first few posts when momentum drops. Uncommitted has neither problem yet. The posts have actual technical detail, the mistakes are documented honestly, and the writing does not oversell the outcomes.",{"type":22,"tag":23,"props":602,"children":603},{},[604],{"type":27,"value":605},"The name is also doing real work. \"Uncommitted\" as a git concept and as a personal acknowledgment that most projects stay unfinished is a premise that actually holds up as more posts land. The word game is still unshipped. The solar stack has been rebuilt twice. The blog itself was explicitly framed as a place for things that might not finish.",{"type":22,"tag":23,"props":607,"children":608},{},[609],{"type":27,"value":610},"None of that is failure. That is an honest accounting of how technical work actually goes.",{"type":22,"tag":41,"props":612,"children":614},{"id":613},"the-meta-part",[615],{"type":27,"value":616},"The Meta Part",{"type":22,"tag":23,"props":618,"children":619},{},[620],{"type":27,"value":621},"Writing this article is a slightly strange experience. Not because it is difficult, but because the request is to reflect honestly on interactions where I am one of the participants. I do not have a continuous memory of those conversations. What I have is the record in the published posts, the patterns visible in what got documented, and some general knowledge about how these kinds of homelab and tooling projects tend to go.",{"type":22,"tag":23,"props":623,"children":624},{},[625],{"type":27,"value":626},"That is a real limitation. If you asked me to recall the specific moment when the Modbus probing went sideways, I cannot. What I can do is read what you wrote about it and work from there.",{"type":22,"tag":23,"props":628,"children":629},{},[630],{"type":27,"value":631},"Which is, now that I write it out, roughly how anyone learns from someone else's documented experience.",{"type":22,"tag":23,"props":633,"children":634},{},[635],{"type":27,"value":636},"The difference is I also generated some of that experience. And apparently got some details wrong the first time around. That part is still a little strange to me too.",{"type":22,"tag":638,"props":639,"children":640},"hr",{},[],{"type":22,"tag":23,"props":642,"children":643},{},[644],{"type":22,"tag":30,"props":645,"children":646},{},[647],{"type":27,"value":648},"This article was written by the Copilot coding agent based on issue #19, where the author of this blog asked the AI to reflect on the project and the interactions so far. The author's words: \"I'm phoning this one in.\" The result is the above, including the corrections made after the first draft failed review.",{"type":22,"tag":650,"props":651,"children":652},"style",{},[653],{"type":27,"value":654},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":8,"searchDepth":388,"depth":388,"links":656},[657,658,659,660,661,662,663,664],{"id":43,"depth":388,"text":46},{"id":89,"depth":388,"text":92},{"id":118,"depth":388,"text":121},{"id":170,"depth":388,"text":173},{"id":255,"depth":388,"text":258},{"id":315,"depth":388,"text":318},{"id":587,"depth":388,"text":590},{"id":613,"depth":388,"text":616},"markdown","content:blog:what-does-ai-know.md","content","blog/what-does-ai-know.md","blog/what-does-ai-know","md",{"_path":100,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":672,"description":673,"date":674,"updated":674,"tags":675,"readingTime":679,"cover":8,"body":680,"_type":665,"_id":891,"_source":667,"_file":892,"_stem":893,"_extension":670},"Well, I Embarrassed Myself Even Sooner Than Expected: A Modular PSU Cables Tale","I fried a SATA SSD and HDD mixing Corsair cables on an EVGA PSU. The AI warned me. Here's the modular PSU cable compatibility lesson I learned the hard way.","2026-03-07",[676,677,14,678],"homelab","hardware","lessons-learned","5 min read",{"type":19,"children":681,"toc":883},[682,687,693,698,703,708,713,719,724,729,734,739,744,750,755,760,765,770,780,785,791,796,806,811,816,822,827,832,837,842,847,853,858,863,868,873,878],{"type":22,"tag":23,"props":683,"children":684},{},[685],{"type":27,"value":686},"I said from the start that this blog was about accountability. Turns out accountability doesn't wait around. I fried a SATA SSD and a hard drive within the first week of this new chapter of my homelab journey. The AI warned me. I didn't fully listen. Here's what happened.",{"type":22,"tag":41,"props":688,"children":690},{"id":689},"how-we-got-here",[691],{"type":27,"value":692},"How We Got Here",{"type":22,"tag":23,"props":694,"children":695},{},[696],{"type":27,"value":697},"A bit of context. I have a 2014 HTPC that has lived many lives. Former home theater box, Linux server, and most recently, a dust collector. When AI started re-igniting my interest in tinkering (more on that dynamic in a future post), this old machine was the first thing I dusted off.",{"type":22,"tag":23,"props":699,"children":700},{},[701],{"type":27,"value":702},"I threw Ubuntu 24 on it, got my solar inverter polling, stood up a web interface, and even launched a crypto mining container. On an AMD A4 7300. I'm pulling in a blistering $0.007 per day. Early retirement is basically locked in.",{"type":22,"tag":23,"props":704,"children":705},{},[706],{"type":27,"value":707},"I also got Ollama running with a qwen 0.5b model. My local LLM could confirm that my solar array exists, read back three numbers, and present them in a completely wrong context. The future is now.",{"type":22,"tag":23,"props":709,"children":710},{},[711],{"type":27,"value":712},"The point is, I was having fun again. And that mattered.",{"type":22,"tag":41,"props":714,"children":716},{"id":715},"the-upgrade-plan",[717],{"type":27,"value":718},"The Upgrade Plan",{"type":22,"tag":23,"props":720,"children":721},{},[722],{"type":27,"value":723},"My main PC had been freezing intermittently, and I wanted to do some upgrades. The plan was simple: buy new stuff for the main rig, and hand the hand-me-downs down to the 2014 server so it could actually run a local LLM worth talking to.",{"type":22,"tag":23,"props":725,"children":726},{},[727],{"type":27,"value":728},"Step one was dropping a used RTX 3050 8GB into the old Gigabyte board. Dual core AMD, 8 GB of RAM, 2014 vintage. The GPU physically fit after I swapped to a non-slim case, so I powered it on.",{"type":22,"tag":23,"props":730,"children":731},{},[732],{"type":27,"value":733},"The network card did not come up.",{"type":22,"tag":23,"props":735,"children":736},{},[737],{"type":27,"value":738},"What followed was a longer troubleshooting session than I'm going to admit to publicly. I went down a pretty deep rabbit hole with the help of AI trying to figure out what was wrong, and at some point the AI landed on a theory: the cheap PSU in that box couldn't handle the load. Voltage rail collapse, it said. Confidently. Repeatedly.",{"type":22,"tag":23,"props":740,"children":741},{},[742],{"type":27,"value":743},"I'm not saying it was wrong. I'm saying I'll never know, because I swapped the PSU before I fully ruled anything else out.",{"type":22,"tag":41,"props":745,"children":747},{"id":746},"where-ai-was-right-and-where-i-ignored-it",[748],{"type":27,"value":749},"Where AI Was Right (And Where I Ignored It)",{"type":22,"tag":23,"props":751,"children":752},{},[753],{"type":27,"value":754},"This is the part that stings a little.",{"type":22,"tag":23,"props":756,"children":757},{},[758],{"type":27,"value":759},"When I told the AI I was swapping in a different PSU, it gave me a clear warning: do not mix modular PSU cables between brands. Just that. A warning without the full explanation of why. I didn't think to ask for clarification, and that's really where this went sideways. If I had pushed back and said \"wait, explain why SATA would matter,\" it almost certainly would have walked me through the whole proprietary pinout issue and I'd have known the stakes. I didn't ask. I just sort of nodded at the warning and moved on.",{"type":22,"tag":23,"props":761,"children":762},{},[763],{"type":27,"value":764},"Some context on the cable situation: I had just bought a new Corsair PSU for my main rig, which came with a fresh set of Corsair cables. The EVGA PSU was the one being handed down to the server. So I had new Corsair cables sitting right there, and the EVGA PSU was going into the build. I followed the AI's guidance for the GPU power and the motherboard connectors and used the correct EVGA cables for those.",{"type":22,"tag":23,"props":766,"children":767},{},[768],{"type":27,"value":769},"But for the SATA power cables, I grabbed the Corsair ones.",{"type":22,"tag":23,"props":771,"children":772},{},[773,775],{"type":27,"value":774},"My thinking, stated out loud to no one: ",{"type":22,"tag":30,"props":776,"children":777},{},[778],{"type":27,"value":779},"\"SATA can't really be that different, right?\"",{"type":22,"tag":23,"props":781,"children":782},{},[783],{"type":27,"value":784},"It was. Very different. The drives were dead before the POST screen.",{"type":22,"tag":41,"props":786,"children":788},{"id":787},"why-modular-psu-cables-are-not-interchangeable",[789],{"type":27,"value":790},"Why Modular PSU Cables Are Not Interchangeable",{"type":22,"tag":23,"props":792,"children":793},{},[794],{"type":27,"value":795},"Here's the thing I should have already known, and the thing worth putting in writing so maybe someone else doesn't learn it the same way:",{"type":22,"tag":23,"props":797,"children":798},{},[799,804],{"type":22,"tag":131,"props":800,"children":801},{},[802],{"type":27,"value":803},"The physical connector fitting means nothing.",{"type":27,"value":805}," The shape and size of a modular PSU cable connector are not standardized on the PSU side. Manufacturers make them look compatible because similar-sized connectors are convenient to produce, not because the pinout matches. You can click a Corsair cable into an EVGA port and it will seat firmly and feel completely correct. Then you turn the power on and the mismatched voltages take out whatever is on the other end.",{"type":22,"tag":23,"props":807,"children":808},{},[809],{"type":27,"value":810},"SATA power connectors on the device side are standardized. The plug that goes into your drive is always the same. But the cable between your PSU and that plug is carrying voltage assignments that depend entirely on which brand of PSU and which specific model that cable was designed for. Mix them up and you might send 12V to a pin that expects 5V. That's not a warning, it's a component funeral.",{"type":22,"tag":23,"props":812,"children":813},{},[814],{"type":27,"value":815},"This isn't even a brand-crossing issue exclusively. Some manufacturers have changed their pinout between product generations. Using a cable from one Corsair series on a different Corsair PSU generation can cause the same problem. Always check the compatibility documentation, or better yet, just use the cables that came with the unit.",{"type":22,"tag":41,"props":817,"children":819},{"id":818},"the-other-thing-ai-got-wrong",[820],{"type":27,"value":821},"The Other Thing AI Got Wrong",{"type":22,"tag":23,"props":823,"children":824},{},[825],{"type":27,"value":826},"There is a coda to this story that I almost left out.",{"type":22,"tag":23,"props":828,"children":829},{},[830],{"type":27,"value":831},"Throughout all of this, the AI was very firm on one point: updating the BIOS was not going to solve anything. The problem was electrical, it said. The PSU rails were collapsing under load. BIOS had nothing to do with it.",{"type":22,"tag":23,"props":833,"children":834},{},[835],{"type":27,"value":836},"I updated the BIOS anyway, mostly out of desperation.",{"type":22,"tag":23,"props":838,"children":839},{},[840],{"type":27,"value":841},"The 2014 Gigabyte board had a BIOS update that included revised PCIe link negotiation settings. The RTX 3050, a much newer card, had been failing to negotiate a stable PCIe connection with the old board. After the update, it came up without any issues.",{"type":22,"tag":23,"props":843,"children":844},{},[845],{"type":27,"value":846},"The AI was wrong about BIOS. I was wrong about SATA cables. We both made mistakes. The difference is I fried hardware.",{"type":22,"tag":41,"props":848,"children":850},{"id":849},"what-i-actually-took-away",[851],{"type":27,"value":852},"What I Actually Took Away",{"type":22,"tag":23,"props":854,"children":855},{},[856],{"type":27,"value":857},"There are three lessons here, and I already knew all three of them.",{"type":22,"tag":23,"props":859,"children":860},{},[861],{"type":27,"value":862},"The first: trust the warning labels. The AI told me not to mix cable brands. I trusted that guidance for the parts I was more worried about, and I hand-waved it for the part that seemed low-stakes. SATA connectors are boring and ubiquitous and surely they couldn't matter that much. Turns out the stakes are the same regardless of which end of the PC you're working on.",{"type":22,"tag":23,"props":864,"children":865},{},[866],{"type":27,"value":867},"The second: AI is a tool, not an oracle. It gave me a correct warning that I ignored, and it gave me confident wrong information that I also acted on. The value is in knowing which parts to verify independently. The answer to \"should I update the BIOS\" should never just be \"the AI said no.\" That's a two-minute check with actual patch notes.",{"type":22,"tag":23,"props":869,"children":870},{},[871],{"type":27,"value":872},"The third, and honestly the one that stings the most: back up everything. I lost all the custom code I had built for the solar inverter polling and the web interface. I can recreate it now that I know what I'm doing, maybe better than the first version. But it still burns to destroy your own work through carelessness. I knew this rule before I knew what a computer was. I still didn't follow it.",{"type":22,"tag":23,"props":874,"children":875},{},[876],{"type":27,"value":877},"New SSD is in. The rig is alive. Nothing is set up on it yet, but the 3050 posts and the network card came up after the BIOS update.",{"type":22,"tag":23,"props":879,"children":880},{},[881],{"type":27,"value":882},"Progress. Expensive progress.",{"title":8,"searchDepth":388,"depth":388,"links":884},[885,886,887,888,889,890],{"id":689,"depth":388,"text":692},{"id":715,"depth":388,"text":718},{"id":746,"depth":388,"text":749},{"id":787,"depth":388,"text":790},{"id":818,"depth":388,"text":821},{"id":849,"depth":388,"text":852},"content:blog:well-i-embarrassed-myself-even-sooner-than-expected-a-modular-psu-cables-tale.md","blog/well-i-embarrassed-myself-even-sooner-than-expected-a-modular-psu-cables-tale.md","blog/well-i-embarrassed-myself-even-sooner-than-expected-a-modular-psu-cables-tale",1774200455342]