[{"data":1,"prerenderedAt":314},["ShallowReactive",2],{"home":3},{"featured":4,"recent":144,"projects":190,"now":264,"hasArticles":136},{"id":5,"title":6,"body":7,"cover":130,"date":131,"description":132,"draft":133,"extension":134,"meta":135,"navigation":136,"path":137,"pinned":136,"seo":138,"stem":139,"tags":140,"__hash__":143},"articles\u002Farticles\u002Fprep-first-agents.md","The prep-first approach to agentic development",{"type":8,"value":9,"toc":124},"minimark",[10,15,24,28,31,113,117,120],[11,12,14],"h2",{"id":13},"the-shortcut-tax","The shortcut tax",[16,17,18,19,23],"p",{},"Agents are fast. That is exactly why teams pay a ",[20,21,22],"strong",{},"shortcut tax",": mock data that never gets replaced, silent failures, tests that assert the wrong thing.",[11,25,27],{"id":26},"prep-as-a-system","Prep as a system",[16,29,30],{},"Prep-first work means: clarify the goal, name constraints, gather references, then prompt. The model does synthesis — you own the specification.",[32,33,38],"pre",{"className":34,"code":35,"language":36,"meta":37,"style":37},"language-typescript shiki shiki-themes github-dark github-dark","type Task = { goal: string; constraints: string[]; done: (out: unknown) => boolean }\n","typescript","",[39,40,41],"code",{"__ignoreMap":37},[42,43,46,50,54,57,61,65,68,72,75,78,80,82,85,88,90,93,96,98,101,104,107,110],"span",{"class":44,"line":45},"line",1,[42,47,49],{"class":48},"sOPea","type",[42,51,53],{"class":52},"sFR8T"," Task",[42,55,56],{"class":48}," =",[42,58,60],{"class":59},"suv1-"," { ",[42,62,64],{"class":63},"s-3mD","goal",[42,66,67],{"class":48},":",[42,69,71],{"class":70},"s8ozJ"," string",[42,73,74],{"class":59},"; ",[42,76,77],{"class":63},"constraints",[42,79,67],{"class":48},[42,81,71],{"class":70},[42,83,84],{"class":59},"[]; ",[42,86,87],{"class":52},"done",[42,89,67],{"class":48},[42,91,92],{"class":59}," (",[42,94,95],{"class":63},"out",[42,97,67],{"class":48},[42,99,100],{"class":70}," unknown",[42,102,103],{"class":59},") ",[42,105,106],{"class":48},"=>",[42,108,109],{"class":70}," boolean",[42,111,112],{"class":59}," }\n",[11,114,116],{"id":115},"what-changes-on-teams","What changes on teams",[16,118,119],{},"You review specs, not vibes. You measure whether the output is testable, observable, and aligned with production rules — the same bar you would use without AI.",[121,122,123],"style",{},"html pre.shiki code .sOPea, html code.shiki .sOPea{--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sFR8T, html code.shiki .sFR8T{--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suv1-, html code.shiki .suv1-{--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .s-3mD, html code.shiki .s-3mD{--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .s8ozJ, html code.shiki .s8ozJ{--shiki-default:#79B8FF;--shiki-dark:#79B8FF}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":37,"searchDepth":125,"depth":125,"links":126},2,[127,128,129],{"id":13,"depth":125,"text":14},{"id":26,"depth":125,"text":27},{"id":115,"depth":125,"text":116},null,"2026-03-10","Why research-before-prompting beats “just ask the model” when you care about shipping quality.",false,"md",{},true,"\u002Farticles\u002Fprep-first-agents",{"title":6,"description":132},"articles\u002Fprep-first-agents",[141,142],"agentic-ai","engineering","CYeGWmCH8B4rlpp7AuadJt1VTcqlSivFhpOflP4xWXs",[145],{"id":146,"title":147,"body":148,"cover":130,"date":180,"description":181,"draft":133,"extension":134,"meta":182,"navigation":136,"path":183,"pinned":133,"seo":184,"stem":185,"tags":186,"__hash__":189,"readingMins":45},"articles\u002Farticles\u002Fbbc-micro-2026.md","Why I still care about the BBC Micro in 2026",{"type":8,"value":149,"toc":175},[150,154,161,165,168,172],[11,151,153],{"id":152},"memory-maps-and-patience","Memory maps and patience",[16,155,156,157,160],{},"A small machine forces you to understand what lives where. That sounds quaint until you debug a production incident where ",[20,158,159],{},"implicit assumptions"," were the bug.",[11,162,164],{"id":163},"demo-scene-as-engineering-culture","Demo scene as engineering culture",[16,166,167],{},"Sceners optimize for effect under limits. Product teams optimize for outcomes under constraints. The mindset rhymes.",[11,169,171],{"id":170},"back-to-bytefern","Back to ByteFern",[16,173,174],{},"This site is partly a love letter to that culture: editorial rigour, a lab that will feel like a demo, and tools that respect the craft.",{"title":37,"searchDepth":125,"depth":125,"links":176},[177,178,179],{"id":152,"depth":125,"text":153},{"id":163,"depth":125,"text":164},{"id":170,"depth":125,"text":171},"2026-02-20","Constraints, BASIC, and what retro machines teach about craft when everything else moves at hype speed.",{},"\u002Farticles\u002Fbbc-micro-2026",{"title":147,"description":181},"articles\u002Fbbc-micro-2026",[187,188],"retro","builds","tjv_oYuPokK8hwKlEI1FRJ00A_pr7VJ8prK4dZdco_k",[191,225],{"id":192,"title":193,"body":194,"cover":130,"description":214,"extension":134,"meta":215,"navigation":136,"order":216,"path":217,"seo":218,"stack":219,"status":221,"stem":222,"tags":223,"__hash__":224},"projects\u002Fprojects\u002Foctomantis.md","Octomantis",{"type":8,"value":195,"toc":210},[196,200,203,207],[11,197,199],{"id":198},"what-it-is","What it is",[16,201,202],{},"A puzzle game about movement, risk, and tight feedback loops — built in the open as ByteFern’s first “cartridge” for the Lab.",[11,204,206],{"id":205},"status","Status",[16,208,209],{},"Playable prototype in motion; level authoring next.",{"title":37,"searchDepth":125,"depth":125,"links":211},[212,213],{"id":198,"depth":125,"text":199},{"id":205,"depth":125,"text":206},"Repton-inspired grid puzzle — bioluminescent deep-sea vibe, TypeScript + Canvas.",{},10,"\u002Fprojects\u002Foctomantis",{"title":193,"description":214},[36,220],"canvas","in-progress","projects\u002Foctomantis",[187,188],"pMrlKEY0FsUCfdgqzYLo0AKTH0VblELKjC0d293L7Tc",{"id":226,"title":227,"body":228,"cover":130,"description":252,"extension":134,"meta":253,"navigation":136,"order":254,"path":255,"seo":256,"stack":257,"status":259,"stem":260,"tags":261,"__hash__":263},"projects\u002Fprojects\u002Fcolburn-mcp.md","Colburn MCP",{"type":8,"value":229,"toc":248},[230,234,237,241],[11,231,233],{"id":232},"problem","Problem",[16,235,236],{},"Fast agents amplify bad habits unless your toolchain encodes what “good” means.",[11,238,240],{"id":239},"approach","Approach",[16,242,243,244,247],{},"Codify checks as MCP tools: lint gates, test expectations, forbidden patterns — so “ship” still means ",[20,245,246],{},"verified",".",{"title":37,"searchDepth":125,"depth":125,"links":249},[250,251],{"id":232,"depth":125,"text":233},{"id":239,"depth":125,"text":240},"MCP server that enforces quality standards for AI-assisted development — anti-shortcut rules and review gates.",{},20,"\u002Fprojects\u002Fcolburn-mcp",{"title":227,"description":252},[36,258],"mcp","active","projects\u002Fcolburn-mcp",[141,262],"tools","qVm1doklePyWBuEd5DFyAP-Mv1DCzU3sv-T1yqmWdQI",{"id":265,"title":266,"body":267,"description":307,"extension":134,"meta":308,"navigation":136,"path":309,"seo":310,"stem":311,"updated":312,"__hash__":313},"now\u002Fnow.md","Now",{"type":8,"value":268,"toc":302},[269,273,276,280,295,299],[11,270,272],{"id":271},"work","Work",[16,274,275],{},"Shipping product as a tech lead; ByteFern and related experiments on the side.",[11,277,279],{"id":278},"side-projects","Side projects",[281,282,283,290],"ul",{},[284,285,286,289],"li",{},[20,287,288],{},"ByteFern"," — this site, Nuxt Content, demo scene “Lab” coming next.",[284,291,292,294],{},[20,293,193],{}," — Repton-inspired puzzle WIP (TypeScript + Canvas).",[11,296,298],{"id":297},"reading-watching","Reading \u002F watching",[16,300,301],{},"Retro computing write-ups, docs for Nuxt \u002F Vue \u002F agents — whatever feeds the next article.",{"title":37,"searchDepth":125,"depth":125,"links":303},[304,305,306],{"id":271,"depth":125,"text":272},{"id":278,"depth":125,"text":279},{"id":297,"depth":125,"text":298},"Short notes on what I'm focused on — a living changelog.",{},"\u002Fnow",{"title":266,"description":307},"now","2026-04-03","Onf9Hbg-IX00J18zmX1k_27k8Wb6CHxPIr7GE6njWWQ",1775422461717]