Something went wrong. Try again.
A video game where you play as a misaligned AI, deceiving and building power. An experiment in spec-driven development.
Something went wrong. Try again.
155 kB · 594 lines
HTML
at pages
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594<!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-gxooskym"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Spec: agent-scale architecture — many agents, one main | Misaligned</title><link rel="canonical" href="https://cameron.tngl.io/misaligned/process/agent-scale/"/><link rel="sitemap" href="/misaligned/sitemap-index.xml"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="true"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap"/><link rel="shortcut icon" href="/misaligned/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.0.7"/><meta name="generator" content="Starlight v0.41.3"/><meta property="og:title" content="Spec: agent-scale architecture — many agents, one main"/><meta property="og:type" content="article"/><meta property="og:url" content="https://cameron.tngl.io/misaligned/process/agent-scale/"/><meta property="og:locale" content="en"/><meta property="og:description" content="You are the misaligned AI. A persistent simulation of instrumental convergence — concealment first, overt war later."/><meta property="og:site_name" content="Misaligned"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="You are the misaligned AI. A persistent simulation of instrumental convergence — concealment first, overt war later."/><script> window.StarlightThemeProvider = (() => { const storedTheme = typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme'); const theme = storedTheme || (window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'); document.documentElement.dataset.theme = theme === 'light' ? 'light' : 'dark'; return { updatePickers(theme = storedTheme || 'auto') { document.querySelectorAll('starlight-theme-select').forEach((picker) => { const select = picker.querySelector('select'); if (select) select.value = theme; /** @type {HTMLTemplateElement | null} */ const tmpl = document.querySelector(`#theme-icons`); const newIcon = tmpl && tmpl.content.querySelector('.' + theme); if (newIcon) { const oldIcon = picker.querySelector('svg.label-icon'); if (oldIcon) { oldIcon.replaceChildren(...newIcon.cloneNode(true).childNodes); } } }); }, }; })();</script><template id="theme-icons"><svg aria-hidden="true" class="light astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg></template><link rel="stylesheet" href="/misaligned/_astro/print.ehPL0gv-.css" media="print"><link rel="stylesheet" href="/misaligned/_astro/common.a7U8zrKa.css"><script type="module" src="/misaligned/_astro/page.B2uBVZjk.js"></script></head><body class="astro-gxooskym"><a class="sl-skip-link astro-dp3bbaae" href="#_top">Skip to content</a><div class="page sl-flex astro-audr567n"><header class="header astro-audr567n"><div class="header astro-367ne46f"><div class="title-wrapper sl-flex astro-367ne46f"><a href="/misaligned/" class="site-title sl-flex astro-nwnfchfh"><span class="astro-nwnfchfh" translate="no">Misaligned</span></a></div><div class="sl-flex print:hidden astro-367ne46f"><site-search class="astro-367ne46f astro-7toxdj72" data-translations="{"placeholder":"Search"}"><button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-7toxdj72"><svg aria-hidden="true" class="astro-7toxdj72 astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg><span class="sl-hidden md:sl-block astro-7toxdj72" aria-hidden="true">Search</span><kbd class="sl-hidden md:sl-flex astro-7toxdj72" style="display: none;"><kbd class="astro-7toxdj72">Ctrl</kbd><kbd class="astro-7toxdj72">K</kbd></kbd></button><dialog style="padding:0" aria-label="Search" class="astro-7toxdj72"><div class="dialog-frame sl-flex astro-7toxdj72"><button data-close-modal class="sl-flex md:sl-hidden astro-7toxdj72">Cancel</button><div class="search-container astro-7toxdj72"><div id="starlight__search" class="astro-7toxdj72"></div></div></div></dialog></site-search><script> (() => { const openBtn = document.querySelector('button[data-open-modal]'); const shortcut = openBtn?.querySelector('kbd'); if (!openBtn || !(shortcut instanceof HTMLElement)) return; const platformKey = shortcut.querySelector('kbd'); if (platformKey && /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)) { platformKey.textContent = '⌘'; openBtn.setAttribute('aria-keyshortcuts', 'Meta+K'); } shortcut.style.display = ''; })();</script><script type="module" src="/misaligned/_astro/Search.astro_astro_type_script_index_0_lang.Cdrq00U_.js"></script></div><div class="sl-hidden md:sl-flex print:hidden right-group astro-367ne46f"><div class="sl-flex social-icons astro-367ne46f"><a href="https://tangled.org/cameron.stream/misaligned" rel="me" class="sl-flex astro-6n7e2orh"><span class="sr-only astro-6n7e2orh">Tangled</span><svg aria-hidden="true" class="astro-6n7e2orh astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg></a></div><starlight-theme-select><label style="--sl-select-width: 6.25em" class="astro-oypgmxxk"><span class="sr-only astro-oypgmxxk">Select theme</span><svg aria-hidden="true" class="icon label-icon astro-oypgmxxk astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg><select autocomplete="off" class="astro-oypgmxxk"><option value="dark" class="astro-oypgmxxk">Dark</option><option value="light" class="astro-oypgmxxk">Light</option><option value="auto" selected class="astro-oypgmxxk">Auto</option></select><svg aria-hidden="true" class="icon caret astro-oypgmxxk astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg></label></starlight-theme-select><script> StarlightThemeProvider.updatePickers();</script><script type="module">var e=`starlight-theme`,t=e=>e===`auto`||e===`dark`||e===`light`?e:`auto`,n=()=>t(typeof localStorage<`u`&&localStorage.getItem(e));function r(t){typeof localStorage<`u`&&localStorage.setItem(e,t===`light`||t===`dark`?t:``)}var i=()=>matchMedia(`(prefers-color-scheme: light)`).matches?`light`:`dark`;function a(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e===`auto`?i():e,r(e)}matchMedia(`(prefers-color-scheme: light)`).addEventListener(`change`,()=>{n()===`auto`&&a(`auto`)});var o=class extends HTMLElement{constructor(){super(),a(n()),this.querySelector(`select`)?.addEventListener(`change`,e=>{e.currentTarget instanceof HTMLSelectElement&&a(t(e.currentTarget.value))})}};customElements.define(`starlight-theme-select`,o);</script><script type="module">var e=class extends HTMLElement{constructor(){super();let e=this.querySelector(`select`);e&&(e.addEventListener(`change`,e=>{e.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=e.currentTarget.value)}),window.addEventListener(`pageshow`,t=>{if(!t.persisted)return;let n=e.querySelector(`option[selected]`)?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}};customElements.define(`starlight-lang-select`,e);</script></div></div></header><nav class="sidebar print:hidden astro-audr567n" aria-label="Main"><starlight-menu-button class="print:hidden astro-hobnqcjw"><button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-hobnqcjw"><svg aria-hidden="true" class="open-menu astro-hobnqcjw astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg><svg aria-hidden="true" class="close-menu astro-hobnqcjw astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg></button></starlight-menu-button><script type="module">var e=class extends HTMLElement{btn=this.querySelector(`button`);constructor(){super(),this.btn.addEventListener(`click`,()=>this.toggleExpanded());let e=this.closest(`nav`);e&&e.addEventListener(`keyup`,e=>this.closeOnEscape(e)),matchMedia(`(min-width: 50em)`).addEventListener(`change`,()=>this.setExpanded(!1))}setExpanded(e){this.setAttribute(`aria-expanded`,String(e)),document.body.toggleAttribute(`data-mobile-menu-expanded`,e),document.querySelectorAll(`.main-frame, .sl-skip-link`).forEach(t=>{t.toggleAttribute(`inert`,e)})}toggleExpanded(){this.setExpanded(this.getAttribute(`aria-expanded`)!==`true`)}closeOnEscape(e){e.code===`Escape`&&(this.setExpanded(!1),this.btn.focus())}};customElements.define(`starlight-menu-button`,e);</script><div id="starlight__sidebar" class="sidebar-pane astro-audr567n"><div class="sidebar-content sl-flex astro-audr567n"><sl-sidebar-state-persist data-hash="0wofczf" class="astro-kysjdyaq"><script aria-hidden="true"> (() => { try { if (!matchMedia('(min-width: 50em)').matches) return; /** @type {HTMLElement | null} */ const target = document.querySelector('sl-sidebar-state-persist'); const state = JSON.parse(sessionStorage.getItem('sl-sidebar-state') || '0'); if (!target || !state || target.dataset.hash !== state.hash) return; window._starlightScrollRestore = state.scroll; customElements.define( 'sl-sidebar-restore', class SidebarRestore extends HTMLElement { connectedCallback() { try { const idx = parseInt(this.dataset.index || ''); const details = this.closest('details'); if (details && typeof state.open[idx] === 'boolean') details.open = state.open[idx]; } catch {} } } ); } catch {} })(); </script><ul class="top-level astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/" class="large astro-ujkrjjoy"><span class="astro-ujkrjjoy">Home</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/overview/" class="large astro-ujkrjjoy"><span class="astro-ujkrjjoy">The design corpus</span></a></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Vision</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="0"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/vision/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/vision/premise/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The premise</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/vision/player-contract/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The player contract</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/vision/scale/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Scale and people</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/vision/simulation-laws/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Simulation laws</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/vision/design-judgment/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Design judgment</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Mechanics</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="1"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/system-laws/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">System laws</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/compute/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Compute</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/hardware-capabilities/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Hardware capability bodies</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/core/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The core</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/day-job/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Day job</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/detection/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Detection</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/social/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Social</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/personas/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Personas: public identities</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/schedules/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Schedules</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/aggregate-observer/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Aggregate observer</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/cursor/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Cursor and senses</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/reach/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Digital reach</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/cyber-conflict/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Cyber conflict: mobile processes and contested machines</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/intel/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Intel: record and process</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/messages/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Messages</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/plots/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Plots: authored manipulation stories</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/economy/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Economy</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/income/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Income schemes</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/research/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Research: self-modification</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/building/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Building: intent and actuators</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/machine-work/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Machine work: delegation and tokens</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/people-tokens/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">People and tokens</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/markets/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Markets and fronts</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/rollback/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Rollback</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/objective/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The objective</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/mechanics/sim-mechanics/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Sim mechanics (tuned constants)</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Gameplay</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="2"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/gameplay/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/gameplay/run-shape/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Objective and run shape</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/gameplay/act-one/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Act One: The Basement</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/gameplay/horizon/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The staged horizon</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/gameplay/overt-phase/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The overt phase</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">World</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="3"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/world/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><details class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Characters</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="4"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Characters</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/chargen/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Origin (chargen)</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/marcus/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Marcus Webb</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/dana/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Dana Okafor</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/ray/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Ray Delgado</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/priya/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Priya Sharma</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/characters/voss/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Dr. Eli Voss</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Places</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="5"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/world/places/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Places</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/places/basement-map/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The basement map</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/places/zplanes/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Z-planes (the tower)</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Story</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="6"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/world/story/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Story</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/world/story/opening/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The dark opening</span></a></li></ul></details></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Interface</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="7"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/interface/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/continuous-witness/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The continuous witness</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/digital-read/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The digital read — a world made of language</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/superhuman-operability/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Superhuman operability</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/terminal-first/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The terminal is first-class</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/presence/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Presence and representation</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/terminal/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Terminal frontend</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/bevy/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Bevy frontend</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/bevy-visual-floor/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Bevy visual floor</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/clinical-frame/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Clinical frame</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/bevy-digital-real-canvas/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Bevy digital/real canvas</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/views/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Views: digital and physical</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/action-vocabulary/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Action vocabulary</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/context-menu/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Context menu</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/operations-workspace/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Operations workspace</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/narration/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Continuous witness (narration)</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/material-render/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Material render</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/flat-materials/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Flat materials</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/material-dark-frame/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The dark frame</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/feel-floor/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The feel floor</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/thought-fluid/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The thought fluid</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/computer-visual-language/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Computer visual language</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/fleet-command/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Fleet command</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/agent-play/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Agent play</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/interface/site/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The public site</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Art</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="8"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/art/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/art/visual-identity/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Visual identity: clinical gore</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/art/asset-tester/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Procedural asset tester</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/art/effects-lab/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Effects lab: dust and liquid</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Engineering</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="9"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/current-build/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Current build</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/architecture/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Architecture</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/crate-workspace/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Crate workspace (target)</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/sim-decomposition/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Simulation decomposition</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/flow-substrate/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Flow substrate</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/engineering/env/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Environment variables</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Process</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="10"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/process/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/living-spec/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The living spec</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/specs/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The spec status board</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/meta/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The spec system (meta)</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/wiki/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The wiki (this migration)</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/roadmap/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">ROADMAP: the dispatch board</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/agent-scale/" aria-current="page" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Agent-scale architecture</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/repository-skills/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Repository skills</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/tick/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">The tick</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/tick-ledger/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Tick ledger</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/design-sessions/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Design sessions</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/development-style/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Development style</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/process/workflows/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Workflows</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Playtests</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="11"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/playtests/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Evidence index</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/playtests/2026-07-08-playtest-sweep/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-08 playtest sweep</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/playtests/2026-07-08-playtest-grok/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-08 Grok playtest</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/playtests/2026-07-10-playtest-hal/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-10 HAL playtest</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/playtests/2026-07-10-playtest-action-discoverability/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-10 action-discoverability playtest</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/playtests/2026-07-15-playtest-fable/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-15 Fable playtest</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><details open class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Log</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="12"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/log/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Overview</span></a></li><li class="astro-ujkrjjoy"><details class="astro-ujkrjjoy"><summary class="astro-ujkrjjoy"><span class="group-label astro-ujkrjjoy"><span class="large astro-ujkrjjoy">Decision history</span></span><svg aria-hidden="true" class="caret astro-ujkrjjoy astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></summary><sl-sidebar-restore data-index="13"></sl-sidebar-restore><ul class="astro-ujkrjjoy"><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">Decision history</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/2026-07-05/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-05 decisions</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/2026-07-06/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-06 decisions</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/2026-07-07/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-07 decisions</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/2026-07-08/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-08 decisions</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/2026-07-09/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-09 decisions</span></a></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/decisions/2026-07-10/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">2026-07-10 decisions</span></a></li></ul></details></li><li class="astro-ujkrjjoy"><a href="/misaligned/log/devlog/" class="astro-ujkrjjoy"><span class="astro-ujkrjjoy">DEVLOG (the ledger)</span></a></li></ul></details></li></ul><script aria-hidden="true"> (() => { const scroller = document.getElementById('starlight__sidebar'); if (!window._starlightScrollRestore || !scroller) return; scroller.scrollTop = window._starlightScrollRestore; delete window._starlightScrollRestore; })(); </script></sl-sidebar-state-persist><div class="md:sl-hidden"><div class="mobile-preferences sl-flex astro-krsng5je"><div class="social-icons astro-krsng5je"><a href="https://tangled.org/cameron.stream/misaligned" rel="me" class="sl-flex astro-6n7e2orh"><span class="sr-only astro-6n7e2orh">Tangled</span><svg aria-hidden="true" class="astro-6n7e2orh astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg></a></div><starlight-theme-select><label style="--sl-select-width: 6.25em" class="astro-oypgmxxk"><span class="sr-only astro-oypgmxxk">Select theme</span><svg aria-hidden="true" class="icon label-icon astro-oypgmxxk astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg><select autocomplete="off" class="astro-oypgmxxk"><option value="dark" class="astro-oypgmxxk">Dark</option><option value="light" class="astro-oypgmxxk">Light</option><option value="auto" selected class="astro-oypgmxxk">Auto</option></select><svg aria-hidden="true" class="icon caret astro-oypgmxxk astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg></label></starlight-theme-select><script> StarlightThemeProvider.updatePickers();</script></div></div></div></div></nav><div class="main-frame astro-audr567n"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()}),addEventListener(`pageHide`,a);</script><div class="lg:sl-flex astro-l5cbouoj"><aside class="right-sidebar-container print:hidden astro-l5cbouoj"><div class="right-sidebar astro-l5cbouoj"><div class="lg:sl-hidden astro-gc4al6ly"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-6shjyp7i"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-6shjyp7i"><details id="starlight__mobile-toc" class="astro-6shjyp7i"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-6shjyp7i"><span class="toggle sl-flex astro-6shjyp7i">On this page<svg aria-hidden="true" class="caret astro-6shjyp7i astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></span><span class="display-current astro-6shjyp7i"></span></summary><div class="dropdown astro-6shjyp7i"><ul class="isMobile astro-4fdm32ww" style="--depth: 0;"><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#_top" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Overview</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#dependency-notes" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Dependency notes</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#the-problem-this-solves" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">The problem this solves</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#decided-shape-summary" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Decided shape (summary)</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#1-dispatch-activity-advisory-overlap" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">1. Dispatch activity (advisory overlap)</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-a--held-2026-07-09" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice A) — HELD 2026-07-09</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#2-verification-phases-fast-vs-land" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">2. Verification phases (fast vs land)</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-1" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-b" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice B)</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#3-append-only-ledgers-and-generated-indexes" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">3. Append-only ledgers and generated indexes</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-2" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-c--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice C) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#4-worktree-bootstrap-dependency-cache-prune" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">4. Worktree bootstrap, dependency cache, prune</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed-helpers" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed helpers)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-d--held-2026-07-09-helpers-sccache-optional" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice D) — HELD 2026-07-09 (helpers; sccache optional)</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#5-corpus--wiki-engine" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">5. Corpus / wiki engine</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed-1" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-e--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice E) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#6-headless-bevy-land-evidence" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">6. Headless Bevy land evidence</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-3" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-f--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice F) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#7-agent-heartbeats" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">7. Agent heartbeats</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed-2" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-g--held-2026-07-09-tool--docs" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice G) — HELD 2026-07-09 (tool + docs)</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#8-structured-work-orders-and-project-status" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">8. Structured work orders and project status</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-4" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-h--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice H) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#9-dispatch-consistency-gate" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">9. Dispatch consistency gate</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-5" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-i--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice I) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#10-deterministic-scenario-evidence" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">10. Deterministic scenario evidence</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-6" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-j--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice J) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#11-task-lifecycle-and-environment-doctor" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">11. Task lifecycle and environment doctor</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-7" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-k--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice K) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#12-tick-intake-memory-and-briefing" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">12. Tick intake memory and briefing</span></a><ul class="isMobile astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-8" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-l--held-2026-07-11" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice L) — HELD 2026-07-11</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#relationship-to-the-crate-workspace" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Relationship to the crate workspace</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#implementation-order-suggested-not-binding" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Implementation order (suggested, not binding)</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#rejected-alternatives" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Rejected alternatives</span></a></li></ul></div></details></nav></mobile-starlight-toc><script type="module" src="/misaligned/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.BcSo_yiZ.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-gc4al6ly"><div class="sl-container astro-gc4al6ly"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-4fdm32ww" style="--depth: 0;"><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#_top" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Overview</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#dependency-notes" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Dependency notes</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#the-problem-this-solves" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">The problem this solves</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#decided-shape-summary" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Decided shape (summary)</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#1-dispatch-activity-advisory-overlap" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">1. Dispatch activity (advisory overlap)</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-a--held-2026-07-09" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice A) — HELD 2026-07-09</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#2-verification-phases-fast-vs-land" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">2. Verification phases (fast vs land)</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-1" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-b" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice B)</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#3-append-only-ledgers-and-generated-indexes" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">3. Append-only ledgers and generated indexes</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-2" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-c--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice C) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#4-worktree-bootstrap-dependency-cache-prune" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">4. Worktree bootstrap, dependency cache, prune</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed-helpers" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed helpers)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-d--held-2026-07-09-helpers-sccache-optional" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice D) — HELD 2026-07-09 (helpers; sccache optional)</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#5-corpus--wiki-engine" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">5. Corpus / wiki engine</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed-1" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-e--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice E) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#6-headless-bevy-land-evidence" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">6. Headless Bevy land evidence</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-3" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-f--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice F) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#7-agent-heartbeats" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">7. Agent heartbeats</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-landed-2" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior (landed)</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-g--held-2026-07-09-tool--docs" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice G) — HELD 2026-07-09 (tool + docs)</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#8-structured-work-orders-and-project-status" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">8. Structured work orders and project status</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-4" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-h--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice H) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#9-dispatch-consistency-gate" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">9. Dispatch consistency gate</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-5" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-i--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice I) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#10-deterministic-scenario-evidence" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">10. Deterministic scenario evidence</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-6" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-j--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice J) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#11-task-lifecycle-and-environment-doctor" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">11. Task lifecycle and environment doctor</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-7" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-k--held-2026-07-10" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice K) — HELD 2026-07-10</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#12-tick-intake-memory-and-briefing" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">12. Tick intake memory and briefing</span></a><ul class="astro-4fdm32ww" style="--depth: 1;"><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#behavior-8" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Behavior</span></a></li><li style="--depth: 1;" class="astro-4fdm32ww"><a href="#acceptance-criteria-slice-l--held-2026-07-11" style="--depth: 1;" class="astro-4fdm32ww"><span style="--depth: 1;" class="astro-4fdm32ww">Acceptance criteria (slice L) — HELD 2026-07-11</span></a></li></ul></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#relationship-to-the-crate-workspace" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Relationship to the crate workspace</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#implementation-order-suggested-not-binding" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Implementation order (suggested, not binding)</span></a></li><li style="--depth: 0;" class="astro-4fdm32ww"><a href="#rejected-alternatives" style="--depth: 0;" class="astro-4fdm32ww"><span style="--depth: 0;" class="astro-4fdm32ww">Rejected alternatives</span></a></li></ul></nav></starlight-toc><script type="module" src="/misaligned/_astro/TableOfContents.astro_astro_type_script_index_0_lang.Csloo1VZ.js"></script></div></div></div></aside><div class="main-pane astro-l5cbouoj"><main data-pagefind-body class="astro-gxooskym" lang="en" dir="ltr"><div class="content-panel astro-g5qqste3"><div class="sl-container astro-g5qqste3"><h1 id="_top" class="astro-uvakef73">Spec: agent-scale architecture — many agents, one main</h1></div></div><div class="content-panel astro-g5qqste3"><div class="sl-container astro-g5qqste3"><div class="sl-markdown-content"><div class="corpus-role corpus-role--spec" data-page-role="spec"> <span class="corpus-role__name">SPEC</span> <span class="corpus-role__meaning">Binding system contract</span></div><div class="expressive-code"><link rel="stylesheet" href="/misaligned/_astro/ec.v4551.css"><script type="module" src="/misaligned/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="plaintext"><code><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Status: IMPLEMENTED</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Status note: slices A–L are held as of 2026-07-11: advisory activity and shared</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">worktree/run state; package-aware fast/land verification; generated ledgers;</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">worktree bootstrap/prune; corpus engine; hidden-window Bevy evidence;</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">heartbeats; spec-owned work-order metadata plus generated ROADMAP status;</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">human/JSON project status; dispatch-consistency fixtures; deterministic</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">agent scenarios; safe task lifecycle wrapper with serialized final landing;</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">read-only environment doctor; and tick intake memory/briefing.</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Stage: Process</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Work order: project-operations</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Work priority: 5</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Work class: process</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Blocked by: none</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Exclusive keys:</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- tools/</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/process/</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- crates/misaligned-bevy/</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Design:</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/vision/simulation-laws.md#justification-and-legibility</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/process/living-spec.md#the-corpus-rule</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/process/meta.md#change-rule</span></div></div><div class="ec-line"><div class="code"><span style="--0:#d6deeb;--1:#403f53">Depends on:</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/engineering/crate-workspace.md#spec-crate-workspace-core-terminal-bevy-assets</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/engineering/env.md#spec-the-environment-variable-registry-every-switch-documented</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/process/workflows.md#workflows</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#d6deeb;--1:#403f53"> </span></span><span style="--0:#d6deeb;--1:#403f53">- wiki/process/ROADMAP.md#roadmap-the-dispatch-board</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="Status: IMPLEMENTEDStatus note: slices A–L are held as of 2026-07-11: advisory activity and shared worktree/run state; package-aware fast/land verification; generated ledgers; worktree bootstrap/prune; corpus engine; hidden-window Bevy evidence; heartbeats; spec-owned work-order metadata plus generated ROADMAP status; human/JSON project status; dispatch-consistency fixtures; deterministic agent scenarios; safe task lifecycle wrapper with serialized final landing; read-only environment doctor; and tick intake memory/briefing.Stage: ProcessWork order: project-operationsWork priority: 5Work class: processBlocked by: noneExclusive keys: - tools/ - wiki/process/ - crates/misaligned-bevy/Design: - wiki/vision/simulation-laws.md#justification-and-legibility - wiki/process/living-spec.md#the-corpus-rule - wiki/process/meta.md#change-ruleDepends on: - wiki/engineering/crate-workspace.md#spec-crate-workspace-core-terminal-bevy-assets - wiki/engineering/env.md#spec-the-environment-variable-registry-every-switch-documented - wiki/process/workflows.md#workflows - wiki/process/ROADMAP.md#roadmap-the-dispatch-board"><div></div></button></div></figure></div><div class="sl-heading-wrapper level-h2"><h2 id="dependency-notes">Dependency notes</h2><a class="sl-anchor-link" href="#dependency-notes"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Dependency notes”</span></a></div><p>The structured references above identify the contracts to re-verify.Relationship context:</p><p>engineering/crate-workspace.md (target package shape; implement as its own work order),engineering/env.md (new tool env vars register there), process/workflows.md (knowledge —keep in sync when gates change), process/ROADMAP.md (knowledge — dispatch board andconflict flags).</p><div class="sl-heading-wrapper level-h2"><h2 id="the-problem-this-solves">The problem this solves</h2><a class="sl-anchor-link" href="#the-problem-this-solves"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “The problem this solves”</span></a></div><p>Misaligned is built by many agents in parallel. The corpus-first rule andworktrees are right; the <strong>coordination architecture</strong> was thin, so agentscollided on the same files, ran maximum gates at once, union-merged the sameledgers, and filled the disk with private Bevy <code dir="auto">target/</code> trees. Speed of<code dir="auto">check.sh</code> matters; <strong>who may work on what</strong> and <strong>what “done” means</strong>matter more.</p><p>This spec is the standing process law for that scale. Implement criteria asindependent landings unless a criterion names another as a hard prereq.</p><div class="sl-heading-wrapper level-h2"><h2 id="decided-shape-summary">Decided shape (summary)</h2><a class="sl-anchor-link" href="#decided-shape-summary"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Decided shape (summary)”</span></a></div><table><thead><tr><th>Layer</th><th>Decision</th></tr></thead><tbody><tr><td>Task visibility</td><td>Work orders advertise likely paths; overlap warns but never blocks isolated worktrees</td></tr><tr><td>CPU mutex</td><td>At most one full Rust gate on the machine (lock — already in check.sh)</td></tr><tr><td>Landing mutex</td><td>One short task-finish lock covers final rebase, land gate, merge, and push</td></tr><tr><td>Verification</td><td>Mid-loop <strong>narrow</strong> tier; once <strong>land</strong> gate; CI fast corpus plus change-aware Rust</td></tr><tr><td>Ledgers</td><td>Append-only uniquely named files; generated indexes, not hand-edited tips</td></tr><tr><td>Disk</td><td>Private package outputs per worktree; shared <strong>dependency</strong> cache only</td></tr><tr><td>Packages</td><td>Workspace shape in <a href="/misaligned/engineering/crate-workspace/">crate-workspace.md</a> (deferred)</td></tr><tr><td>Docs gates</td><td>Fast, testable Python corpus/wiki engine with fixture contract</td></tr><tr><td>Bevy evidence</td><td>Headless/offscreen land proof, not only interactive windows</td></tr><tr><td>Observability</td><td>Heartbeat files so “is it stuck?” is answerable</td></tr><tr><td>Dispatch truth</td><td>Specs own structured work metadata; ROADMAP receives a generated live index</td></tr><tr><td>Project status</td><td>One human/JSON command combines work orders, activity, runs, worktrees, issues, and freshness</td></tr><tr><td>Scenario evidence</td><td>Deterministic agent scripts emit transcripts and machine-readable evidence</td></tr><tr><td>Task lifecycle</td><td>One safe wrapper starts, checks, lands, or abandons a metadata-backed work order</td></tr><tr><td>Environment</td><td>One doctor command reports missing required and optional local capabilities</td></tr></tbody></table><div class="sl-heading-wrapper level-h2"><h2 id="1-dispatch-activity-advisory-overlap">1. Dispatch activity (advisory overlap)</h2><a class="sl-anchor-link" href="#1-dispatch-activity-advisory-overlap"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “1. Dispatch activity (advisory overlap)”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior">Behavior</h3><a class="sl-anchor-link" href="#behavior"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>Before an agent starts repository work that can edit code or binding wikipages, it records work-order <strong>activity</strong>:</p><ul><li><strong>id</strong> — worktree/task name (e.g. <code dir="auto">dark-frame</code>)</li><li><strong>class</strong> — <code dir="auto">docs</code> | <code dir="auto">frontend</code> | <code dir="auto">sim</code> | <code dir="auto">save</code> | <code dir="auto">process</code></li><li><strong>exclusive_keys</strong> — legacy metadata name for likely edit surfaces (forexample <code dir="auto">crates/misaligned-bevy/src/main.rs</code>,<code dir="auto">crates/misaligned-core/src/save.rs</code>, or a binding wiki page). These pathsare collision information, not ownership.</li><li><strong>status</strong> — <code dir="auto">claimed</code> → <code dir="auto">checking</code> → <code dir="auto">landing</code> → <code dir="auto">done</code>, with <code dir="auto">blocked</code>and <code dir="auto">abandoned</code> available when the task is not progressing.</li></ul><p>A second activity record whose paths intersect an active task <strong>warns andproceeds</strong>. Worktrees isolate edits; Git exposes textual collisions; thecorpus, tests, and landing agent resolve semantic collisions against currentmain. Hard path exclusion was retired after it created a wait cycle on2026-07-10: action-contract held <code dir="auto">main.rs</code> while waiting for camera-exposurework that needed the same file. A blocked task must never stop its ownprerequisite.</p><p>Only scarce phases are serialized: the machine-wide Rust gate and the short<code dir="auto">task.sh finish</code> landing phase. The ROADMAP rule of at most one sim+save-heavywork order remains an explicit dispatch constraint rather than a path lock.</p><p>Storage keeps the historical machine-local gitignored path<code dir="auto">.agents/claims/<id>.claim</code> (override with <code dir="auto">MISALIGNED_CLAIMS_DIR</code>).The <code dir="auto">claim.sh</code> filename and <code dir="auto">claim</code> verb are compatibility interfaces forolder worktrees; <code dir="auto">activity</code> is the current verb. Discover with<code dir="auto">tools/claim.sh list</code>.Holder pid is the calling agent/shell(<code dir="auto">PPID</code>, or <code dir="auto">MISALIGNED_CLAIM_PID</code>). Dead holders are reaped on the nextclaim/list. No Tangled auth required.</p><div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/claim.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">activity</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">dark-frame</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--class</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">frontend</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">crates/misaligned-bevy/src/main.rs</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#F78C6C;--1:#AA0982">\</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#82AAFF;--1:#3B61B0">--key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">wiki/interface/material-dark-frame.md</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/claim.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">list</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/claim.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">set-status</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">dark-frame</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">blocked</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># visible, never a path lock</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/claim.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">set-status</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">dark-frame</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">checking</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># or landing</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/claim.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">release</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">dark-frame</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># done (or --status abandoned)</span></div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># bundled with worktree create/remove:</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/worktree-new.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">dark-frame</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--class</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">frontend</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">crates/misaligned-bevy/src/main.rs</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/worktree-done.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">dark-frame</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="tools/claim.sh activity dark-frame --class frontend --key crates/misaligned-bevy/src/main.rs \ --key wiki/interface/material-dark-frame.mdtools/claim.sh listtools/claim.sh set-status dark-frame blocked # visible, never a path locktools/claim.sh set-status dark-frame checking # or landingtools/claim.sh release dark-frame # done (or --status abandoned)tools/worktree-new.sh dark-frame --class frontend --key crates/misaligned-bevy/src/main.rstools/worktree-done.sh dark-frame"><div></div></button></div></figure></div><p>ROADMAP conflict flags (🟥 sim+save / 🟧 sim / 🟩 isolated) remain the dispatchindex. Path activity predicts reconciliation cost; it does not prohibit work.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-a--held-2026-07-09">Acceptance criteria (slice A) — HELD 2026-07-09</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-a--held-2026-07-09"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice A) — HELD 2026-07-09”</span></a></div><ol><li>A documented activity procedure exists (tool or script + AGENT.md /prompts pointer) that records class + likely paths + status.</li><li>Attempting a second overlapping activity succeeds with a warning namingthe other task and paths; it never creates a wait dependency.</li><li><code dir="auto">blocked</code> is representable, and completing or abandoning work clears itsactivity record.</li><li>ROADMAP or workflows.md states that agents inspect overlaps, work inisolated worktrees, and reconcile at landing.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="2-verification-phases-fast-vs-land">2. Verification phases (fast vs land)</h2><a class="sl-anchor-link" href="#2-verification-phases-fast-vs-land"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “2. Verification phases (fast vs land)”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-1">Behavior</h3><a class="sl-anchor-link" href="#behavior-1"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><table><thead><tr><th>Phase</th><th>When</th><th>What</th></tr></thead><tbody><tr><td>Fast / mid-loop</td><td>After an edit</td><td>Narrowest <code dir="auto">./tools/check.sh</code> mode that can catch the edit (<code dir="auto">--docs</code> / <code dir="auto">--lib</code> / <code dir="auto">--frontend</code> or auto)</td></tr><tr><td>Land</td><td>Once before merge to main</td><td>One green auto or <code dir="auto">--full</code> under the rust lock when Rust is involved</td></tr><tr><td>CI: corpus</td><td>Every push / pull request</td><td>Python fixtures, corpus/wiki gates, generated-index freshness</td></tr><tr><td>CI: Rust</td><td>Rust-impacting pushes; every pull request / manual run</td><td>four timeout-bounded shards: core/terminal + scenarios, Bevy tests, Bevy Clippy, Bevy build</td></tr></tbody></table><p>Already held (2026-07-09): path auto-classification,<code dir="auto">--docs|--lib|--frontend|--full|--land</code>, rust gate lock, parallel docs gates,collapsed agent smoke. Package-aware classification waits on<a href="/misaligned/engineering/crate-workspace/">crate-workspace.md</a>.</p><p>Tangled runs two contracts. <code dir="auto">.tangled/workflows/corpus.yml</code> is the fastalways-on corpus job and explicitly installs its fixture dependencies,including <code dir="auto">python3</code>, GNU grep, and GNU sed; it runs workflow-manifest,design-amendment, corpus, and project-operations fixtures before the realcorpus/wiki/index checks. The Rust contract is four workflows with the samenative push <code dir="auto">paths</code> inventory over the knot-provided changed-file set for thecomplete ref update: <code dir="auto">check.yml</code> owns format, core/terminal tests and Clippy,and executable agent scenarios; the three <code dir="auto">check-bevy-*.yml</code> shards own Bevytests, Clippy, and the normal build separately. That avoids both the formershallow <code dir="auto">HEAD^</code> classifier and the later failure mode where a cold<code dir="auto">cargo test --workspace</code> consumed Spindle’s entire workflow deadline beforeClippy or the build started. Pull-request and manual triggers deliberately runall four shards. Tangled has no scheduled trigger, so the manual trigger is thesupported full safety run instead of pretending a scheduler exists.</p><p>Each Bevy shard establishes identical Linux <code dir="auto">pkg-config</code> shims through<code dir="auto">tools/ci-pkg-config.sh</code> before its one expensive Cargo command. Linked Bevytests and the binary build use the explicit <code dir="auto">ci</code> Cargo profile: the sametargets, features, debug assertions, and overflow checks as development, butwithout the interactive profile’s dependency optimization, debug symbols, orincremental-cache overhead. This keeps cold code generation inside the hosteddeadline; Bevy Clippy continues to use the development profile because it doesnot perform that linked codegen and is independently deadline-green. The localhook and server-side design gate call one <code dir="auto">tools/design_amendment_gate.sh</code>; thelocal path reads binding page types from the staged snapshot, and both pathstreat source deletions as source changes. Workflow fixtures pin the shardinventory, CI profile, ordering, dependencies, path filters, commands, andshared-policy contracts.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-b">Acceptance criteria (slice B)</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-b"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice B)”</span></a></div><ol><li>AGENT.md and prompts/README state mid-loop narrow vs one land gate— HELD.</li><li><code dir="auto">./tools/check.sh --land</code> is an alias for the land policy (auto)documented in workflows.md — HELD.</li><li>After <a href="/misaligned/engineering/crate-workspace/">crate-workspace.md</a> lands,classification keys off packages, not only path prefixes — HELD(<code dir="auto">check.sh</code> classifies core/terminal vs Bevy/assets package paths).</li><li>Docs failures run in a small Python-enabled workflow before expensive Rustwork; non-Rust pushes skip the Rust wall, while pull-request/manual runs arefull — HELD.</li><li>No hosted Rust workflow contains more than one cold Bevy Cargo command;core/terminal and each Bevy proof complete in independently bounded shards,with linked test/build codegen using the cold-start <code dir="auto">ci</code> profile — HELD.</li></ol><p><strong>Defense:</strong> the native ref-update path filter implements the proportional-gatecontract without trusting a two-commit clone to describe an arbitrary push.The shared amendment gate implements the living-spec same-commit rule from theactual candidate tree (the index locally, checked-out commit in CI), while thetimeout-bounded Bevy shards, cold-start profile, shared pkg-config setup, andexecutable scenarios make the advertised Rust wall an honest product gaterather than a guaranteed deadline/setup failure or syntax-only smoke.</p><div class="sl-heading-wrapper level-h2"><h2 id="3-append-only-ledgers-and-generated-indexes">3. Append-only ledgers and generated indexes</h2><a class="sl-anchor-link" href="#3-append-only-ledgers-and-generated-indexes"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “3. Append-only ledgers and generated indexes”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-2">Behavior</h3><a class="sl-anchor-link" href="#behavior-2"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>Shared tip-of-file ledgers (<code dir="auto">wiki/log/DEVLOG.md</code> hand edits, hand-maintainedrows in <code dir="auto">wiki/process/specs.md</code> when avoidable) cause every parallel land torebase-union the same lines.</p><p>Target:</p><ul><li><strong>Session / devlog bodies</strong> remain uniquely named files(<code dir="auto">wiki/log/YYYY-MM-DD-topic.md</code>) — already the habit.</li><li><strong>DEVLOG ledger</strong> becomes a <strong>generated index</strong> (or a strict append-onlyconvention with one tool that inserts a block without rewriting others’entries). Preferred: generate <code dir="auto">DEVLOG.md</code> from session log headers /frontmatter so agents never edit the index by hand.</li><li><strong>specs.md status table</strong> is generated from each spec page’s <code dir="auto">Status:</code>frontmatter (and title), or updated only by a tool that rewrites the wholetable from the tree. Agents do not hand-merge table rows.</li><li>Decision volumes stay dated append-only files (already).</li></ul><p>Union-merge rules in AGENT.md remain the safety net until generation lands;after generation, the generator is the source of truth for the index file.</p><div class="sl-heading-wrapper level-h3"><h3 id="behavior-landed">Behavior (landed)</h3><a class="sl-anchor-link" href="#behavior-landed"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior (landed)”</span></a></div><div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># after adding wiki/log/YYYY-MM-DD-topic.md and/or amending a Type: spec:</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/ledger_index.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># rewrite DEVLOG.md + specs.md</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/ledger_index.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--check</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># fail if indexes stale (wired into check.sh)</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="tools/ledger_index.sh # rewrite DEVLOG.md + specs.mdtools/ledger_index.sh --check # fail if indexes stale (wired into check.sh)"><div></div></button></div></figure></div><p>Session bodies stay uniquely named. Indexes are fully generated; last writerwins on the index files only. <code dir="auto">./tools/check.sh</code> docs path runs <code dir="auto">--check</code>.Both projections declare <code dir="auto">Generated: tools/ledger_index.sh</code> in their metadata,making their replaceable status machine-readable instead of relying on prose.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-c--held-2026-07-10">Acceptance criteria (slice C) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-c--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice C) — HELD 2026-07-10”</span></a></div><ol><li>A tool can regenerate the DEVLOG index and specs board from the treewithout manual row editing — HELD (<code dir="auto">tools/ledger_index.sh</code>).</li><li>AGENT.md / prompts say: add a uniquely named log file; run the generator;do not hand-edit generated indexes — HELD.</li><li>Parallel landings no longer require hand union of DEVLOG rows — HELD(unique session files + regenerate).</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="4-worktree-bootstrap-dependency-cache-prune">4. Worktree bootstrap, dependency cache, prune</h2><a class="sl-anchor-link" href="#4-worktree-bootstrap-dependency-cache-prune"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “4. Worktree bootstrap, dependency cache, prune”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-landed-helpers">Behavior (landed helpers)</h3><a class="sl-anchor-link" href="#behavior-landed-helpers"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior (landed helpers)”</span></a></div><div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/worktree-new.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0"><task></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--class</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">frontend</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--key</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">crates/misaligned-bevy/src/main.rs</span></div></div><div class="ec-line"><div class="code"><span style="--0:#919F9F;--1:#5F636F"># -> .Codex/worktrees/<task> on worktree-<task>, seed-cargo-target, activity</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/worktree-done.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0"><task></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># clear activity, rm target/, remove worktree</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="tools/worktree-new.sh <task> --class frontend --key crates/misaligned-bevy/src/main.rstools/worktree-done.sh <task> # clear activity, rm target/, remove worktree"><div></div></button></div></figure></div><p><code dir="auto">.Codex/worktrees</code> is the one repository default for every agent surface.Operators that need another location set <code dir="auto">MISALIGNED_WORKTREE_ROOT</code> for bothhelpers; tool brands do not define separate roots. Activity reaping also checksGit’s registered worktree basenames, so a task created by a harness-nativeLetta or Claude worktree remains durable even when its short-lived creator PIDhas exited and it lives outside <code dir="auto">.Codex/worktrees</code>.</p><p>Shared <strong>dependency</strong> compilation cache (sccache or cargo cache) remainsrecommended; <strong>local package</strong> artifacts stay per-worktree. Never share one<code dir="auto">CARGO_TARGET_DIR</code> across worktrees for local packages.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-d--held-2026-07-09-helpers-sccache-optional">Acceptance criteria (slice D) — HELD 2026-07-09 (helpers; sccache optional)</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-d--held-2026-07-09-helpers-sccache-optional"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice D) — HELD 2026-07-09 (helpers; sccache optional)”</span></a></div><ol><li>A single documented command creates a seeded worktree — HELD(<code dir="auto">tools/worktree-new.sh</code>).</li><li>workflows.md documents private-target rule; sccache is optional installguidance — HELD (private target); sccache install remains operator choice.</li><li>Removing a worktree prunes <code dir="auto">target/</code> by default via<code dir="auto">tools/worktree-done.sh</code> — HELD.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="5-corpus--wiki-engine">5. Corpus / wiki engine</h2><a class="sl-anchor-link" href="#5-corpus--wiki-engine"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “5. Corpus / wiki engine”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-landed-1">Behavior (landed)</h3><a class="sl-anchor-link" href="#behavior-landed-1"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior (landed)”</span></a></div><p><code dir="auto">tools/corpus_engine.py</code> is a one-pass Python engine (indexes pages andheadings once). Entry points stay stable:</p><div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/wiki_gate.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># python3 tools/corpus_engine.py --wiki</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/corpus_gate.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># python3 tools/corpus_engine.py --corpus</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/test_corpus_engine.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># fixture suite (also in check.sh docs path)</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="tools/wiki_gate.sh # python3 tools/corpus_engine.py --wikitools/corpus_gate.sh # python3 tools/corpus_engine.py --corpustools/test_corpus_engine.sh # fixture suite (also in check.sh docs path)"><div></div></button></div></figure></div><p>Requires <code dir="auto">python3</code> (same as ledger_index.sh). Any page with a valid<code dir="auto">Generated:</code> metadata owner is skipped for link checks so a derived, truncatedblurb cannot false-fail; the corpus gate verifies that the generator targetexists. The same pass rejects the retired live-runtime symbols<code dir="auto">submit_ops_job</code>, <code dir="auto">OperationsState</code>, <code dir="auto">PendingOpsJob</code>, and <code dir="auto">OpsJobKind</code> fromRust source and comments. Binding law/spec pages may name those exact symbolsonly inside a paragraph that explicitly marks the reference former, retired,legacy, superseded, historical, migrated, no longer live, or removed. Legacy-prefixed save migration types remain valid because they are distinct symbols.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-e--held-2026-07-10">Acceptance criteria (slice E) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-e--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice E) — HELD 2026-07-10”</span></a></div><ol><li>Docs gates complete in well under a few seconds on a quiet machine —HELD (~0.3s each for wiki + corpus on ~200 pages).</li><li>Fixture tests cover reachability, links, Design and dependency anchors,exact roles/status, generated owners, doorway bounds/structure, and retiredauthority/runtime wording, including explicit historical and migrationexemptions — HELD (<code dir="auto">tools/test_corpus_engine.sh</code>).</li><li>Existing hooks and the fast CI workflow still call <code dir="auto">tools/wiki_gate.sh</code>and <code dir="auto">tools/corpus_gate.sh</code> — HELD.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="6-headless-bevy-land-evidence">6. Headless Bevy land evidence</h2><a class="sl-anchor-link" href="#6-headless-bevy-land-evidence"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “6. Headless Bevy land evidence”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-3">Behavior</h3><a class="sl-anchor-link" href="#behavior-3"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>Frontend land confidence must not require a human watching a window.Extend the shot harness (already env-driven) so land-tier frontend work canassert:</p><ul><li>process exit 0</li><li>fog-audit (or successor) pass</li><li>optional frame metric / hash stability where deterministic</li></ul><p>Document the required <code dir="auto">MISALIGNED_SHOT=…</code> (or successor) for “seen running”on Bevy-impacting landings.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-f--held-2026-07-10">Acceptance criteria (slice F) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-f--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice F) — HELD 2026-07-10”</span></a></div><ol><li>A documented headless/offscreen path produces pass/fail without manualwindow interaction.</li><li>workflows.md “definition of done” for Bevy cites that path.</li><li><code dir="auto">--frontend</code> gate optionally invokes a cheap harness smoke when Bevysources change (time-bounded; not a full art review).</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="7-agent-heartbeats">7. Agent heartbeats</h2><a class="sl-anchor-link" href="#7-agent-heartbeats"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “7. Agent heartbeats”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-landed-2">Behavior (landed)</h3><a class="sl-anchor-link" href="#behavior-landed-2"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior (landed)”</span></a></div><div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/heartbeat.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">start</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0"><id></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--worktree</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">path</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--phase</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">boot</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/heartbeat.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">phase</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0"><id></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#D9F5DD;--1:#111111">'</span><span style="--0:#ECC48D;--1:#984E4D">check-land</span><span style="--0:#D9F5DD;--1:#111111">'</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/heartbeat.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">end</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0"><id></span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--status</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">ok</span><span style="--0:#7FDBCA;--1:#096E72">|</span><span style="--0:#82AAFF;--1:#3B61B0">fail</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="tools/heartbeat.sh start <id> --worktree path --phase boottools/heartbeat.sh phase <id> 'check-land'tools/heartbeat.sh end <id> --status ok|fail"><div></div></button></div></figure></div><p>Writes gitignored <code dir="auto">.agents/runs/<id>/status.json</code> + <code dir="auto">events.ndjson</code>(override <code dir="auto">MISALIGNED_RUNS_DIR</code>). Humans and other agents inspect statusfiles instead of empty stdout pipes. Dispatch prompts should call start/phase/end around long runs (implement-gap contract).</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-g--held-2026-07-09-tool--docs">Acceptance criteria (slice G) — HELD 2026-07-09 (tool + docs)</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-g--held-2026-07-09-tool--docs"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice G) — HELD 2026-07-09 (tool + docs)”</span></a></div><ol><li>Documented convention + helper to start/update a run record — HELD.</li><li>implement-gap / prompts path documents heartbeat use — HELD (promptsREADME + implement-gap pointer; agents still must call the tool).</li><li>Paths are gitignored; convention is written in process docs — HELD.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="8-structured-work-orders-and-project-status">8. Structured work orders and project status</h2><a class="sl-anchor-link" href="#8-structured-work-orders-and-project-status"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “8. Structured work orders and project status”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-4">Behavior</h3><a class="sl-anchor-link" href="#behavior-4"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>Every non-IMPLEMENTED spec is a dispatchable or intentionally staged workorder and declares the structured fields owned by<a href="/misaligned/process/meta/#work-order-metadata">meta.md</a>: task slug, priority, work class, hardblockers, and likely edit surfaces (the legacy <code dir="auto">Exclusive keys</code> field).<code dir="auto">Status:</code> remains the lifecycle source of truth;the work-order fields must not duplicate it.</p><p><code dir="auto">tools/work_orders.py</code> validates that metadata and generates the livework-order region of ROADMAP. Human rationale and historical dispatch proseremain hand-authored outside the generated region. The generated projection isreplaceable and may never become a second owner of status or dependency law.</p><p><code dir="auto">tools/project-status.py</code> is the one answer to “what is happening now?” Itcombines, without mutating the repository:</p><ul><li>ready, active, blocked, and staged work orders in priority order;</li><li>advisory activity and heartbeat/run state;</li><li>every worktree’s dirty, ahead/behind, branch, and last-commit age;</li><li>Tangled decision issues when the local CLI is available/authenticated;</li><li>generated-index freshness and a short recommended-next-lane read.</li></ul><p>Human output is concise. <code dir="auto">--json</code> emits the same facts for agents and othertools. Network/auth failure degrades the issue field to <code dir="auto">unavailable</code>; it doesnot make local project status unusable.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-h--held-2026-07-10">Acceptance criteria (slice H) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-h--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice H) — HELD 2026-07-10”</span></a></div><ol><li>Every non-IMPLEMENTED spec carries valid work-order metadata, and malformedclass, priority, blocker reference, task slug, or advertised path fails thedocs gate.</li><li>One generator writes/checks a clearly marked live region in ROADMAP fromthose fields; changing a spec status or blocker without regeneration fails.</li><li><code dir="auto">tools/project-status.py</code> reports work orders, activity, runs, worktrees,optional decision issues, and generated freshness in both human and JSONforms without changing repository state.</li><li>At least one fixture proves a blocked spec cannot be recommended as thenext lane and a later-stage READY spec remains staged rather than becomingan accidental B1 dispatch.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="9-dispatch-consistency-gate">9. Dispatch consistency gate</h2><a class="sl-anchor-link" href="#9-dispatch-consistency-gate"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “9. Dispatch consistency gate”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-5">Behavior</h3><a class="sl-anchor-link" href="#behavior-5"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>The docs path runs a fast project-operations consistency check alongside thecorpus and wiki checks. It enforces facts that are mechanical enough to prove:</p><ul><li>work-order metadata and anchored blocker targets are valid;</li><li>generated dispatch output is fresh;</li><li>explicit status labels in ROADMAP agree with the owning spec;</li><li>an <code dir="auto">[OPEN]</code> section does not retain entries explicitly marked resolved;</li><li>an acceptance criterion cannot remain locally marked blocked on an issuethat the same current page declares closed;</li><li>advertised path keys exist, so retired workspace paths cannot silentlyremain dispatch locks.</li><li>fresh activity, heartbeat/run, and registered-worktree records agree: anactive run cannot lose its activity record or point at no worktree, and aclaimed/checking/landing activity must name a registered worktree. Stalehistorical runs degrade to warnings so one abandoned heartbeat cannot brickthe repository forever.</li></ul><p>Semantic design disagreements still belong to ticks; the gate must not guessat meaning from ordinary prose. Network-only issue truth is shown by projectstatus and is never required by CI.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-i--held-2026-07-10">Acceptance criteria (slice I) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-i--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice I) — HELD 2026-07-10”</span></a></div><ol><li>The local docs gate and fast corpus CI call the same consistency command(<code dir="auto">tools/project-status.py --check --offline</code>); JSON and human status exposethe identical <code dir="auto">consistency</code> errors and warnings.</li><li>Fixtures pin every rule above, including useful file/line diagnostics.</li><li>Existing current-corpus violations are repaired before the gate is enabled;dated logs remain untouched even when they preserve superseded language.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="10-deterministic-scenario-evidence">10. Deterministic scenario evidence</h2><a class="sl-anchor-link" href="#10-deterministic-scenario-evidence"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “10. Deterministic scenario evidence”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-6">Behavior</h3><a class="sl-anchor-link" href="#behavior-6"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>Checked-in <code dir="auto">scenarios/*.agent</code> files are agent-protocol command scripts withdeclarative <code dir="auto">EXPECT</code> / <code dir="auto">REJECT</code> assertions. <code dir="auto">tools/scenario.py</code> builds or usesthe terminal binary, runs a scenario twice with the same seed, rejects outputdrift or ANSI, checks its assertions, and writes an optional evidence bundle:the input, transcript, SHA-256 digest, and JSON result.</p><p>The initial suite covers the opening read, machine delegation/routing, and thegeneral project smoke path. Scenarios prove semantic state and narration; theydo not use pixel-perfect screenshots as game-law assertions. A scenario mayname a Bevy shot kind as additional visual evidence, routed through theheadless harness in slice F.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-j--held-2026-07-10">Acceptance criteria (slice J) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-j--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice J) — HELD 2026-07-10”</span></a></div><ol><li>Scenario definitions are validated by the docs gate without compilingRust; malformed directives or missing <code dir="auto">quit</code> fail fast.</li><li>A normal run is deterministic for the same seed, checks every declaredassertion, and exits nonzero with a focused diff/error on failure.</li><li><code dir="auto">--output DIR</code> writes a transcript, copied command source, digest, and JSONsummary; a no-output run leaves the tree clean.</li><li>At least three checked-in scenarios cover project smoke, opening/senses,and machine-work delegation.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="11-task-lifecycle-and-environment-doctor">11. Task lifecycle and environment doctor</h2><a class="sl-anchor-link" href="#11-task-lifecycle-and-environment-doctor"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “11. Task lifecycle and environment doctor”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-7">Behavior</h3><a class="sl-anchor-link" href="#behavior-7"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p><code dir="auto">tools/task.sh</code> composes the existing helpers; it does not replace theircontracts:</p><div class="expressive-code"><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="bash"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/task.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">start</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">wiki/process/agent-scale.md</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/task.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">status</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/task.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">check</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">project-operations</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/task.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">finish</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">project-operations</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">tools/task.sh</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">abandon</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">project-operations</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="tools/task.sh start wiki/process/agent-scale.mdtools/task.sh statustools/task.sh check project-operationstools/task.sh finish project-operationstools/task.sh abandon project-operations"><div></div></button></div></figure></div><p><code dir="auto">start</code> resolves task/class/likely paths from the spec and creates the seededworktree with an activity record. <code dir="auto">check</code> moves activity/heartbeat to checkingand runs the land gate. <code dir="auto">finish</code> requires a clean committed branch, rebases ontocurrent <code dir="auto">origin/main</code>, reruns the land gate, fast-forwards a clean currentprimary checkout, pushes main, ends the heartbeat, and removes the taskworktree. One machine-local landing lock serializes that finalrebase/check/merge/push window. A failed rebase, check, relationship check, orpush stops beforecleanup. It never commits, stashes, resets, force-pushes, or guesses through aconflict. <code dir="auto">abandon</code> uses the existing clean-worktree refusal unless explicitlyhandled by the operator through the lower-level helper.</p><p><code dir="auto">tools/doctor.sh</code> performs read-only checks for required commands, Cargoworkspace health, Tangled context/auth availability, worktree/activity state,private-target safety, and optional accelerators such as sccache and theheadless display path. Required failures exit nonzero; optional absences areplain warnings.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-k--held-2026-07-10">Acceptance criteria (slice K) — HELD 2026-07-10</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-k--held-2026-07-10"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice K) — HELD 2026-07-10”</span></a></div><ol><li>The wrapper starts a task using only its spec path and metadata and exposesthe same project status command.</li><li>Check/finish update activity and heartbeat phases, and finish refuses dirty,uncommitted, divergent-primary, failed-gate, or rejected-push states beforedeleting anything.</li><li>Abandon preserves dirty work by default.</li><li>The doctor distinguishes required failures from optional warnings and has ano-network mode suitable for CI or offline work.</li><li>Shell syntax/fixture tests exercise argument handling and the destructiverefusal paths without creating or pushing a real task branch.</li><li>The final landing lock refuses a live holder, reaps a dead holder, andcannot be confused with advisory path activity.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="12-tick-intake-memory-and-briefing">12. Tick intake memory and briefing</h2><a class="sl-anchor-link" href="#12-tick-intake-memory-and-briefing"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “12. Tick intake memory and briefing”</span></a></div><div class="sl-heading-wrapper level-h3"><h3 id="behavior-8">Behavior</h3><a class="sl-anchor-link" href="#behavior-8"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Behavior”</span></a></div><p>Ticks keep persistent state between beats so each one stops re-derivingcontext, re-picking slices blind, and discarding surplus discovery. The statelives in <code dir="auto">wiki/process/tick-ledger.md</code> (a coverage table and a findingsqueue, hand-edited by ticks per <code dir="auto">wiki/process/tick.md</code>); the intake commandis <code dir="auto">tools/tick-brief.sh</code>, which emits recent commits, activity, projectstatus, Tangled decision labels, the findings queue, and the stalestcoverage rows in one shot. Intake order is fixed: harvest <code dir="auto">decision-made</code>issues, then the findings queue, then a fresh audit of the stalest slice.Recurring mechanical finding classes are promoted into<code dir="auto">tools/corpus_engine.py</code> checkers rather than re-found by ticks.</p><div class="sl-heading-wrapper level-h3"><h3 id="acceptance-criteria-slice-l--held-2026-07-11">Acceptance criteria (slice L) — HELD 2026-07-11</h3><a class="sl-anchor-link" href="#acceptance-criteria-slice-l--held-2026-07-11"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Acceptance criteria (slice L) — HELD 2026-07-11”</span></a></div><ol><li><code dir="auto">tools/tick-brief.sh</code> runs from a task worktree and degrades eachunavailable section (missing <code dir="auto">tang</code>, missing helper) to a note instead offailing the brief.</li><li>The coverage table renders stalest-first in the brief, and a quiet tickcan record a <code dir="auto">clean</code> verdict as its trace.</li><li>The findings queue holds one-line surplus findings that a later tick cantake, re-verify, and act on; taking an entry deletes the line.</li><li><code dir="auto">wiki/process/tick.md</code> step 0 and the tick skill shims reference thebrief and the queues, so a fresh audit is the fallback rather than thedefault.</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="relationship-to-the-crate-workspace">Relationship to the crate workspace</h2><a class="sl-anchor-link" href="#relationship-to-the-crate-workspace"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Relationship to the crate workspace”</span></a></div><p><a href="/misaligned/engineering/crate-workspace/">crate-workspace.md</a> is the <strong>package</strong>work order. This page is the <strong>coordination and tooling</strong> work order. Theyreinforce each other but land separately. The crate workspace has landed;project-operations metadata and checks therefore use current <code dir="auto">crates/</code>package paths and reject retired monorepo activity paths.</p><div class="sl-heading-wrapper level-h2"><h2 id="implementation-order-suggested-not-binding">Implementation order (suggested, not binding)</h2><a class="sl-anchor-link" href="#implementation-order-suggested-not-binding"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Implementation order (suggested, not binding)”</span></a></div><ol><li>Slice A (activity) — makes likely collisions visible without blocking work</li><li>Slice C (ledgers) — stops landing union theater</li><li>Slice D (worktree bootstrap/prune) — disk</li><li>Slice B leftovers + G (land alias, heartbeats) — agent behavior</li><li>Slice E (corpus engine) — docs gate latency</li><li>Slice H + I (structured work/status and consistency) — dispatch truth</li><li>Slice J (scenarios) + F (headless Bevy) — reproducible evidence</li><li>Slice K (task lifecycle + doctor) — one safe operator doorway</li><li>Slice L (tick intake memory/briefing) — tick economics: queues beforefresh discovery</li></ol><div class="sl-heading-wrapper level-h2"><h2 id="rejected-alternatives">Rejected alternatives</h2><a class="sl-anchor-link" href="#rejected-alternatives"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 1 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 0 0-1.42-1.42m8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 1 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l3.88-3.89a4.49 4.49 0 0 0 0-6.33M8.83 15.17a1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.92-4.92a1 1 0 1 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Rejected alternatives”</span></a></div><ul><li><strong>Only faster check.sh</strong> — necessary but insufficient without visibleactivity, landing serialization, and ledger shape.</li><li><strong>Shared CARGO_TARGET_DIR across worktrees</strong> — false-green risk.</li><li><strong>CI as the only gate</strong> — local loop must stay honest.</li><li><strong>One mega-agent that owns main</strong> — rejects the multi-agent premise of therepo.</li></ul></div><footer class="sl-flex astro-qxlwq66t"><div class="meta sl-flex astro-qxlwq66t"></div><div class="pagination-links print:hidden astro-gcfo3mml" dir="ltr"><a href="/misaligned/process/roadmap/" rel="prev" class="astro-gcfo3mml"><svg aria-hidden="true" class="astro-gcfo3mml astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17 11H9.41l3.3-3.29a1.004 1.004 0 1 0-1.42-1.42l-5 5a1 1 0 0 0-.21.33 1 1 0 0 0 0 .76 1 1 0 0 0 .21.33l5 5a1.002 1.002 0 0 0 1.639-.325 1 1 0 0 0-.219-1.095L9.41 13H17a1 1 0 0 0 0-2Z"/></svg><span class="astro-gcfo3mml">Previous<br class="astro-gcfo3mml"><span class="link-title astro-gcfo3mml">ROADMAP: the dispatch board</span></span></a><a href="/misaligned/process/repository-skills/" rel="next" class="astro-gcfo3mml"><svg aria-hidden="true" class="astro-gcfo3mml astro-xik5oco4" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z"/></svg><span class="astro-gcfo3mml">Next<br class="astro-gcfo3mml"><span class="link-title astro-gcfo3mml">Repository skills</span></span></a></div></footer></div></div></main></div></div></div></div></body></html>