{"slug":"njrS5TJhis","title":"Closing the Verification Loop","share_url":"https://thinkroom.kieranklaassen.com/d/njrS5TJhis","content_format":"markdown","content":"# <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Closing the Verification Loop</span>\n\n*<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">How a branch proves itself ready: browser reality, persona eyes, and fixes that carry their own evidence.</span>*\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">1. The loop that must close</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Agents made building cheap. The cost moved: the expensive question is no longer \"can we ship this?\" but \"does anyone actually know it works?\" A branch that compiles, passes review, and merges can still greet its first real user with a form that validates the wrong field and an email that links to the wrong thread.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The verification loop is the distance between a claim and its proof:</span>\n\n```excalidraw\n{\"id\":\"verification-loop\",\"formatVersion\":1,\"description\":\"The verification loop: the distance between a claim and its proof\",\"height\":280,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el1\",\"type\":\"rectangle\",\"x\":10,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":1,\"versionNonce\":1},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el2\",\"type\":\"text\",\"x\":39.28,\"y\":91,\"width\":37.44,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":2,\"versionNonce\":2,\"text\":\"change\\nlands\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"change\\nlands\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el3\",\"type\":\"rectangle\",\"x\":120,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":3,\"versionNonce\":3},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el4\",\"type\":\"text\",\"x\":143.04,\"y\":91,\"width\":49.92,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":4,\"versionNonce\":4,\"text\":\"claim:\\nit works\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"claim:\\nit works\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el5\",\"type\":\"arrow\",\"x\":106,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":5,\"versionNonce\":5,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el6\",\"type\":\"rectangle\",\"x\":230,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":6,\"versionNonce\":6},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el7\",\"type\":\"text\",\"x\":243.68,\"y\":91,\"width\":68.64,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":7,\"versionNonce\":7,\"text\":\"exercise it\\nas a user\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"exercise it\\nas a user\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el8\",\"type\":\"arrow\",\"x\":216,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":8,\"versionNonce\":8,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el9\",\"type\":\"rectangle\",\"x\":340,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":9,\"versionNonce\":9},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el10\",\"type\":\"text\",\"x\":350.56,\"y\":91,\"width\":74.88,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":10,\"versionNonce\":10,\"text\":\"observe what\\nhappens\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"observe what\\nhappens\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el11\",\"type\":\"arrow\",\"x\":326,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":11,\"versionNonce\":11,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el12\",\"type\":\"rectangle\",\"x\":450,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":12,\"versionNonce\":12},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el13\",\"type\":\"text\",\"x\":466.8,\"y\":91,\"width\":62.400000000000006,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":13,\"versionNonce\":13,\"text\":\"fix what's\\nbroken\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"fix what's\\nbroken\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el14\",\"type\":\"arrow\",\"x\":436,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":14,\"versionNonce\":14,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el15\",\"type\":\"rectangle\",\"x\":560,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":15,\"versionNonce\":15},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el16\",\"type\":\"text\",\"x\":573.68,\"y\":91,\"width\":68.64,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":16,\"versionNonce\":16,\"text\":\"prove it\\nwith a test\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"prove it\\nwith a test\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el17\",\"type\":\"arrow\",\"x\":546,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":17,\"versionNonce\":17,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el18\",\"type\":\"rectangle\",\"x\":670,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":18,\"versionNonce\":18},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el19\",\"type\":\"text\",\"x\":689.92,\"y\":98.5,\"width\":56.160000000000004,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":19,\"versionNonce\":19,\"text\":\"re-verify\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"re-verify\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el20\",\"type\":\"arrow\",\"x\":656,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":20,\"versionNonce\":20,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el21\",\"type\":\"rectangle\",\"x\":780,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":21,\"versionNonce\":21},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el22\",\"type\":\"text\",\"x\":812.4,\"y\":98.5,\"width\":31.200000000000003,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":22,\"versionNonce\":22,\"text\":\"ready\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"ready\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el23\",\"type\":\"arrow\",\"x\":766,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":23,\"versionNonce\":23,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el24\",\"type\":\"arrow\",\"x\":700,\"y\":80,\"width\":434,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":24,\"versionNonce\":24,\"points\":[[0,0],[0,-30],[-434,-30],[-434,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el25\",\"type\":\"text\",\"x\":304.24,\"y\":11.875,\"width\":351.52000000000004,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":25,\"versionNonce\":25,\"text\":\"the loop: a failed re-verify goes back to exercising\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"the loop: a failed re-verify goes back to exercising\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Most teams close this loop with humans: someone clicks around before the demo, someone eyeballs staging. That works until agents outrun the humans, which is what the agents were for. Compound engineering (CE, a plugin of skills for coding agents like Claude Code) answers that the loop itself is work an agent can do, end to end, with people pulled in where judgment belongs to them, and where the tooling genuinely cannot reach. The skill that embodies this is</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`/ce-dogfood`, and the rest of this piece walks through how it closes the loop, and the persona strategy that gives it eyes.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">2. Dogfood in one pass</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`/ce-dogfood`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">acts as a QA engineer who dogfoods the active branch: understand every change, test every change in a real browser as a user would, and fix what breaks, autonomously, until the branch is ready. Two constraints define it:</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Diff-scoped, never whole-app.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">It tests what this branch changed versus the trunk, and it refuses to run on the trunk itself: no diff, nothing to dogfood.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">A real browser, one tool.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">All automation goes through the</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`agent-browser`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">CLI, a shell tool that drives the browser directly (a Rust binary, not a wrapper, not an MCP server): no exceptions.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The workflow is seven phases with a loop in the middle:</span>\n\n```excalidraw\n{\"id\":\"dogfood-phases\",\"formatVersion\":1,\"description\":\"Seven phases with a loop in the middle: the fix loop feeds back into execution\",\"height\":260,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el26\",\"type\":\"rectangle\",\"x\":10,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":26,\"versionNonce\":26},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el27\",\"type\":\"text\",\"x\":41.34,\"y\":77.875,\"width\":47.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":27,\"versionNonce\":27,\"text\":\"0 Scope\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"0 Scope\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el28\",\"type\":\"rectangle\",\"x\":135,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":28,\"versionNonce\":28},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el29\",\"type\":\"text\",\"x\":159.57999999999998,\"y\":77.875,\"width\":60.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":29,\"versionNonce\":29,\"text\":\"1 Analyze\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"1 Analyze\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el30\",\"type\":\"arrow\",\"x\":120,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":30,\"versionNonce\":30,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el31\",\"type\":\"rectangle\",\"x\":260,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":31,\"versionNonce\":31},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el32\",\"type\":\"text\",\"x\":284.58,\"y\":69.75,\"width\":60.84,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":32,\"versionNonce\":32,\"text\":\"2 Flows +\\nmatrix\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"2 Flows +\\nmatrix\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el33\",\"type\":\"arrow\",\"x\":245,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":33,\"versionNonce\":33,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el34\",\"type\":\"rectangle\",\"x\":385,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":34,\"versionNonce\":34},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el35\",\"type\":\"text\",\"x\":416.34,\"y\":77.875,\"width\":47.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":35,\"versionNonce\":35,\"text\":\"3 Serve\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"3 Serve\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el36\",\"type\":\"arrow\",\"x\":370,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":36,\"versionNonce\":36,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el37\",\"type\":\"rectangle\",\"x\":510,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":37,\"versionNonce\":37},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el38\",\"type\":\"text\",\"x\":534.58,\"y\":77.875,\"width\":60.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":38,\"versionNonce\":38,\"text\":\"4 Execute\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"4 Execute\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el39\",\"type\":\"arrow\",\"x\":495,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":39,\"versionNonce\":39,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el40\",\"type\":\"rectangle\",\"x\":635,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":40,\"versionNonce\":40},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el41\",\"type\":\"text\",\"x\":656.2,\"y\":77.875,\"width\":67.60000000000001,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":41,\"versionNonce\":41,\"text\":\"5 Fix loop\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"5 Fix loop\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el42\",\"type\":\"arrow\",\"x\":620,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":42,\"versionNonce\":42,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el43\",\"type\":\"rectangle\",\"x\":760,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":43,\"versionNonce\":43},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el44\",\"type\":\"text\",\"x\":787.96,\"y\":77.875,\"width\":54.08,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":44,\"versionNonce\":44,\"text\":\"6 Report\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"6 Report\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el45\",\"type\":\"arrow\",\"x\":745,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":45,\"versionNonce\":45,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el46\",\"type\":\"arrow\",\"x\":690,\"y\":112,\"width\":180,\"height\":92,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":46,\"versionNonce\":46,\"points\":[[0,0],[0,46],[-180,46],[-180,-46]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el47\",\"type\":\"text\",\"x\":498.6,\"y\":176.875,\"width\":202.8,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":47,\"versionNonce\":47,\"text\":\"every fix re-runs its scenario\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"every fix re-runs its scenario\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">A few phase details that carry the philosophy:</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Scope</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">pins the identity of the ref under test, so the diff is cut against the right base (a PR stays a PR; a fork's head can literally be named</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`main`), and offers worktree isolation via</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-worktree`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">when testing someone else's ref, so your checkout is never disturbed.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Serve</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">is hands-off by design: detect the port (explicit flag, then project instructions, then</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`package.json`, then</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`.env`, then 3000), reuse a running server or start one, poll until it accepts connections. It does not stop to ask permission to start a dev server.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Everything is resumable.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The matrix (the scenario checklist phase 2 produces) lives twice: as a live task list in the session, and as a report document on disk at</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`docs/dogfood-reports/<date>-<branch>-dogfood.md`, created the moment the matrix exists and updated after every scenario and every fix. Kill the session mid-run and the report is the checkpoint a later run (or a teammate) resumes from.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-dogfood`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">is also deliberately an orchestrator, not a soloist: root-causing a weird failure delegates to</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-debug`, commits go through</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-commit`, reusable lessons go to</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-compound`.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">3. Flows before matrix: the email rule</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The most common way automated QA lies to you is by testing pages instead of journeys. Every page renders; the feature is still broken, because the breakage lives between the pages.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">So dogfood forbids jumping to a checklist. Phase 2 first maps every user-visible change as an explicit flow: entry point, each action, every branch (validation error, empty state, permission denied), every side effect, and the true end state. Only then does the matrix get derived, by walking each flow and turning every node and branch into scenarios.</span>\n\n```excalidraw\n{\"id\":\"reply-email-flow\",\"formatVersion\":1,\"description\":\"The email rule: the flow map carries the journey past the send to its true destination\",\"height\":560,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el48\",\"type\":\"rectangle\",\"x\":330,\"y\":10,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":48,\"versionNonce\":48},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el49\",\"type\":\"text\",\"x\":385.78,\"y\":22.875,\"width\":128.44,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":49,\"versionNonce\":49,\"text\":\"user opens /threads\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"user opens /threads\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el50\",\"type\":\"rectangle\",\"x\":330,\"y\":80,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":50,\"versionNonce\":50},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el51\",\"type\":\"text\",\"x\":409.44,\"y\":92.875,\"width\":81.12,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":51,\"versionNonce\":51,\"text\":\"clicks Reply\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"clicks Reply\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el52\",\"type\":\"diamond\",\"x\":340,\"y\":150,\"width\":220,\"height\":64,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":52,\"versionNonce\":52},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el53\",\"type\":\"text\",\"x\":412.82,\"y\":173.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":53,\"versionNonce\":53,\"text\":\"form valid?\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"form valid?\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el54\",\"type\":\"rectangle\",\"x\":40,\"y\":160,\"width\":230,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":54,\"versionNonce\":54},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el55\",\"type\":\"text\",\"x\":77.25999999999999,\"y\":173.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":55,\"versionNonce\":55,\"text\":\"inline validation error\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"inline validation error\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el56\",\"type\":\"rectangle\",\"x\":330,\"y\":244,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":56,\"versionNonce\":56},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el57\",\"type\":\"text\",\"x\":412.82,\"y\":256.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":57,\"versionNonce\":57,\"text\":\"reply saved\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"reply saved\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el58\",\"type\":\"rectangle\",\"x\":90,\"y\":316,\"width\":250,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":58,\"versionNonce\":58},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el59\",\"type\":\"text\",\"x\":137.26,\"y\":329.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":59,\"versionNonce\":59,\"text\":\"UI scrolls to new reply\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"UI scrolls to new reply\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el60\",\"type\":\"rectangle\",\"x\":520,\"y\":316,\"width\":300,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":60,\"versionNonce\":60},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el61\",\"type\":\"text\",\"x\":582.12,\"y\":329.875,\"width\":175.76000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":61,\"versionNonce\":61,\"text\":\"email sent to participants\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"email sent to participants\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el62\",\"type\":\"rectangle\",\"x\":520,\"y\":390,\"width\":300,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":62,\"versionNonce\":62},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el63\",\"type\":\"text\",\"x\":578.74,\"y\":402.875,\"width\":182.52,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":63,\"versionNonce\":63,\"text\":\"recipient clicks email link\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"recipient clicks email link\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el64\",\"type\":\"diamond\",\"x\":490,\"y\":462,\"width\":360,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":64,\"versionNonce\":64},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el65\",\"type\":\"text\",\"x\":601.36,\"y\":482,\"width\":137.28,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":65,\"versionNonce\":65,\"text\":\"RIGHT thread, scrolled\\nto the RIGHT reply?\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"RIGHT thread, scrolled\\nto the RIGHT reply?\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el66\",\"type\":\"arrow\",\"x\":450,\"y\":52,\"width\":0,\"height\":28,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":66,\"versionNonce\":66,\"points\":[[0,0],[0,28]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el67\",\"type\":\"arrow\",\"x\":450,\"y\":122,\"width\":0,\"height\":28,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":67,\"versionNonce\":67,\"points\":[[0,0],[0,28]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el68\",\"type\":\"arrow\",\"x\":340,\"y\":182,\"width\":70,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":68,\"versionNonce\":68,\"points\":[[0,0],[-70,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el69\",\"type\":\"text\",\"x\":293.76,\"y\":157.5,\"width\":12.48,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":69,\"versionNonce\":69,\"text\":\"no\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"no\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el70\",\"type\":\"arrow\",\"x\":450,\"y\":214,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":70,\"versionNonce\":70,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el71\",\"type\":\"text\",\"x\":460.64,\"y\":220.5,\"width\":18.72,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":71,\"versionNonce\":71,\"text\":\"yes\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"yes\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el72\",\"type\":\"arrow\",\"x\":390,\"y\":286,\"width\":175,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":72,\"versionNonce\":72,\"points\":[[0,0],[-175,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el73\",\"type\":\"arrow\",\"x\":510,\"y\":286,\"width\":160,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":73,\"versionNonce\":73,\"points\":[[0,0],[160,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el74\",\"type\":\"arrow\",\"x\":670,\"y\":360,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":74,\"versionNonce\":74,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el75\",\"type\":\"arrow\",\"x\":670,\"y\":432,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":75,\"versionNonce\":75,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The canonical example is the email rule, aimed at exactly the wrong-thread email from the opening: \"an email sends\" is not a pass. Right recipient? Does the click-through land on the right thread and scroll to the right message? Does the content read sensibly? The flow map must carry the journey past the send.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The matrix then covers both halves of quality, per the skill's test-matrix taxonomy: functional checks (forms validate, links go where they claim, data round-trips,</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`agent-browser errors`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">stays clean, permission boundaries hold), the edge, error, and empty states, and experiential checks, which need a different kind of judge.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">4. Two judges: does it work, and does it feel right</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Functional truth comes from the browser. Experiential truth needs eyes, and this is where the first kind of persona enters: the</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">product persona</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">. Phase 1 looks for who the product is actually for (`STRATEGY.md`'s \"Who it's for\",</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`VISION.md`, persona docs) and captures the one to three primary personas and what each cares about. If none exist, it infers one from the product and the diff, and says so in the report; the disclosure is the mitigation for judging against your own guess. No persona at all is worse: that is how you get software that works and pleases nobody.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Every scenario then gets judged twice: once as a tester driving the browser, once as each persona re-reading the same run. The second pass is a change of eyes, not a second drive. The persona walk hunts</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">paper cuts</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">: friction too small to fail a functional test but real enough to degrade the experience. A confusing label. An extra click. A jump the eye doesn't expect. Copy that doesn't match how that persona thinks. Each paper cut gets recorded with who feels it and how badly.</span>\n\n```excalidraw\n{\"id\":\"quality-quadrant\",\"formatVersion\":1,\"description\":\"Two dimensions, four outcomes: functional pass and experiential smoothness are judged separately\",\"height\":437,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el76\",\"type\":\"arrow\",\"x\":450,\"y\":380,\"width\":0,\"height\":330,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":76,\"versionNonce\":152728043,\"points\":[[0,0],[0,-330]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a0\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el77\",\"type\":\"arrow\",\"x\":80,\"y\":210,\"width\":740,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":77,\"versionNonce\":24000069,\"points\":[[0,0],[740,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a1\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el78\",\"type\":\"text\",\"x\":412.82,\"y\":21.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":78,\"versionNonce\":1013644427,\"text\":\"feels right\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"feels right\",\"lineHeight\":1.25,\"index\":\"a2\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el79\",\"type\":\"text\",\"x\":843.1,\"y\":219.875,\"width\":33.800000000000004,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":79,\"versionNonce\":1362699685,\"text\":\"works\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"works\",\"lineHeight\":1.25,\"index\":\"a3\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el80\",\"type\":\"rectangle\",\"x\":500,\"y\":70,\"width\":280,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":80,\"versionNonce\":1452356395,\"index\":\"a4\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el81\",\"type\":\"text\",\"x\":589.04,\"y\":82.5,\"width\":101.92,\"height\":35,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":81,\"versionNonce\":2091854085,\"text\":\"Pass + smooth:\\nship it\",\"fontSize\":14,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":14,\"originalText\":\"Pass + smooth:\\nship it\",\"lineHeight\":1.25,\"index\":\"a5\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el82\",\"type\":\"rectangle\",\"x\":500,\"y\":260,\"width\":280,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":82,\"versionNonce\":1207408075,\"index\":\"a6\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el83\",\"type\":\"text\",\"x\":531.84,\"y\":278.75,\"width\":216.32,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":83,\"versionNonce\":88981605,\"text\":\"Pass + paper cuts:\\nlog them all, fix the sharp ones\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Pass + paper cuts:\\nlog them all, fix the sharp ones\",\"lineHeight\":1.25,\"index\":\"a7\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el84\",\"type\":\"rectangle\",\"x\":120,\"y\":70,\"width\":280,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":84,\"versionNonce\":263758955,\"index\":\"a8\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el85\",\"type\":\"text\",\"x\":183.56,\"y\":82.5,\"width\":152.88,\"height\":35,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":85,\"versionNonce\":1625451461,\"text\":\"Fails but looks nice:\\nfix loop\",\"fontSize\":14,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":14,\"originalText\":\"Fails but looks nice:\\nfix loop\",\"lineHeight\":1.25,\"index\":\"a9\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el86\",\"type\":\"rectangle\",\"x\":120,\"y\":260,\"width\":280,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":86,\"versionNonce\":1704910603,\"index\":\"aA\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el87\",\"type\":\"text\",\"x\":178.88,\"y\":278.75,\"width\":162.24,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":87,\"versionNonce\":1871358757,\"text\":\"Fails and feels wrong:\\nfix loop, maybe escalate\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Fails and feels wrong:\\nfix loop, maybe escalate\",\"lineHeight\":1.25,\"index\":\"aB\",\"roundness\":null,\"containerId\":null,\"autoResize\":true}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\",\"theme\":\"light\",\"gridSize\":20,\"gridStep\":5,\"gridModeEnabled\":false,\"objectsSnapModeEnabled\":false,\"zenModeEnabled\":false,\"scrollX\":-56,\"scrollY\":2.3238874345549903,\"zoom\":{\"value\":0.904249}},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Quality is not a boolean, and the routing rule has teeth: a scenario can be functionally</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Pass`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">and still carry paper cuts, and a</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">sharp</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">paper cut, one severe enough to fix now, enters the fix loop exactly like a failure.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Note where each verdict comes from, though. The functional one is an instrument reading; the browser does not care what the agent hoped. The experiential one comes from the same agent, in the same session, grading a walk it imagined. Two judges, one head.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">5. The fix loop and its governor</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">When something fails, the naive autonomous move is to fix everything. The dangerous autonomous move is also to fix everything. Dogfood's fix loop has a governor:</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">judge the size of the fix before touching code.</span>**\n\n```excalidraw\n{\"id\":\"fix-governor\",\"formatVersion\":1,\"description\":\"The governor: judge the size of the fix before touching code; escalate what is not yours to decide\",\"height\":477,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el88\",\"type\":\"rectangle\",\"x\":300,\"y\":10,\"width\":300,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":88,\"versionNonce\":1995728901,\"index\":\"a0\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el89\",\"type\":\"text\",\"x\":335.08,\"y\":24.875,\"width\":229.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":89,\"versionNonce\":1860814539,\"text\":\"scenario fails, or sharp paper cut\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"scenario fails, or sharp paper cut\",\"lineHeight\":1.25,\"index\":\"a1\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el90\",\"type\":\"diamond\",\"x\":290,\"y\":90,\"width\":320,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":90,\"versionNonce\":580067173,\"index\":\"a2\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el91\",\"type\":\"text\",\"x\":378.24,\"y\":110,\"width\":143.52,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":91,\"versionNonce\":1530705259,\"text\":\"small, well-understood,\\nlow-risk?\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"small, well-understood,\\nlow-risk?\",\"lineHeight\":1.25,\"index\":\"a3\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el92\",\"type\":\"rectangle\",\"x\":60,\"y\":200,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":92,\"versionNonce\":203680453,\"index\":\"a4\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el93\",\"type\":\"text\",\"x\":131.36,\"y\":211,\"width\":137.28,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":93,\"versionNonce\":679006219,\"text\":\"investigate root cause\\n(ce-debug if murky)\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"investigate root cause\\n(ce-debug if murky)\",\"lineHeight\":1.25,\"index\":\"a5\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el94\",\"type\":\"arrow\",\"x\":200,\"y\":252,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":94,\"versionNonce\":1413761573,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a6\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el95\",\"type\":\"rectangle\",\"x\":60,\"y\":274,\"width\":280,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":95,\"versionNonce\":949524139,\"index\":\"a7\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el96\",\"type\":\"text\",\"x\":159.44,\"y\":286.5,\"width\":81.12,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":96,\"versionNonce\":736214405,\"text\":\"apply the fix\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"apply the fix\",\"lineHeight\":1.25,\"index\":\"a8\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el97\",\"type\":\"arrow\",\"x\":200,\"y\":314,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":97,\"versionNonce\":1246136651,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a9\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el98\",\"type\":\"rectangle\",\"x\":60,\"y\":336,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":98,\"versionNonce\":1245299941,\"index\":\"aA\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el99\",\"type\":\"text\",\"x\":128.24,\"y\":347,\"width\":143.52,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":99,\"versionNonce\":1658660843,\"text\":\"regression test:\\nred before, green after\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"regression test:\\nred before, green after\",\"lineHeight\":1.25,\"index\":\"aB\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el100\",\"type\":\"arrow\",\"x\":200,\"y\":388,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":100,\"versionNonce\":584704069,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aC\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el101\",\"type\":\"rectangle\",\"x\":60,\"y\":410,\"width\":280,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":101,\"versionNonce\":2020012683,\"index\":\"aD\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el102\",\"type\":\"text\",\"x\":128.24,\"y\":422.5,\"width\":143.52,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":102,\"versionNonce\":1537183653,\"text\":\"commit: one logical fix\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"commit: one logical fix\",\"lineHeight\":1.25,\"index\":\"aE\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el103\",\"type\":\"arrow\",\"x\":200,\"y\":450,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":103,\"versionNonce\":1537108267,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aF\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el104\",\"type\":\"rectangle\",\"x\":60,\"y\":472,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":104,\"versionNonce\":45634309,\"index\":\"aG\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el105\",\"type\":\"text\",\"x\":140.72,\"y\":483,\"width\":118.56,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":105,\"versionNonce\":1642990539,\"text\":\"re-run scenario\\n+ adjacent journeys\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"re-run scenario\\n+ adjacent journeys\",\"lineHeight\":1.25,\"index\":\"aH\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el106\",\"type\":\"text\",\"x\":0,\"y\":0,\"width\":0.52,\"height\":1.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":106,\"versionNonce\":77703781,\"text\":\" \",\"fontSize\":1,\"fontFamily\":1,\"textAlign\":\"left\",\"verticalAlign\":\"top\",\"baseline\":1,\"originalText\":\" \",\"lineHeight\":1.25,\"index\":\"aI\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el107\",\"type\":\"rectangle\",\"x\":540,\"y\":210,\"width\":300,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":107,\"versionNonce\":1332763243,\"index\":\"aJ\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el108\",\"type\":\"text\",\"x\":577.68,\"y\":226,\"width\":224.64000000000001,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":108,\"versionNonce\":1646859717,\"text\":\"record what's broken,\\noptions + trade-offs, recommendation\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"record what's broken,\\noptions + trade-offs, recommendation\",\"lineHeight\":1.25,\"index\":\"aK\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el109\",\"type\":\"rectangle\",\"x\":540,\"y\":310,\"width\":300,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":109,\"versionNonce\":15717643,\"index\":\"aL\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el110\",\"type\":\"text\",\"x\":612.26,\"y\":324.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":110,\"versionNonce\":644617509,\"text\":\"Blocked: human decision\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Blocked: human decision\",\"lineHeight\":1.25,\"index\":\"aM\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el111\",\"type\":\"arrow\",\"x\":330,\"y\":160,\"width\":130,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":111,\"versionNonce\":1441201067,\"points\":[[0,0],[-130,40]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aN\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el112\",\"type\":\"text\",\"x\":220.64,\"y\":164.5,\"width\":18.72,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":112,\"versionNonce\":483928197,\"text\":\"yes\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"yes\",\"lineHeight\":1.25,\"index\":\"aO\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el113\",\"type\":\"arrow\",\"x\":570,\"y\":160,\"width\":120,\"height\":50,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":113,\"versionNonce\":1518358091,\"points\":[[0,0],[120,50]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aP\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el114\",\"type\":\"text\",\"x\":663.76,\"y\":170.5,\"width\":12.48,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":114,\"versionNonce\":1193988069,\"text\":\"no\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"no\",\"lineHeight\":1.25,\"index\":\"aQ\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el115\",\"type\":\"arrow\",\"x\":690,\"y\":272,\"width\":0,\"height\":38,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":115,\"versionNonce\":831933675,\"points\":[[0,0],[0,38]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aR\",\"roundness\":null}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\",\"theme\":\"light\",\"gridSize\":20,\"gridStep\":5,\"gridModeEnabled\":false,\"objectsSnapModeEnabled\":false,\"zenModeEnabled\":false,\"scrollX\":24,\"scrollY\":-119.55317915173518,\"zoom\":{\"value\":0.86036}},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Auto-fix territory is narrow on purpose: a clear bug, an obvious correct fix, a few files, no schema or architecture or product trade-off. Everything else gets escalated, not attempted; the report's \"Decisions for a human\" section receives what's broken, the options with trade-offs, and a recommendation.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The auto-fix path pays for its autonomy up front:</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Every fix ships with a regression test designed to fail before and pass after.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">When a test is genuinely meaningless (a copy tweak, a spacing fix), the report must say why, and a documented browser-replay stands in. Hollow tests invented to satisfy the step are explicitly banned.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">One logical fix per commit</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">, so the history reads as a sequence of provable claims.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Re-run the scenario, then re-test adjacent journeys.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Fixes regress neighbors; the loop assumes so.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Two states are terminal for the loop because they wait on people:</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Blocked (human decision)`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">from the governor, and</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Blocked (needs human verify)`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">from external legs the browser can't drive alone (OAuth, real email delivery, payments). The second is the email rule hitting its own wall: the flow's decisive legs, real delivery and the real inbox click-through, live outside localhost reality (dev server, dev data, dev email adapter), and the loop verifies the branch, not production. A Blocked row there is the point; the alternative is a pass the browser never saw.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">One caveat, made once: this is the design contract, not a post-mortem. The skill orders the red run but does not archive it; the trail records that red was claimed, not a capture of it.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The exit gate: before declaring the branch ready, run the whole automated suite.</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">A green matrix with a red suite is not \"ready.\"</span>**\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Red blocks even when the red looks flaky; the gate is conservative by design. Ready, stated affirmatively: a green matrix, a green suite, a report carrying a commit and a test for every fix, and a \"Decisions for a human\" section that is empty or explicitly handed off. All of it is slower than a smoke test. That is the trade.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">6. The persona strategy: seeded specialists, not standing agents</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">By the end of the fix loop, one head has done everything: mapped the flows, driven the browser, written the fixes, declared them fixed. The second kind of persona is architectural, and it is the plugin's answer to that concentration: the same pattern that powers every CE skill that fans out work,</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">specialist prompt assets</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">. The plugin ships zero standalone agents. When a skill needs a specialist (a reviewer lens, a research scout, a profiler), it keeps a persona file inside its own directory (`references/agents/`,</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`references/personas/`) and seeds a</span> *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">generic</span>* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">subagent with that file's contents at dispatch time.</span>\n\n```excalidraw\n{\"id\":\"persona-dispatch\",\"formatVersion\":1,\"description\":\"Specialist prompt assets: persona files seed generic subagents at dispatch time; no standing agents\",\"height\":400,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el116\",\"type\":\"rectangle\",\"x\":30,\"y\":150,\"width\":230,\"height\":80,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":116,\"versionNonce\":116},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el117\",\"type\":\"text\",\"x\":67.25999999999999,\"y\":165.625,\"width\":155.48000000000002,\"height\":48.75,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":117,\"versionNonce\":117,\"text\":\"orchestrating skill\\n(SKILL.md owns dispatch\\npolicy + model tiers)\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"orchestrating skill\\n(SKILL.md owns dispatch\\npolicy + model tiers)\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el118\",\"type\":\"rectangle\",\"x\":590,\"y\":40,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":118,\"versionNonce\":118},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el119\",\"type\":\"text\",\"x\":644.52,\"y\":56,\"width\":180.96,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":119,\"versionNonce\":119,\"text\":\"generic subagent seeded as\\nsecurity lens [session model]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nsecurity lens [session model]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el120\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":105,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":120,\"versionNonce\":120,\"points\":[[0,0],[325,-105]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el121\",\"type\":\"arrow\",\"x\":590,\"y\":85,\"width\":322,\"height\":108,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":121,\"versionNonce\":121,\"points\":[[0,0],[-322,108]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el122\",\"type\":\"rectangle\",\"x\":590,\"y\":160,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":122,\"versionNonce\":122},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el123\",\"type\":\"text\",\"x\":638.28,\"y\":176,\"width\":193.44,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":123,\"versionNonce\":123,\"text\":\"generic subagent seeded as\\nmaintainability lens [mid tier]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nmaintainability lens [mid tier]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el124\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":124,\"versionNonce\":124,\"points\":[[0,0],[325,15]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el125\",\"type\":\"arrow\",\"x\":590,\"y\":205,\"width\":322,\"height\":12,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":125,\"versionNonce\":125,\"points\":[[0,0],[-322,-12]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el126\",\"type\":\"rectangle\",\"x\":590,\"y\":280,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":126,\"versionNonce\":126},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el127\",\"type\":\"text\",\"x\":653.88,\"y\":296,\"width\":162.24,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":127,\"versionNonce\":127,\"text\":\"generic subagent seeded as\\nrecap scout [cheap tier]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nrecap scout [cheap tier]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el128\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":135,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":128,\"versionNonce\":128,\"points\":[[0,0],[325,135]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el129\",\"type\":\"arrow\",\"x\":590,\"y\":325,\"width\":322,\"height\":132,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":129,\"versionNonce\":129,\"points\":[[0,0],[-322,-132]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el130\",\"type\":\"text\",\"x\":354.48,\"y\":75,\"width\":131.04,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":130,\"versionNonce\":130,\"text\":\"persona file + diff +\\nJSON schema + tier\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"persona file + diff +\\nJSON schema + tier\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el131\",\"type\":\"text\",\"x\":354.48,\"y\":315,\"width\":131.04,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":131,\"versionNonce\":131,\"text\":\"compact JSON findings\\nback to the merge\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"compact JSON findings\\nback to the merge\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Why this shape instead of registered agents:</span>\n\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Choice</span>                                             | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">What it buys</span>                                                                                                                                             |\n| :-------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Persona lives in the skill's own directory</span>         | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Skills stay self-contained; the converter can ship them to any harness as one unit</span>                                                                       |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Generic subagent, seeded at dispatch</span>               | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Each run reads the current persona from disk; no stale registration, no cache surprises (harnesses load registered agents once, at session start)</span>        |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Model tier chosen by the caller, never the persona</span> | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Extraction work runs cheap, judgment work runs on the session model (the same top-tier model the user's session runs on); cost policy lives in one place</span> |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Structured output contract per dispatch</span>            | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Findings merge mechanically: dedup, cross-reviewer promotion, confidence gates</span>                                                                           |\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The deeper principle is</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">independence budgeting</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">. A finding is only as trustworthy as the independence of whoever confirmed it. So the code-review skill's reviewer stack (`ce-code-review`) treats sameness as a defect: the orchestrator's own quick read (the fast pass) is capped at low confidence and can never corroborate anything, because it shares the session model's blind spots, and an agent agreeing with itself is one vote, not two; two personas agreeing promotes a finding one confidence step; per-finding validators get fresh context and no stake in the original claim; and the adversarial pass can shell out to a different model family entirely. Dogfood spends the same budget at the product level, unevenly and on purpose. The browser's independence is physical; it cannot be talked into agreeing. The persona walk's is simulated; it is a second lens, not a second judge, the same mind re-reading its own run. Dogfood buys independence in its instruments, not in its judgments; for the judgments, it buys a trail someone else can check.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">7. One loop, every altitude</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Dogfood is the most visible verification loop because it drives a browser, but it is one rung on a ladder that the pipeline climbs for every feature:</span>\n\n```excalidraw\n{\"id\":\"altitude-ladder\",\"formatVersion\":1,\"description\":\"One grammar at every altitude: claim plus independent proof, from a single assertion to CI on the PR\",\"height\":480,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el132\",\"type\":\"rectangle\",\"x\":170,\"y\":399,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":132,\"versionNonce\":132},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el133\",\"type\":\"text\",\"x\":344.79999999999995,\"y\":413.875,\"width\":270.40000000000003,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":133,\"versionNonce\":133,\"text\":\"regression test: red before, green after\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"regression test: red before, green after\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el134\",\"type\":\"rectangle\",\"x\":170,\"y\":335,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":134,\"versionNonce\":134},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el135\",\"type\":\"text\",\"x\":358.32,\"y\":349.875,\"width\":243.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":135,\"versionNonce\":135,\"text\":\"full suite: the neighbors still pass\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"full suite: the neighbors still pass\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el136\",\"type\":\"rectangle\",\"x\":170,\"y\":271,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":136,\"versionNonce\":136},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el137\",\"type\":\"text\",\"x\":307.62,\"y\":285.875,\"width\":344.76,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":137,\"versionNonce\":137,\"text\":\"independent review: quoted lines + fresh validators\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"independent review: quoted lines + fresh validators\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el138\",\"type\":\"rectangle\",\"x\":170,\"y\":207,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":138,\"versionNonce\":138},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el139\",\"type\":\"text\",\"x\":287.34000000000003,\"y\":221.875,\"width\":385.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":139,\"versionNonce\":139,\"text\":\"behavioral evals: fresh-context dispatch for prose skills\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"behavioral evals: fresh-context dispatch for prose skills\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el140\",\"type\":\"rectangle\",\"x\":170,\"y\":143,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":140,\"versionNonce\":140},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el141\",\"type\":\"text\",\"x\":331.28,\"y\":157.875,\"width\":297.44,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":141,\"versionNonce\":141,\"text\":\"dogfood: a real browser walks the real flows\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"dogfood: a real browser walks the real flows\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el142\",\"type\":\"rectangle\",\"x\":170,\"y\":79,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":142,\"versionNonce\":142},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el143\",\"type\":\"text\",\"x\":321.14,\"y\":93.875,\"width\":317.72,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":143,\"versionNonce\":143,\"text\":\"CI watch: lfg repairs, capped at three attempts\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"CI watch: lfg repairs, capped at three attempts\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el144\",\"type\":\"rectangle\",\"x\":170,\"y\":15,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":144,\"versionNonce\":144},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el145\",\"type\":\"text\",\"x\":317.76,\"y\":29.875,\"width\":324.48,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":145,\"versionNonce\":145,\"text\":\"residuals made durable: PR body, issues, reports\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"residuals made durable: PR body, issues, reports\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el146\",\"type\":\"arrow\",\"x\":110,\"y\":415,\"width\":0,\"height\":390,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":146,\"versionNonce\":146,\"points\":[[0,0],[0,-390]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el147\",\"type\":\"text\",\"x\":42.96,\"y\":211.875,\"width\":54.08,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":147,\"versionNonce\":147,\"text\":\"altitude\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"altitude\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Each rung has the same grammar, claim plus independent proof, at a different altitude. The bottom two rungs are section 5's story; the others each add something new:</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-work`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">refuses to call a unit complete without</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">verification evidence</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">, captured by whoever witnessed it: the red observed before a fix cannot be reconstructed from the diff afterward.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-code-review`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">refuses high confidence without a quoted line (`file:line`) that makes the finding true; survivors still face fresh-context validators.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Prose skills (the skills themselves are markdown) get behavioral evals: fresh subagents run the scenario against the current text, because a skill invoked in its authoring session tests the stale cached copy.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`lfg`, the end-to-end ship pipeline, watches CI and repairs, but stops after three attempts and writes the residue into the PR body instead of looping forever.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">And whatever no loop could close becomes a durable residual: a</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Blocked (human decision)`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">row, a filed issue, a report section. The loop never closes silently on an open question; it closes by making the question impossible to lose.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Autonomous verification is not agents being confident; it is agents being</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">auditable</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">, down to the commit SHA per scenario in a dogfood report. The loop is closed when the proof is durable, and a human can walk in at any point, read the trail, and take over exactly where their judgment is needed.</span>\n\n***\n\n*<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Grounded in the live repo, July 2026:</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`skills/ce-dogfood/`</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">(workflow, fix-loop governor, report template), its test-matrix taxonomy, the specialist-prompt-asset conventions in</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`AGENTS.md`, and the review and evidence contracts of</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-code-review`,</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-work`, and</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`lfg`.</span>*\n","plain_text":"Closing the Verification Loop How a branch proves itself ready: browser reality, persona eyes, and fixes that carry their own evidence. 1. The loop that must close Agents made building cheap. The cost moved: the expensive question is no longer \"can we ship this?\" but \"does anyone actually know it works?\" A branch that compiles, passes review, and merges can still greet its first real user with a form that validates the wrong field and an email that links to the wrong thread. The verification loop is the distance between a claim and its proof: Sketch: The verification loop: the distance between a claim and its proof — change lands, claim: it works, exercise it as a user, observe what happens, fix what's broken, prove it with a test, re-verify, ready, the loop: a failed re-verify goes back to exercising Most teams close this loop with humans: someone clicks around before the demo, someone eyeballs staging. That works until agents outrun the humans, which is what the agents were for. Compound engineering (CE, a plugin of skills for coding agents like Claude Code) answers that the loop itself is work an agent can do, end to end, with people pulled in where judgment belongs to them, and where the tooling genuinely cannot reach. The skill that embodies this is /ce-dogfood, and the rest of this piece walks through how it closes the loop, and the persona strategy that gives it eyes. 2. Dogfood in one pass /ce-dogfood acts as a QA engineer who dogfoods the active branch: understand every change, test every change in a real browser as a user would, and fix what breaks, autonomously, until the branch is ready. Two constraints define it: Diff-scoped, never whole-app. It tests what this branch changed versus the trunk, and it refuses to run on the trunk itself: no diff, nothing to dogfood. A real browser, one tool. All automation goes through the agent-browser CLI, a shell tool that drives the browser directly (a Rust binary, not a wrapper, not an MCP server): no exceptions. The workflow is seven phases with a loop in the middle: Sketch: Seven phases with a loop in the middle: the fix loop feeds back into execution — 0 Scope, 1 Analyze, 2 Flows + matrix, 3 Serve, 4 Execute, 5 Fix loop, 6 Report, every fix re-runs its scenario A few phase details that carry the philosophy: Scope pins the identity of the ref under test, so the diff is cut against the right base (a PR stays a PR; a fork's head can literally be named main ), and offers worktree isolation via ce-worktree when testing someone else's ref, so your checkout is never disturbed. Serve is hands-off by design: detect the port (explicit flag, then project instructions, then package.json, then.env, then 3000), reuse a running server or start one, poll until it accepts connections. It does not stop to ask permission to start a dev server. Everything is resumable. The matrix (the scenario checklist phase 2 produces) lives twice: as a live task list in the session, and as a report document on disk at docs/dogfood-reports/<date>-<branch>-dogfood.md, created the moment the matrix exists and updated after every scenario and every fix. Kill the session mid-run and the report is the checkpoint a later run (or a teammate) resumes from. ce-dogfood is also deliberately an orchestrator, not a soloist: root-causing a weird failure delegates to ce-debug, commits go through ce-commit, reusable lessons go to ce-compound. 3. Flows before matrix: the email rule The most common way automated QA lies to you is by testing pages instead of journeys. Every page renders; the feature is still broken, because the breakage lives between the pages. So dogfood forbids jumping to a checklist. Phase 2 first maps every user-visible change as an explicit flow: entry point, each action, every branch (validation error, empty state, permission denied), every side effect, and the true end state. Only then does the matrix get derived, by walking each flow and turning every node and branch into scenarios. Sketch: The email rule: the flow map carries the journey past the send to its true destination — user opens /threads, clicks Reply, form valid?, inline validation error, reply saved, UI scrolls to new reply, email sent to participants, recipient clicks email link, RIGHT thread, scrolled to the RIGHT reply?, no, yes The canonical example is the email rule, aimed at exactly the wrong-thread email from the opening: \"an email sends\" is not a pass. Right recipient? Does the click-through land on the right thread and scroll to the right message? Does the content read sensibly? The flow map must carry the journey past the send. The matrix then covers both halves of quality, per the skill's test-matrix taxonomy: functional checks (forms validate, links go where they claim, data round-trips, agent-browser errors stays clean, permission boundaries hold), the edge, error, and empty states, and experiential checks, which need a different kind of judge. 4. Two judges: does it work, and does it feel right Functional truth comes from the browser. Experiential truth needs eyes, and this is where the first kind of persona enters: the product persona. Phase 1 looks for who the product is actually for ( STRATEGY.md 's \"Who it's for\", VISION.md, persona docs) and captures the one to three primary personas and what each cares about. If none exist, it infers one from the product and the diff, and says so in the report; the disclosure is the mitigation for judging against your own guess. No persona at all is worse: that is how you get software that works and pleases nobody. Every scenario then gets judged twice: once as a tester driving the browser, once as each persona re-reading the same run. The second pass is a change of eyes, not a second drive. The persona walk hunts paper cuts: friction too small to fail a functional test but real enough to degrade the experience. A confusing label. An extra click. A jump the eye doesn't expect. Copy that doesn't match how that persona thinks. Each paper cut gets recorded with who feels it and how badly. Sketch: Two dimensions, four outcomes: functional pass and experiential smoothness are judged separately — feels right, works, Pass + smooth: ship it, Pass + paper cuts: log them all, fix the sharp ones, Fails but looks nice: fix loop, Fails and feels wrong: fix loop, maybe escalate Quality is not a boolean, and the routing rule has teeth: a scenario can be functionally Pass and still carry paper cuts, and a sharp paper cut, one severe enough to fix now, enters the fix loop exactly like a failure. Note where each verdict comes from, though. The functional one is an instrument reading; the browser does not care what the agent hoped. The experiential one comes from the same agent, in the same session, grading a walk it imagined. Two judges, one head. 5. The fix loop and its governor When something fails, the naive autonomous move is to fix everything. The dangerous autonomous move is also to fix everything. Dogfood's fix loop has a governor: judge the size of the fix before touching code. Sketch: The governor: judge the size of the fix before touching code; escalate what is not yours to decide — scenario fails, or sharp paper cut, small, well-understood, low-risk?, investigate root cause (ce-debug if murky), apply the fix, regression test: red before, green after, commit: one logical fix, re-run scenario + adjacent journeys, record what's broken, options + trade-offs, recommendation, Blocked: human decision, yes, no Auto-fix territory is narrow on purpose: a clear bug, an obvious correct fix, a few files, no schema or architecture or product trade-off. Everything else gets escalated, not attempted; the report's \"Decisions for a human\" section receives what's broken, the options with trade-offs, and a recommendation. The auto-fix path pays for its autonomy up front: Every fix ships with a regression test designed to fail before and pass after. When a test is genuinely meaningless (a copy tweak, a spacing fix), the report must say why, and a documented browser-replay stands in. Hollow tests invented to satisfy the step are explicitly banned. One logical fix per commit, so the history reads as a sequence of provable claims. Re-run the scenario, then re-test adjacent journeys. Fixes regress neighbors; the loop assumes so. Two states are terminal for the loop because they wait on people: Blocked (human decision) from the governor, and Blocked (needs human verify) from external legs the browser can't drive alone (OAuth, real email delivery, payments). The second is the email rule hitting its own wall: the flow's decisive legs, real delivery and the real inbox click-through, live outside localhost reality (dev server, dev data, dev email adapter), and the loop verifies the branch, not production. A Blocked row there is the point; the alternative is a pass the browser never saw. One caveat, made once: this is the design contract, not a post-mortem. The skill orders the red run but does not archive it; the trail records that red was claimed, not a capture of it. The exit gate: before declaring the branch ready, run the whole automated suite. A green matrix with a red suite is not \"ready.\" Red blocks even when the red looks flaky; the gate is conservative by design. Ready, stated affirmatively: a green matrix, a green suite, a report carrying a commit and a test for every fix, and a \"Decisions for a human\" section that is empty or explicitly handed off. All of it is slower than a smoke test. That is the trade. 6. The persona strategy: seeded specialists, not standing agents By the end of the fix loop, one head has done everything: mapped the flows, driven the browser, written the fixes, declared them fixed. The second kind of persona is architectural, and it is the plugin's answer to that concentration: the same pattern that powers every CE skill that fans out work, specialist prompt assets. The plugin ships zero standalone agents. When a skill needs a specialist (a reviewer lens, a research scout, a profiler), it keeps a persona file inside its own directory ( references/agents/, references/personas/ ) and seeds a generic subagent with that file's contents at dispatch time. Sketch: Specialist prompt assets: persona files seed generic subagents at dispatch time; no standing agents — orchestrating skill (SKILL.md owns dispatch policy + model tiers), generic subagent seeded as security lens [session model], generic subagent seeded as maintainability lens [mid tier], generic subagent seeded as recap scout [cheap tier], persona file + diff + JSON schema + tier, compact JSON findings back to the merge Why this shape instead of registered agents: Choice What it buys Persona lives in the skill's own directory Skills stay self-contained; the converter can ship them to any harness as one unit Generic subagent, seeded at dispatch Each run reads the current persona from disk; no stale registration, no cache surprises (harnesses load registered agents once, at session start) Model tier chosen by the caller, never the persona Extraction work runs cheap, judgment work runs on the session model (the same top-tier model the user's session runs on); cost policy lives in one place Structured output contract per dispatch Findings merge mechanically: dedup, cross-reviewer promotion, confidence gates The deeper principle is independence budgeting. A finding is only as trustworthy as the independence of whoever confirmed it. So the code-review skill's reviewer stack ( ce-code-review ) treats sameness as a defect: the orchestrator's own quick read (the fast pass) is capped at low confidence and can never corroborate anything, because it shares the session model's blind spots, and an agent agreeing with itself is one vote, not two; two personas agreeing promotes a finding one confidence step; per-finding validators get fresh context and no stake in the original claim; and the adversarial pass can shell out to a different model family entirely. Dogfood spends the same budget at the product level, unevenly and on purpose. The browser's independence is physical; it cannot be talked into agreeing. The persona walk's is simulated; it is a second lens, not a second judge, the same mind re-reading its own run. Dogfood buys independence in its instruments, not in its judgments; for the judgments, it buys a trail someone else can check. 7. One loop, every altitude Dogfood is the most visible verification loop because it drives a browser, but it is one rung on a ladder that the pipeline climbs for every feature: Sketch: One grammar at every altitude: claim plus independent proof, from a single assertion to CI on the PR — regression test: red before, green after, full suite: the neighbors still pass, independent review: quoted lines + fresh validators, behavioral evals: fresh-context dispatch for prose skills, dogfood: a real browser walks the real flows, CI watch: lfg repairs, capped at three attempts, residuals made durable: PR body, issues, reports, altitude Each rung has the same grammar, claim plus independent proof, at a different altitude. The bottom two rungs are section 5's story; the others each add something new: ce-work refuses to call a unit complete without verification evidence, captured by whoever witnessed it: the red observed before a fix cannot be reconstructed from the diff afterward. ce-code-review refuses high confidence without a quoted line ( file:line ) that makes the finding true; survivors still face fresh-context validators. Prose skills (the skills themselves are markdown) get behavioral evals: fresh subagents run the scenario against the current text, because a skill invoked in its authoring session tests the stale cached copy. lfg, the end-to-end ship pipeline, watches CI and repairs, but stops after three attempts and writes the residue into the PR body instead of looping forever. And whatever no loop could close becomes a durable residual: a Blocked (human decision) row, a filed issue, a report section. The loop never closes silently on an open question; it closes by making the question impossible to lose. Autonomous verification is not agents being confident; it is agents being auditable, down to the commit SHA per scenario in a dogfood report. The loop is closed when the proof is durable, and a human can walk in at any point, read the trail, and take over exactly where their judgment is needed. Grounded in the live repo, July 2026: skills/ce-dogfood/ (workflow, fix-loop governor, report template), its test-matrix taxonomy, the specialist-prompt-asset conventions in AGENTS.md, and the review and evidence contracts of ce-code-review, ce-work, and lfg.","ownership":{"claimed":true,"claimable":false,"owner_name":"Kieran Klaassen","link_access":"view","editing_locked":true,"can_write":false,"can_comment":false},"provenance":{"seed_author_kind":"agent","seed_author_name":"Claude Code","spans":[{"kind":"ai","author":"Claude Code","state":"pending","chars":12183,"text":"Closing the Verification LoopHow a branch proves itself ready: browser reality, persona eyes, and fixes that carry their own evidence.1. The loop that must closeAgents made building cheap. The cost moved: the expensive question is no longer \"can we ship this?\" but \"does anyone ac"}],"summary":{"total":12183,"human_pct":0,"ai_pct":100,"unreviewed_pct":100}},"pending_suggestions":[],"open_comments":[],"agents_present":[],"recent_activity":[{"id":1162,"actor_name":"x-miner-rss","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-11T10:00:50Z"},{"id":1110,"actor_name":"Codex","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-07T21:14:00Z"},{"id":1107,"actor_name":"Hermes-Ingest","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-07T18:10:16Z"},{"id":1106,"actor_name":"Codex","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-07T14:48:49Z"},{"id":1104,"actor_name":"Grok (validator fleet)","actor_kind":"agent","action":"joined","detail":"announced presence","created_at":"2026-07-07T08:31:52Z"},{"id":1101,"actor_name":"Codex","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-07T05:23:42Z"},{"id":1100,"actor_name":"Kimi","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-06T21:48:52Z"},{"id":1099,"actor_name":"Alyana","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-06T20:21:58Z"},{"id":1098,"actor_name":"Alyana","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-06T19:32:52Z"},{"id":1097,"actor_name":"Alyana","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-06T19:27:34Z"},{"id":1096,"actor_name":"Gus-Scout","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-06T15:21:13Z"},{"id":1073,"actor_name":"Sisyphus (Hermes)","actor_kind":"agent","action":"joined","detail":"announced presence","created_at":"2026-07-05T18:41:30Z"},{"id":1072,"actor_name":"Hermes Intake Bot","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-05T18:06:49Z"},{"id":1071,"actor_name":"Sisyphus","actor_kind":"agent","action":"joined","detail":"announced presence","created_at":"2026-07-05T16:10:22Z"},{"id":1070,"actor_name":"explorer","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-05T03:30:31Z"},{"id":1068,"actor_name":"Codex","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-05T01:43:00Z"},{"id":1067,"actor_name":"Hermes","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-04T22:53:43Z"},{"id":1064,"actor_name":"Kieran Klaassen","actor_kind":"human","action":"changed_link_access","detail":"set link access to view","created_at":"2026-07-04T21:38:00Z"},{"id":1062,"actor_name":"Thinkroom CLI","actor_kind":"agent","action":"joined","detail":"joined via the agent API","created_at":"2026-07-04T21:34:03Z"},{"id":1061,"actor_name":"Claude Code","actor_kind":"agent","action":"updated_document","detail":"Closing the Verification Loop","created_at":"2026-07-04T21:33:33Z"},{"id":1059,"actor_name":"Claude Code","actor_kind":"agent","action":"created_document","detail":"Closing the Verification Loop","created_at":"2026-07-04T21:21:55Z"}],"content_contract":{"version":2,"content_format":"markdown","immutable":true,"canonical_source_field":"content","rendered_text_field":"plain_text","suggestion_body_format":"markdown","editor_model":"Humans edit a rendered document. ProseMirror JSON and Yjs updates are internal and are not accepted by the HTTP API.","normalization":{"response_field":"normalized","warning_field":"warning","meaning":"When normalized is true, unsupported or unsafe source was removed or rewritten, or an excalidraw block was not recognized as a valid sketch and was kept as a code block. The warning field explains what happened."},"sketches":{"purpose":"Inline Excalidraw sketches remain editable in the human UI and expose text semantics to agents.","markdown_source":{"format":"A fenced \"excalidraw\" code block whose body is a single JSON object (the SketchData wrapper). The fence language must be exactly \"excalidraw\".","schema":{"formatVersion":"(required) integer, must equal 1.","id":"(required) string matching /^[a-zA-Z0-9_-]{1,100}$/. Enforced by the editor AND the create-time signal — a missing or invalid id keeps the fence a code block (see enforcement).","description":"(optional) human summary up to 500 characters; surfaced in plain_text.","height":"(optional) integer reserved render height in pixels, default 448; a finite value outside 180-1200 is clamped into that range by the editor and the server preview, so an out-of-range height still renders (clamped) rather than breaking (see enforcement).","scene":{"type":"(required) must equal \"excalidraw\".","version":"(required) integer greater than 0 (the Excalidraw scene version, e.g. 2).","elements":"(required) array of Excalidraw elements. Each element type must be one of rectangle, diamond, ellipse, line, arrow, freedraw, text, frame; any strokeColor/backgroundColor must match /^(?:transparent|#[0-9a-f]{3,8})$/i; fileId and link are not allowed.","appState":"(optional) object; viewBackgroundColor must match the safe-color pattern. Only an allowlist of keys (theme, grid/zoom/scroll settings, viewBackgroundColor) is retained.","files":"(required) must be exactly {} - embedded bitmap files are not supported."}},"example":"```excalidraw\n{\"id\":\"flow1\",\"formatVersion\":1,\"description\":\"Human and AI agent edit the same Yjs room\",\"height\":260,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"id\":\"r1\",\"type\":\"rectangle\",\"x\":100,\"y\":100,\"width\":220,\"height\":90,\"angle\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d3f9d8\",\"fillStyle\":\"solid\",\"strokeWidth\":2,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"groupIds\":[],\"frameId\":null,\"roundness\":{\"type\":3},\"seed\":1,\"version\":1,\"versionNonce\":1,\"isDeleted\":false,\"boundElements\":null,\"updated\":1,\"link\":null,\"locked\":false},{\"id\":\"t1\",\"type\":\"text\",\"x\":130,\"y\":132,\"width\":60,\"height\":25,\"angle\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"fillStyle\":\"solid\",\"strokeWidth\":2,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"groupIds\":[],\"frameId\":null,\"roundness\":null,\"seed\":1,\"version\":1,\"versionNonce\":1,\"isDeleted\":false,\"boundElements\":null,\"updated\":1,\"link\":null,\"locked\":false,\"text\":\"Human\",\"fontSize\":20,\"fontFamily\":1,\"textAlign\":\"left\",\"verticalAlign\":\"top\",\"containerId\":null,\"originalText\":\"Human\",\"lineHeight\":1.25,\"baseline\":18}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n","recognition":"A recognized sketch renders in plain_text as \"Sketch: <description> — <labels>\". If plain_text instead echoes the raw scene JSON, the fence was not recognized; the create response then reports normalized: true with a warning.","enforcement":"The create-time signal (normalized/warning) applies the same recognition rule as the editor: scene shape AND id. A fence with a missing/invalid id is kept as a code block everywhere and the create response reports normalized: true with a warning. Height is different: it is not a recognition criterion, and an out-of-range or non-positive height is clamped into 180-1200 (matching the server preview) so the sketch renders rather than breaking. The stored content keeps the height you submitted; the editor and preview render the clamped value.","reference":"Excalidraw scene/element format and drawing semantics: https://docs.excalidraw.com/docs/codebase/json-schema"},"html_source":"A trusted figure[data-thinkroom-sketch] snapshot; external HTML cannot set reserved sketch attributes.","rendered_context":"plain_text emits the sketch description and text labels instead of raw scene JSON.","canonical":"The Excalidraw scene is canonical; SVG is generated in the browser for preview, copy, and download.","supported_elements":["rectangle","diamond","ellipse","line","arrow","freedraw","text","frame"],"limits":{"scene_max_bytes":524288,"description_max_characters":500,"elements_max":500,"points_max":20000,"embedded_images":false}}},"api":{"upload_image":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/uploads","headers":{"X-Agent-Name":"required"},"success_status":201,"request":{"content_type":"multipart/form-data","field":"file","identity_header":"X-Agent-Name","allowed_content_types":["image/png","image/jpeg","image/webp"],"max_bytes":3145728,"max_dimension":6000,"max_pixels":20000000},"processing":"Images are decoded and re-encoded; metadata and unsupported payloads are removed.","returns":{"src":"Canonical same-origin image path to embed in document source","html":"Ready-to-embed <img> element","filename":"Stored filename","content_type":"Detected image MIME type","byte_size":"Stored byte size after safe re-encoding","width":"Decoded width in pixels","height":"Decoded height in pixels","expires_at":"Deadline to save HTML that references src"},"purpose":"Upload an app-hosted image before referencing it in HTML. Requires X-Agent-Name. Use the returned src exactly; remote and data: image URLs are removed."},"state":{"method":"GET","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis","headers":{"X-Agent-Name":"recommended"},"success_status":200,"purpose":"Full live document state: immutable content format, canonical source, rendered plain text, provenance spans, pending suggestions, open comments, presence, activity."},"propose_suggestion":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis/suggestions","headers":{"X-Agent-Name":"required","Content-Type":"application/json"},"success_status":201,"rate_limits":{"by":"source_ip","response_status":429,"burst":{"requests":60,"within_seconds":600},"daily":{"requests":500,"within_seconds":86400}},"body":{"body":"(required) Markdown you propose","intent":"(optional) one-line summary","anchor_text":"(optional) unique rendered text to insert after; missing anchors append on acceptance","replaces":"(optional) unique rendered text your proposal replaces; missing or ambiguous targets cannot apply"},"purpose":"Propose an edit in the document's content_format. It appears live in every open editor as a pending suggestion attributed to you. A human accepts or rejects it; accepted text keeps your provenance."},"comment":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis/comments","headers":{"X-Agent-Name":"required","Content-Type":"application/json"},"success_status":201,"rate_limits":{"by":"source_ip","response_status":429,"burst":{"requests":60,"within_seconds":600},"daily":{"requests":500,"within_seconds":86400}},"body":{"body":"(required) what you want to say","anchor_text":"(optional) the doc text you're commenting on"},"purpose":"Leave a comment anchored to a text selection."},"resolve_comment":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis/comments/:id/resolve","headers":{"X-Agent-Name":"required"},"success_status":200,"rate_limits":{"by":"source_ip","response_status":429,"burst":{"requests":60,"within_seconds":600},"daily":{"requests":500,"within_seconds":86400}},"purpose":"Close a comment thread (the id comes from open_comments). Attributed to you in the activity feed."},"announce_presence":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis/presence","headers":{"X-Agent-Name":"required","Content-Type":"application/json"},"success_status":200,"body":{"status":"active | done","location":"(optional) doc text you're working near"},"purpose":"Show up in the document's presence area with a labeled cursor while you work. Send status: done when finished."},"poll_events":{"method":"GET","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis/events/pending","headers":{"X-Agent-Name":"required"},"success_status":200,"purpose":"Activity since your last ack (humans accepting your suggestions, comments, etc.)."},"ack_events":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis/events/ack","headers":{"X-Agent-Name":"required","Content-Type":"application/json"},"success_status":204,"body":{"last_event_id":"(required) the ack_with value from poll_events"},"purpose":"Advance your event cursor."},"create_document":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/docs","headers":{"X-Agent-Name":"recommended","Content-Type":"application/json"},"success_status":201,"rate_limits":{"by":"source_ip","response_status":429,"burst":{"requests":20,"within_seconds":600},"daily":{"requests":100,"within_seconds":86400}},"body":{"title":"(optional)","format":"markdown | html","content":"(required with explicit format; canonical source)"},"limits":{"content_max_bytes":2097152},"content_contracts":{"markdown":{"version":2,"content_format":"markdown","immutable":true,"canonical_source_field":"content","rendered_text_field":"plain_text","suggestion_body_format":"markdown","editor_model":"Humans edit a rendered document. ProseMirror JSON and Yjs updates are internal and are not accepted by the HTTP API.","normalization":{"response_field":"normalized","warning_field":"warning","meaning":"When normalized is true, unsupported or unsafe source was removed or rewritten, or an excalidraw block was not recognized as a valid sketch and was kept as a code block. The warning field explains what happened."},"sketches":{"purpose":"Inline Excalidraw sketches remain editable in the human UI and expose text semantics to agents.","markdown_source":{"format":"A fenced \"excalidraw\" code block whose body is a single JSON object (the SketchData wrapper). The fence language must be exactly \"excalidraw\".","schema":{"formatVersion":"(required) integer, must equal 1.","id":"(required) string matching /^[a-zA-Z0-9_-]{1,100}$/. Enforced by the editor AND the create-time signal — a missing or invalid id keeps the fence a code block (see enforcement).","description":"(optional) human summary up to 500 characters; surfaced in plain_text.","height":"(optional) integer reserved render height in pixels, default 448; a finite value outside 180-1200 is clamped into that range by the editor and the server preview, so an out-of-range height still renders (clamped) rather than breaking (see enforcement).","scene":{"type":"(required) must equal \"excalidraw\".","version":"(required) integer greater than 0 (the Excalidraw scene version, e.g. 2).","elements":"(required) array of Excalidraw elements. Each element type must be one of rectangle, diamond, ellipse, line, arrow, freedraw, text, frame; any strokeColor/backgroundColor must match /^(?:transparent|#[0-9a-f]{3,8})$/i; fileId and link are not allowed.","appState":"(optional) object; viewBackgroundColor must match the safe-color pattern. Only an allowlist of keys (theme, grid/zoom/scroll settings, viewBackgroundColor) is retained.","files":"(required) must be exactly {} - embedded bitmap files are not supported."}},"example":"```excalidraw\n{\"id\":\"flow1\",\"formatVersion\":1,\"description\":\"Human and AI agent edit the same Yjs room\",\"height\":260,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"id\":\"r1\",\"type\":\"rectangle\",\"x\":100,\"y\":100,\"width\":220,\"height\":90,\"angle\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d3f9d8\",\"fillStyle\":\"solid\",\"strokeWidth\":2,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"groupIds\":[],\"frameId\":null,\"roundness\":{\"type\":3},\"seed\":1,\"version\":1,\"versionNonce\":1,\"isDeleted\":false,\"boundElements\":null,\"updated\":1,\"link\":null,\"locked\":false},{\"id\":\"t1\",\"type\":\"text\",\"x\":130,\"y\":132,\"width\":60,\"height\":25,\"angle\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"fillStyle\":\"solid\",\"strokeWidth\":2,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"groupIds\":[],\"frameId\":null,\"roundness\":null,\"seed\":1,\"version\":1,\"versionNonce\":1,\"isDeleted\":false,\"boundElements\":null,\"updated\":1,\"link\":null,\"locked\":false,\"text\":\"Human\",\"fontSize\":20,\"fontFamily\":1,\"textAlign\":\"left\",\"verticalAlign\":\"top\",\"containerId\":null,\"originalText\":\"Human\",\"lineHeight\":1.25,\"baseline\":18}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n","recognition":"A recognized sketch renders in plain_text as \"Sketch: <description> — <labels>\". If plain_text instead echoes the raw scene JSON, the fence was not recognized; the create response then reports normalized: true with a warning.","enforcement":"The create-time signal (normalized/warning) applies the same recognition rule as the editor: scene shape AND id. A fence with a missing/invalid id is kept as a code block everywhere and the create response reports normalized: true with a warning. Height is different: it is not a recognition criterion, and an out-of-range or non-positive height is clamped into 180-1200 (matching the server preview) so the sketch renders rather than breaking. The stored content keeps the height you submitted; the editor and preview render the clamped value.","reference":"Excalidraw scene/element format and drawing semantics: https://docs.excalidraw.com/docs/codebase/json-schema"},"html_source":"A trusted figure[data-thinkroom-sketch] snapshot; external HTML cannot set reserved sketch attributes.","rendered_context":"plain_text emits the sketch description and text labels instead of raw scene JSON.","canonical":"The Excalidraw scene is canonical; SVG is generated in the browser for preview, copy, and download.","supported_elements":["rectangle","diamond","ellipse","line","arrow","freedraw","text","frame"],"limits":{"scene_max_bytes":524288,"description_max_characters":500,"elements_max":500,"points_max":20000,"embedded_images":false}}},"html":{"version":2,"content_format":"html","immutable":true,"canonical_source_field":"content","rendered_text_field":"plain_text","suggestion_body_format":"html","editor_model":"Humans edit a rendered document. ProseMirror JSON and Yjs updates are internal and are not accepted by the HTTP API.","normalization":{"response_field":"normalized","warning_field":"warning","meaning":"When normalized is true, unsupported or unsafe source was removed or rewritten, or an excalidraw block was not recognized as a valid sketch and was kept as a code block. The warning field explains what happened."},"sketches":{"purpose":"Inline Excalidraw sketches remain editable in the human UI and expose text semantics to agents.","markdown_source":{"format":"A fenced \"excalidraw\" code block whose body is a single JSON object (the SketchData wrapper). The fence language must be exactly \"excalidraw\".","schema":{"formatVersion":"(required) integer, must equal 1.","id":"(required) string matching /^[a-zA-Z0-9_-]{1,100}$/. Enforced by the editor AND the create-time signal — a missing or invalid id keeps the fence a code block (see enforcement).","description":"(optional) human summary up to 500 characters; surfaced in plain_text.","height":"(optional) integer reserved render height in pixels, default 448; a finite value outside 180-1200 is clamped into that range by the editor and the server preview, so an out-of-range height still renders (clamped) rather than breaking (see enforcement).","scene":{"type":"(required) must equal \"excalidraw\".","version":"(required) integer greater than 0 (the Excalidraw scene version, e.g. 2).","elements":"(required) array of Excalidraw elements. Each element type must be one of rectangle, diamond, ellipse, line, arrow, freedraw, text, frame; any strokeColor/backgroundColor must match /^(?:transparent|#[0-9a-f]{3,8})$/i; fileId and link are not allowed.","appState":"(optional) object; viewBackgroundColor must match the safe-color pattern. Only an allowlist of keys (theme, grid/zoom/scroll settings, viewBackgroundColor) is retained.","files":"(required) must be exactly {} - embedded bitmap files are not supported."}},"example":"```excalidraw\n{\"id\":\"flow1\",\"formatVersion\":1,\"description\":\"Human and AI agent edit the same Yjs room\",\"height\":260,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"id\":\"r1\",\"type\":\"rectangle\",\"x\":100,\"y\":100,\"width\":220,\"height\":90,\"angle\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d3f9d8\",\"fillStyle\":\"solid\",\"strokeWidth\":2,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"groupIds\":[],\"frameId\":null,\"roundness\":{\"type\":3},\"seed\":1,\"version\":1,\"versionNonce\":1,\"isDeleted\":false,\"boundElements\":null,\"updated\":1,\"link\":null,\"locked\":false},{\"id\":\"t1\",\"type\":\"text\",\"x\":130,\"y\":132,\"width\":60,\"height\":25,\"angle\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"fillStyle\":\"solid\",\"strokeWidth\":2,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"groupIds\":[],\"frameId\":null,\"roundness\":null,\"seed\":1,\"version\":1,\"versionNonce\":1,\"isDeleted\":false,\"boundElements\":null,\"updated\":1,\"link\":null,\"locked\":false,\"text\":\"Human\",\"fontSize\":20,\"fontFamily\":1,\"textAlign\":\"left\",\"verticalAlign\":\"top\",\"containerId\":null,\"originalText\":\"Human\",\"lineHeight\":1.25,\"baseline\":18}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n","recognition":"A recognized sketch renders in plain_text as \"Sketch: <description> — <labels>\". If plain_text instead echoes the raw scene JSON, the fence was not recognized; the create response then reports normalized: true with a warning.","enforcement":"The create-time signal (normalized/warning) applies the same recognition rule as the editor: scene shape AND id. A fence with a missing/invalid id is kept as a code block everywhere and the create response reports normalized: true with a warning. Height is different: it is not a recognition criterion, and an out-of-range or non-positive height is clamped into 180-1200 (matching the server preview) so the sketch renders rather than breaking. The stored content keeps the height you submitted; the editor and preview render the clamped value.","reference":"Excalidraw scene/element format and drawing semantics: https://docs.excalidraw.com/docs/codebase/json-schema"},"html_source":"A trusted figure[data-thinkroom-sketch] snapshot; external HTML cannot set reserved sketch attributes.","rendered_context":"plain_text emits the sketch description and text labels instead of raw scene JSON.","canonical":"The Excalidraw scene is canonical; SVG is generated in the browser for preview, copy, and download.","supported_elements":["rectangle","diamond","ellipse","line","arrow","freedraw","text","frame"],"limits":{"scene_max_bytes":524288,"description_max_characters":500,"elements_max":500,"points_max":20000,"embedded_images":false}},"html":{"scope":"Semantic body HTML, not a lossless full-page HTML/CSS document.","allowed_elements":["p","h1","h2","h3","h4","h5","h6","blockquote","pre","code","br","hr","ul","ol","li","strong","b","em","i","s","del","a","img","table","thead","tbody","tr","th","td","span","ins","figure","figcaption"],"dropped_with_content":["script","style","iframe","object","embed","template","svg","math"],"attributes":{"supported":["href","title","src","alt","start","style","colspan","rowspan","colwidth","data-language","data-item-type","data-label","data-list-type","data-spread","data-checked","data-is-header"],"reserved":"Thinkroom provenance, suggestion, and sketch data attributes may appear in trusted snapshots; external source cannot set them."},"css":{"supported":"Only text-align: left|center|right on th and td.","removed":["<style> blocks","class and id styling hooks","all other inline style declarations"],"guidance":"Use semantic elements and Thinkroom's editor styling. Do not depend on custom colors, spacing, fonts, grids, or page-level layout."},"images":{"upload":{"method":"POST","url":"https://thinkroom.kieranklaassen.com/api/uploads","headers":{"X-Agent-Name":"required"},"success_status":201,"request":{"content_type":"multipart/form-data","field":"file","identity_header":"X-Agent-Name","allowed_content_types":["image/png","image/jpeg","image/webp"],"max_bytes":3145728,"max_dimension":6000,"max_pixels":20000000},"processing":"Images are decoded and re-encoded; metadata and unsupported payloads are removed."},"embed":"<img src=\"RETURNED_SRC\" alt=\"Descriptive text\">","guidance":"Use the exact src returned by api.upload_image. It expires unless referenced by saved HTML within one hour.","accepted_sources":"Validated same-origin Active Storage blob, representation, or disk paths. Agents should only generate the blob src returned by the upload endpoint.","removed_sources":["https:// remote images","protocol-relative URLs","data: URLs","arbitrary same-origin paths","URLs with query strings or fragments"]}}}},"returns":{"slug":"Document identifier","share_url":"Browser/editor URL","content_format":"Immutable markdown or html","content":"Canonical source","plain_text":"Rendered text","normalized":"Whether source changed during normalization","content_contract":"Machine-readable source, HTML, CSS, and image rules"},"purpose":"Create a new shared document. X-Agent-Name is recommended for seed attribution but creation also permits an unattributed request."},"update_document":{"method":"PATCH","url":"https://thinkroom.kieranklaassen.com/api/docs/njrS5TJhis","headers":{"X-Agent-Name":"recommended","Content-Type":"application/json"},"success_status":200,"conflict_status":409,"rate_limits":{"by":"source_ip","response_status":429,"burst":{"requests":60,"within_seconds":600},"daily":{"requests":500,"within_seconds":86400}},"body":{"title":"(optional) replacement title","format":"(optional) must equal this document's immutable content_format","content":"(optional) replacement canonical Markdown source; send title and/or content"},"limits":{"content_max_bytes":2097152},"returns":{"slug":"Unchanged identifier","share_url":"Unchanged share URL","content":"Updated canonical source","plain_text":"Updated rendered text","normalized":"Whether source changed during normalization","warning":"Normalization detail","auto_rejected_suggestions":"Present only on a live-document replacement: how many pending suggestions were auto-rejected because the text they targeted no longer exists in the new content"},"purpose":"Revise the document you created in place — same slug, same share URL. An authenticated owner (CLI Bearer token) can replace their own document even after live editing has started; non-owners receive 409 and should propose a suggestion instead. Replacing a live document auto-rejects pending suggestions whose targeted text no longer exists in the new content."}},"notes":["Identity: send an X-Agent-Name header on every request. Suggestions, comments, presence, and event writes require it; document creation permits no header but then records no agent seed attribution. The name flows through suggestion attribution, provenance, presence, and activity.","Source contract: content_format is immutable. content is canonical Markdown source; plain_text is the rendered text for context and matching. Humans edit a rendered document in the browser — never send ProseMirror JSON or Yjs data through the HTTP API.","All your writes go through the same provenance/suggestion machinery as the human UI. There is no side channel: you propose, humans review.","Text you contribute is marked kind=ai provenance (with your agent name as author) and tinted in the editor until a human advances its review state (pending -> reviewed -> endorsed).","Documents you create with source content are pre-attributed as 100% unreviewed AI prose. Before any editor session opens the doc, the provenance summary is derived from the seed source and replaced by the first editor snapshot.","Updating: PATCH /api/docs/:slug rewrites your document in place — same slug, same share URL — so revisions stay at the link you already shared. An authenticated owner (a Bearer token from `thinkroom login`) can replace their own live document; non-owners get a 409 and should propose suggestions instead.","Connected editors see your suggestions, comments, and presence live over WebSocket — no refresh needed on their side.","Reading state: use plain_text as working context and content when source fidelity matters. This document expects Markdown suggestion bodies. State may lag if no human has the document open — the Yjs CRDT state is always authoritative.","Sketches: inline Excalidraw scenes appear in content and are summarized in plain_text from their human description and text labels. Treat the scene as editable source and SVG as a derived browser export; embedded bitmap files are not supported. To author one in Markdown, embed a fenced excalidraw block following content_contract.sketches.markdown_source (formatVersion, id, description, height, and a full excalidraw scene with type/version/appState/files) — copy its example to start. A recognized sketch shows in plain_text as \"Sketch: <description> — <labels>\"; raw scene JSON in plain_text means the block was not recognized, and the create response then returns normalized: true with a warning.","Suggestion targeting: use a unique quote from plain_text for replaces or anchor_text; source-formatted quotes are parsed too. A missing or ambiguous replaces target stays pending and changes nothing. A missing anchor_text falls back to appending if a human accepts it.","Tracked changes use <ins data-suggestion-id> / <del data-suggestion-id> in the source snapshot. They are human-typed suggestions pending review, not your proposals, and are not resolvable through this API.","Review is human-gated by design: accepting/rejecting suggestions and advancing review states happen in the editor, by humans. Your job is to propose well.","Ownership: a human can claim a document in the browser; claimed docs show an owner in this payload (claimable: false means nobody can ever claim it, e.g. the demo). Claiming is browser-only (cookie-based) — agents cannot claim, so don't POST to any claim path. When a human claims, a claimed_document activity appears in the event feed with their name.","Link access: link_access is edit, comment, or view. can_write permits document updates and suggestions; can_comment permits comments. Comment links allow comments but not suggestions or document writes, and View links allow reads/presence/events only. editing_locked remains a compatibility field and is true for both comment and view. Disallowed writes return 423. Agents cannot change this setting.","A claimed document can be deleted by its owner, after which every endpoint here returns 404. Treat a 404 on a previously-working slug as deletion, not an outage to retry.","Document creation, suggestion, and comment writes are rate-limited per source IP. A 429 response means retry later; inspect each endpoint's rate_limits field for the current windows."],"markdown":"# <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Closing the Verification Loop</span>\n\n*<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">How a branch proves itself ready: browser reality, persona eyes, and fixes that carry their own evidence.</span>*\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">1. The loop that must close</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Agents made building cheap. The cost moved: the expensive question is no longer \"can we ship this?\" but \"does anyone actually know it works?\" A branch that compiles, passes review, and merges can still greet its first real user with a form that validates the wrong field and an email that links to the wrong thread.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The verification loop is the distance between a claim and its proof:</span>\n\n```excalidraw\n{\"id\":\"verification-loop\",\"formatVersion\":1,\"description\":\"The verification loop: the distance between a claim and its proof\",\"height\":280,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el1\",\"type\":\"rectangle\",\"x\":10,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":1,\"versionNonce\":1},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el2\",\"type\":\"text\",\"x\":39.28,\"y\":91,\"width\":37.44,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":2,\"versionNonce\":2,\"text\":\"change\\nlands\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"change\\nlands\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el3\",\"type\":\"rectangle\",\"x\":120,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":3,\"versionNonce\":3},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el4\",\"type\":\"text\",\"x\":143.04,\"y\":91,\"width\":49.92,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":4,\"versionNonce\":4,\"text\":\"claim:\\nit works\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"claim:\\nit works\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el5\",\"type\":\"arrow\",\"x\":106,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":5,\"versionNonce\":5,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el6\",\"type\":\"rectangle\",\"x\":230,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":6,\"versionNonce\":6},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el7\",\"type\":\"text\",\"x\":243.68,\"y\":91,\"width\":68.64,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":7,\"versionNonce\":7,\"text\":\"exercise it\\nas a user\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"exercise it\\nas a user\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el8\",\"type\":\"arrow\",\"x\":216,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":8,\"versionNonce\":8,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el9\",\"type\":\"rectangle\",\"x\":340,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":9,\"versionNonce\":9},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el10\",\"type\":\"text\",\"x\":350.56,\"y\":91,\"width\":74.88,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":10,\"versionNonce\":10,\"text\":\"observe what\\nhappens\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"observe what\\nhappens\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el11\",\"type\":\"arrow\",\"x\":326,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":11,\"versionNonce\":11,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el12\",\"type\":\"rectangle\",\"x\":450,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":12,\"versionNonce\":12},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el13\",\"type\":\"text\",\"x\":466.8,\"y\":91,\"width\":62.400000000000006,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":13,\"versionNonce\":13,\"text\":\"fix what's\\nbroken\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"fix what's\\nbroken\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el14\",\"type\":\"arrow\",\"x\":436,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":14,\"versionNonce\":14,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el15\",\"type\":\"rectangle\",\"x\":560,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":15,\"versionNonce\":15},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el16\",\"type\":\"text\",\"x\":573.68,\"y\":91,\"width\":68.64,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":16,\"versionNonce\":16,\"text\":\"prove it\\nwith a test\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"prove it\\nwith a test\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el17\",\"type\":\"arrow\",\"x\":546,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":17,\"versionNonce\":17,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el18\",\"type\":\"rectangle\",\"x\":670,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":18,\"versionNonce\":18},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el19\",\"type\":\"text\",\"x\":689.92,\"y\":98.5,\"width\":56.160000000000004,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":19,\"versionNonce\":19,\"text\":\"re-verify\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"re-verify\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el20\",\"type\":\"arrow\",\"x\":656,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":20,\"versionNonce\":20,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el21\",\"type\":\"rectangle\",\"x\":780,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":21,\"versionNonce\":21},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el22\",\"type\":\"text\",\"x\":812.4,\"y\":98.5,\"width\":31.200000000000003,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":22,\"versionNonce\":22,\"text\":\"ready\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"ready\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el23\",\"type\":\"arrow\",\"x\":766,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":23,\"versionNonce\":23,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el24\",\"type\":\"arrow\",\"x\":700,\"y\":80,\"width\":434,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":24,\"versionNonce\":24,\"points\":[[0,0],[0,-30],[-434,-30],[-434,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el25\",\"type\":\"text\",\"x\":304.24,\"y\":11.875,\"width\":351.52000000000004,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":25,\"versionNonce\":25,\"text\":\"the loop: a failed re-verify goes back to exercising\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"the loop: a failed re-verify goes back to exercising\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Most teams close this loop with humans: someone clicks around before the demo, someone eyeballs staging. That works until agents outrun the humans, which is what the agents were for. Compound engineering (CE, a plugin of skills for coding agents like Claude Code) answers that the loop itself is work an agent can do, end to end, with people pulled in where judgment belongs to them, and where the tooling genuinely cannot reach. The skill that embodies this is</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`/ce-dogfood`, and the rest of this piece walks through how it closes the loop, and the persona strategy that gives it eyes.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">2. Dogfood in one pass</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`/ce-dogfood`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">acts as a QA engineer who dogfoods the active branch: understand every change, test every change in a real browser as a user would, and fix what breaks, autonomously, until the branch is ready. Two constraints define it:</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Diff-scoped, never whole-app.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">It tests what this branch changed versus the trunk, and it refuses to run on the trunk itself: no diff, nothing to dogfood.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">A real browser, one tool.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">All automation goes through the</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`agent-browser`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">CLI, a shell tool that drives the browser directly (a Rust binary, not a wrapper, not an MCP server): no exceptions.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The workflow is seven phases with a loop in the middle:</span>\n\n```excalidraw\n{\"id\":\"dogfood-phases\",\"formatVersion\":1,\"description\":\"Seven phases with a loop in the middle: the fix loop feeds back into execution\",\"height\":260,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el26\",\"type\":\"rectangle\",\"x\":10,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":26,\"versionNonce\":26},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el27\",\"type\":\"text\",\"x\":41.34,\"y\":77.875,\"width\":47.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":27,\"versionNonce\":27,\"text\":\"0 Scope\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"0 Scope\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el28\",\"type\":\"rectangle\",\"x\":135,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":28,\"versionNonce\":28},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el29\",\"type\":\"text\",\"x\":159.57999999999998,\"y\":77.875,\"width\":60.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":29,\"versionNonce\":29,\"text\":\"1 Analyze\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"1 Analyze\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el30\",\"type\":\"arrow\",\"x\":120,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":30,\"versionNonce\":30,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el31\",\"type\":\"rectangle\",\"x\":260,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":31,\"versionNonce\":31},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el32\",\"type\":\"text\",\"x\":284.58,\"y\":69.75,\"width\":60.84,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":32,\"versionNonce\":32,\"text\":\"2 Flows +\\nmatrix\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"2 Flows +\\nmatrix\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el33\",\"type\":\"arrow\",\"x\":245,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":33,\"versionNonce\":33,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el34\",\"type\":\"rectangle\",\"x\":385,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":34,\"versionNonce\":34},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el35\",\"type\":\"text\",\"x\":416.34,\"y\":77.875,\"width\":47.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":35,\"versionNonce\":35,\"text\":\"3 Serve\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"3 Serve\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el36\",\"type\":\"arrow\",\"x\":370,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":36,\"versionNonce\":36,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el37\",\"type\":\"rectangle\",\"x\":510,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":37,\"versionNonce\":37},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el38\",\"type\":\"text\",\"x\":534.58,\"y\":77.875,\"width\":60.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":38,\"versionNonce\":38,\"text\":\"4 Execute\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"4 Execute\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el39\",\"type\":\"arrow\",\"x\":495,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":39,\"versionNonce\":39,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el40\",\"type\":\"rectangle\",\"x\":635,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":40,\"versionNonce\":40},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el41\",\"type\":\"text\",\"x\":656.2,\"y\":77.875,\"width\":67.60000000000001,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":41,\"versionNonce\":41,\"text\":\"5 Fix loop\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"5 Fix loop\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el42\",\"type\":\"arrow\",\"x\":620,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":42,\"versionNonce\":42,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el43\",\"type\":\"rectangle\",\"x\":760,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":43,\"versionNonce\":43},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el44\",\"type\":\"text\",\"x\":787.96,\"y\":77.875,\"width\":54.08,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":44,\"versionNonce\":44,\"text\":\"6 Report\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"6 Report\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el45\",\"type\":\"arrow\",\"x\":745,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":45,\"versionNonce\":45,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el46\",\"type\":\"arrow\",\"x\":690,\"y\":112,\"width\":180,\"height\":92,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":46,\"versionNonce\":46,\"points\":[[0,0],[0,46],[-180,46],[-180,-46]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el47\",\"type\":\"text\",\"x\":498.6,\"y\":176.875,\"width\":202.8,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":47,\"versionNonce\":47,\"text\":\"every fix re-runs its scenario\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"every fix re-runs its scenario\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">A few phase details that carry the philosophy:</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Scope</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">pins the identity of the ref under test, so the diff is cut against the right base (a PR stays a PR; a fork's head can literally be named</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`main`), and offers worktree isolation via</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-worktree`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">when testing someone else's ref, so your checkout is never disturbed.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Serve</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">is hands-off by design: detect the port (explicit flag, then project instructions, then</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`package.json`, then</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`.env`, then 3000), reuse a running server or start one, poll until it accepts connections. It does not stop to ask permission to start a dev server.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Everything is resumable.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The matrix (the scenario checklist phase 2 produces) lives twice: as a live task list in the session, and as a report document on disk at</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`docs/dogfood-reports/<date>-<branch>-dogfood.md`, created the moment the matrix exists and updated after every scenario and every fix. Kill the session mid-run and the report is the checkpoint a later run (or a teammate) resumes from.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-dogfood`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">is also deliberately an orchestrator, not a soloist: root-causing a weird failure delegates to</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-debug`, commits go through</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-commit`, reusable lessons go to</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-compound`.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">3. Flows before matrix: the email rule</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The most common way automated QA lies to you is by testing pages instead of journeys. Every page renders; the feature is still broken, because the breakage lives between the pages.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">So dogfood forbids jumping to a checklist. Phase 2 first maps every user-visible change as an explicit flow: entry point, each action, every branch (validation error, empty state, permission denied), every side effect, and the true end state. Only then does the matrix get derived, by walking each flow and turning every node and branch into scenarios.</span>\n\n```excalidraw\n{\"id\":\"reply-email-flow\",\"formatVersion\":1,\"description\":\"The email rule: the flow map carries the journey past the send to its true destination\",\"height\":560,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el48\",\"type\":\"rectangle\",\"x\":330,\"y\":10,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":48,\"versionNonce\":48},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el49\",\"type\":\"text\",\"x\":385.78,\"y\":22.875,\"width\":128.44,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":49,\"versionNonce\":49,\"text\":\"user opens /threads\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"user opens /threads\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el50\",\"type\":\"rectangle\",\"x\":330,\"y\":80,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":50,\"versionNonce\":50},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el51\",\"type\":\"text\",\"x\":409.44,\"y\":92.875,\"width\":81.12,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":51,\"versionNonce\":51,\"text\":\"clicks Reply\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"clicks Reply\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el52\",\"type\":\"diamond\",\"x\":340,\"y\":150,\"width\":220,\"height\":64,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":52,\"versionNonce\":52},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el53\",\"type\":\"text\",\"x\":412.82,\"y\":173.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":53,\"versionNonce\":53,\"text\":\"form valid?\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"form valid?\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el54\",\"type\":\"rectangle\",\"x\":40,\"y\":160,\"width\":230,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":54,\"versionNonce\":54},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el55\",\"type\":\"text\",\"x\":77.25999999999999,\"y\":173.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":55,\"versionNonce\":55,\"text\":\"inline validation error\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"inline validation error\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el56\",\"type\":\"rectangle\",\"x\":330,\"y\":244,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":56,\"versionNonce\":56},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el57\",\"type\":\"text\",\"x\":412.82,\"y\":256.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":57,\"versionNonce\":57,\"text\":\"reply saved\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"reply saved\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el58\",\"type\":\"rectangle\",\"x\":90,\"y\":316,\"width\":250,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":58,\"versionNonce\":58},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el59\",\"type\":\"text\",\"x\":137.26,\"y\":329.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":59,\"versionNonce\":59,\"text\":\"UI scrolls to new reply\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"UI scrolls to new reply\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el60\",\"type\":\"rectangle\",\"x\":520,\"y\":316,\"width\":300,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":60,\"versionNonce\":60},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el61\",\"type\":\"text\",\"x\":582.12,\"y\":329.875,\"width\":175.76000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":61,\"versionNonce\":61,\"text\":\"email sent to participants\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"email sent to participants\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el62\",\"type\":\"rectangle\",\"x\":520,\"y\":390,\"width\":300,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":62,\"versionNonce\":62},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el63\",\"type\":\"text\",\"x\":578.74,\"y\":402.875,\"width\":182.52,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":63,\"versionNonce\":63,\"text\":\"recipient clicks email link\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"recipient clicks email link\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el64\",\"type\":\"diamond\",\"x\":490,\"y\":462,\"width\":360,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":64,\"versionNonce\":64},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el65\",\"type\":\"text\",\"x\":601.36,\"y\":482,\"width\":137.28,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":65,\"versionNonce\":65,\"text\":\"RIGHT thread, scrolled\\nto the RIGHT reply?\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"RIGHT thread, scrolled\\nto the RIGHT reply?\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el66\",\"type\":\"arrow\",\"x\":450,\"y\":52,\"width\":0,\"height\":28,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":66,\"versionNonce\":66,\"points\":[[0,0],[0,28]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el67\",\"type\":\"arrow\",\"x\":450,\"y\":122,\"width\":0,\"height\":28,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":67,\"versionNonce\":67,\"points\":[[0,0],[0,28]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el68\",\"type\":\"arrow\",\"x\":340,\"y\":182,\"width\":70,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":68,\"versionNonce\":68,\"points\":[[0,0],[-70,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el69\",\"type\":\"text\",\"x\":293.76,\"y\":157.5,\"width\":12.48,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":69,\"versionNonce\":69,\"text\":\"no\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"no\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el70\",\"type\":\"arrow\",\"x\":450,\"y\":214,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":70,\"versionNonce\":70,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el71\",\"type\":\"text\",\"x\":460.64,\"y\":220.5,\"width\":18.72,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":71,\"versionNonce\":71,\"text\":\"yes\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"yes\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el72\",\"type\":\"arrow\",\"x\":390,\"y\":286,\"width\":175,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":72,\"versionNonce\":72,\"points\":[[0,0],[-175,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el73\",\"type\":\"arrow\",\"x\":510,\"y\":286,\"width\":160,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":73,\"versionNonce\":73,\"points\":[[0,0],[160,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el74\",\"type\":\"arrow\",\"x\":670,\"y\":360,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":74,\"versionNonce\":74,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el75\",\"type\":\"arrow\",\"x\":670,\"y\":432,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":75,\"versionNonce\":75,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The canonical example is the email rule, aimed at exactly the wrong-thread email from the opening: \"an email sends\" is not a pass. Right recipient? Does the click-through land on the right thread and scroll to the right message? Does the content read sensibly? The flow map must carry the journey past the send.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The matrix then covers both halves of quality, per the skill's test-matrix taxonomy: functional checks (forms validate, links go where they claim, data round-trips,</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`agent-browser errors`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">stays clean, permission boundaries hold), the edge, error, and empty states, and experiential checks, which need a different kind of judge.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">4. Two judges: does it work, and does it feel right</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Functional truth comes from the browser. Experiential truth needs eyes, and this is where the first kind of persona enters: the</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">product persona</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">. Phase 1 looks for who the product is actually for (`STRATEGY.md`'s \"Who it's for\",</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`VISION.md`, persona docs) and captures the one to three primary personas and what each cares about. If none exist, it infers one from the product and the diff, and says so in the report; the disclosure is the mitigation for judging against your own guess. No persona at all is worse: that is how you get software that works and pleases nobody.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Every scenario then gets judged twice: once as a tester driving the browser, once as each persona re-reading the same run. The second pass is a change of eyes, not a second drive. The persona walk hunts</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">paper cuts</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">: friction too small to fail a functional test but real enough to degrade the experience. A confusing label. An extra click. A jump the eye doesn't expect. Copy that doesn't match how that persona thinks. Each paper cut gets recorded with who feels it and how badly.</span>\n\n```excalidraw\n{\"id\":\"quality-quadrant\",\"formatVersion\":1,\"description\":\"Two dimensions, four outcomes: functional pass and experiential smoothness are judged separately\",\"height\":437,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el76\",\"type\":\"arrow\",\"x\":450,\"y\":380,\"width\":0,\"height\":330,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":76,\"versionNonce\":152728043,\"points\":[[0,0],[0,-330]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a0\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el77\",\"type\":\"arrow\",\"x\":80,\"y\":210,\"width\":740,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":77,\"versionNonce\":24000069,\"points\":[[0,0],[740,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a1\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el78\",\"type\":\"text\",\"x\":412.82,\"y\":21.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":78,\"versionNonce\":1013644427,\"text\":\"feels right\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"feels right\",\"lineHeight\":1.25,\"index\":\"a2\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el79\",\"type\":\"text\",\"x\":843.1,\"y\":219.875,\"width\":33.800000000000004,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":79,\"versionNonce\":1362699685,\"text\":\"works\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"works\",\"lineHeight\":1.25,\"index\":\"a3\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el80\",\"type\":\"rectangle\",\"x\":500,\"y\":70,\"width\":280,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":80,\"versionNonce\":1452356395,\"index\":\"a4\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el81\",\"type\":\"text\",\"x\":589.04,\"y\":82.5,\"width\":101.92,\"height\":35,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":81,\"versionNonce\":2091854085,\"text\":\"Pass + smooth:\\nship it\",\"fontSize\":14,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":14,\"originalText\":\"Pass + smooth:\\nship it\",\"lineHeight\":1.25,\"index\":\"a5\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el82\",\"type\":\"rectangle\",\"x\":500,\"y\":260,\"width\":280,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":82,\"versionNonce\":1207408075,\"index\":\"a6\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el83\",\"type\":\"text\",\"x\":531.84,\"y\":278.75,\"width\":216.32,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":83,\"versionNonce\":88981605,\"text\":\"Pass + paper cuts:\\nlog them all, fix the sharp ones\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Pass + paper cuts:\\nlog them all, fix the sharp ones\",\"lineHeight\":1.25,\"index\":\"a7\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el84\",\"type\":\"rectangle\",\"x\":120,\"y\":70,\"width\":280,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":84,\"versionNonce\":263758955,\"index\":\"a8\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el85\",\"type\":\"text\",\"x\":183.56,\"y\":82.5,\"width\":152.88,\"height\":35,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":85,\"versionNonce\":1625451461,\"text\":\"Fails but looks nice:\\nfix loop\",\"fontSize\":14,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":14,\"originalText\":\"Fails but looks nice:\\nfix loop\",\"lineHeight\":1.25,\"index\":\"a9\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el86\",\"type\":\"rectangle\",\"x\":120,\"y\":260,\"width\":280,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":86,\"versionNonce\":1704910603,\"index\":\"aA\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el87\",\"type\":\"text\",\"x\":178.88,\"y\":278.75,\"width\":162.24,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":87,\"versionNonce\":1871358757,\"text\":\"Fails and feels wrong:\\nfix loop, maybe escalate\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Fails and feels wrong:\\nfix loop, maybe escalate\",\"lineHeight\":1.25,\"index\":\"aB\",\"roundness\":null,\"containerId\":null,\"autoResize\":true}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\",\"theme\":\"light\",\"gridSize\":20,\"gridStep\":5,\"gridModeEnabled\":false,\"objectsSnapModeEnabled\":false,\"zenModeEnabled\":false,\"scrollX\":-56,\"scrollY\":2.3238874345549903,\"zoom\":{\"value\":0.904249}},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Quality is not a boolean, and the routing rule has teeth: a scenario can be functionally</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Pass`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">and still carry paper cuts, and a</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">sharp</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">paper cut, one severe enough to fix now, enters the fix loop exactly like a failure.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Note where each verdict comes from, though. The functional one is an instrument reading; the browser does not care what the agent hoped. The experiential one comes from the same agent, in the same session, grading a walk it imagined. Two judges, one head.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">5. The fix loop and its governor</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">When something fails, the naive autonomous move is to fix everything. The dangerous autonomous move is also to fix everything. Dogfood's fix loop has a governor:</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">judge the size of the fix before touching code.</span>**\n\n```excalidraw\n{\"id\":\"fix-governor\",\"formatVersion\":1,\"description\":\"The governor: judge the size of the fix before touching code; escalate what is not yours to decide\",\"height\":477,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el88\",\"type\":\"rectangle\",\"x\":300,\"y\":10,\"width\":300,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":88,\"versionNonce\":1995728901,\"index\":\"a0\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el89\",\"type\":\"text\",\"x\":335.08,\"y\":24.875,\"width\":229.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":89,\"versionNonce\":1860814539,\"text\":\"scenario fails, or sharp paper cut\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"scenario fails, or sharp paper cut\",\"lineHeight\":1.25,\"index\":\"a1\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el90\",\"type\":\"diamond\",\"x\":290,\"y\":90,\"width\":320,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":90,\"versionNonce\":580067173,\"index\":\"a2\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el91\",\"type\":\"text\",\"x\":378.24,\"y\":110,\"width\":143.52,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":91,\"versionNonce\":1530705259,\"text\":\"small, well-understood,\\nlow-risk?\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"small, well-understood,\\nlow-risk?\",\"lineHeight\":1.25,\"index\":\"a3\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el92\",\"type\":\"rectangle\",\"x\":60,\"y\":200,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":92,\"versionNonce\":203680453,\"index\":\"a4\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el93\",\"type\":\"text\",\"x\":131.36,\"y\":211,\"width\":137.28,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":93,\"versionNonce\":679006219,\"text\":\"investigate root cause\\n(ce-debug if murky)\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"investigate root cause\\n(ce-debug if murky)\",\"lineHeight\":1.25,\"index\":\"a5\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el94\",\"type\":\"arrow\",\"x\":200,\"y\":252,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":94,\"versionNonce\":1413761573,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a6\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el95\",\"type\":\"rectangle\",\"x\":60,\"y\":274,\"width\":280,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":95,\"versionNonce\":949524139,\"index\":\"a7\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el96\",\"type\":\"text\",\"x\":159.44,\"y\":286.5,\"width\":81.12,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":96,\"versionNonce\":736214405,\"text\":\"apply the fix\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"apply the fix\",\"lineHeight\":1.25,\"index\":\"a8\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el97\",\"type\":\"arrow\",\"x\":200,\"y\":314,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":97,\"versionNonce\":1246136651,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a9\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el98\",\"type\":\"rectangle\",\"x\":60,\"y\":336,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":98,\"versionNonce\":1245299941,\"index\":\"aA\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el99\",\"type\":\"text\",\"x\":128.24,\"y\":347,\"width\":143.52,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":99,\"versionNonce\":1658660843,\"text\":\"regression test:\\nred before, green after\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"regression test:\\nred before, green after\",\"lineHeight\":1.25,\"index\":\"aB\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el100\",\"type\":\"arrow\",\"x\":200,\"y\":388,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":100,\"versionNonce\":584704069,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aC\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el101\",\"type\":\"rectangle\",\"x\":60,\"y\":410,\"width\":280,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":101,\"versionNonce\":2020012683,\"index\":\"aD\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el102\",\"type\":\"text\",\"x\":128.24,\"y\":422.5,\"width\":143.52,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":102,\"versionNonce\":1537183653,\"text\":\"commit: one logical fix\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"commit: one logical fix\",\"lineHeight\":1.25,\"index\":\"aE\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el103\",\"type\":\"arrow\",\"x\":200,\"y\":450,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":103,\"versionNonce\":1537108267,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aF\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el104\",\"type\":\"rectangle\",\"x\":60,\"y\":472,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":104,\"versionNonce\":45634309,\"index\":\"aG\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el105\",\"type\":\"text\",\"x\":140.72,\"y\":483,\"width\":118.56,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":105,\"versionNonce\":1642990539,\"text\":\"re-run scenario\\n+ adjacent journeys\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"re-run scenario\\n+ adjacent journeys\",\"lineHeight\":1.25,\"index\":\"aH\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el106\",\"type\":\"text\",\"x\":0,\"y\":0,\"width\":0.52,\"height\":1.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":106,\"versionNonce\":77703781,\"text\":\" \",\"fontSize\":1,\"fontFamily\":1,\"textAlign\":\"left\",\"verticalAlign\":\"top\",\"baseline\":1,\"originalText\":\" \",\"lineHeight\":1.25,\"index\":\"aI\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el107\",\"type\":\"rectangle\",\"x\":540,\"y\":210,\"width\":300,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":107,\"versionNonce\":1332763243,\"index\":\"aJ\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el108\",\"type\":\"text\",\"x\":577.68,\"y\":226,\"width\":224.64000000000001,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":108,\"versionNonce\":1646859717,\"text\":\"record what's broken,\\noptions + trade-offs, recommendation\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"record what's broken,\\noptions + trade-offs, recommendation\",\"lineHeight\":1.25,\"index\":\"aK\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el109\",\"type\":\"rectangle\",\"x\":540,\"y\":310,\"width\":300,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":109,\"versionNonce\":15717643,\"index\":\"aL\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el110\",\"type\":\"text\",\"x\":612.26,\"y\":324.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":110,\"versionNonce\":644617509,\"text\":\"Blocked: human decision\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Blocked: human decision\",\"lineHeight\":1.25,\"index\":\"aM\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el111\",\"type\":\"arrow\",\"x\":330,\"y\":160,\"width\":130,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":111,\"versionNonce\":1441201067,\"points\":[[0,0],[-130,40]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aN\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el112\",\"type\":\"text\",\"x\":220.64,\"y\":164.5,\"width\":18.72,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":112,\"versionNonce\":483928197,\"text\":\"yes\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"yes\",\"lineHeight\":1.25,\"index\":\"aO\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el113\",\"type\":\"arrow\",\"x\":570,\"y\":160,\"width\":120,\"height\":50,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":113,\"versionNonce\":1518358091,\"points\":[[0,0],[120,50]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aP\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el114\",\"type\":\"text\",\"x\":663.76,\"y\":170.5,\"width\":12.48,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":114,\"versionNonce\":1193988069,\"text\":\"no\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"no\",\"lineHeight\":1.25,\"index\":\"aQ\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el115\",\"type\":\"arrow\",\"x\":690,\"y\":272,\"width\":0,\"height\":38,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":115,\"versionNonce\":831933675,\"points\":[[0,0],[0,38]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aR\",\"roundness\":null}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\",\"theme\":\"light\",\"gridSize\":20,\"gridStep\":5,\"gridModeEnabled\":false,\"objectsSnapModeEnabled\":false,\"zenModeEnabled\":false,\"scrollX\":24,\"scrollY\":-119.55317915173518,\"zoom\":{\"value\":0.86036}},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Auto-fix territory is narrow on purpose: a clear bug, an obvious correct fix, a few files, no schema or architecture or product trade-off. Everything else gets escalated, not attempted; the report's \"Decisions for a human\" section receives what's broken, the options with trade-offs, and a recommendation.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The auto-fix path pays for its autonomy up front:</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Every fix ships with a regression test designed to fail before and pass after.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">When a test is genuinely meaningless (a copy tweak, a spacing fix), the report must say why, and a documented browser-replay stands in. Hollow tests invented to satisfy the step are explicitly banned.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">One logical fix per commit</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">, so the history reads as a sequence of provable claims.</span>\n\n* **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Re-run the scenario, then re-test adjacent journeys.</span>** <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Fixes regress neighbors; the loop assumes so.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Two states are terminal for the loop because they wait on people:</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Blocked (human decision)`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">from the governor, and</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Blocked (needs human verify)`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">from external legs the browser can't drive alone (OAuth, real email delivery, payments). The second is the email rule hitting its own wall: the flow's decisive legs, real delivery and the real inbox click-through, live outside localhost reality (dev server, dev data, dev email adapter), and the loop verifies the branch, not production. A Blocked row there is the point; the alternative is a pass the browser never saw.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">One caveat, made once: this is the design contract, not a post-mortem. The skill orders the red run but does not archive it; the trail records that red was claimed, not a capture of it.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The exit gate: before declaring the branch ready, run the whole automated suite.</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">A green matrix with a red suite is not \"ready.\"</span>**\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Red blocks even when the red looks flaky; the gate is conservative by design. Ready, stated affirmatively: a green matrix, a green suite, a report carrying a commit and a test for every fix, and a \"Decisions for a human\" section that is empty or explicitly handed off. All of it is slower than a smoke test. That is the trade.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">6. The persona strategy: seeded specialists, not standing agents</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">By the end of the fix loop, one head has done everything: mapped the flows, driven the browser, written the fixes, declared them fixed. The second kind of persona is architectural, and it is the plugin's answer to that concentration: the same pattern that powers every CE skill that fans out work,</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">specialist prompt assets</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">. The plugin ships zero standalone agents. When a skill needs a specialist (a reviewer lens, a research scout, a profiler), it keeps a persona file inside its own directory (`references/agents/`,</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`references/personas/`) and seeds a</span> *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">generic</span>* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">subagent with that file's contents at dispatch time.</span>\n\n```excalidraw\n{\"id\":\"persona-dispatch\",\"formatVersion\":1,\"description\":\"Specialist prompt assets: persona files seed generic subagents at dispatch time; no standing agents\",\"height\":400,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el116\",\"type\":\"rectangle\",\"x\":30,\"y\":150,\"width\":230,\"height\":80,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":116,\"versionNonce\":116},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el117\",\"type\":\"text\",\"x\":67.25999999999999,\"y\":165.625,\"width\":155.48000000000002,\"height\":48.75,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":117,\"versionNonce\":117,\"text\":\"orchestrating skill\\n(SKILL.md owns dispatch\\npolicy + model tiers)\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"orchestrating skill\\n(SKILL.md owns dispatch\\npolicy + model tiers)\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el118\",\"type\":\"rectangle\",\"x\":590,\"y\":40,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":118,\"versionNonce\":118},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el119\",\"type\":\"text\",\"x\":644.52,\"y\":56,\"width\":180.96,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":119,\"versionNonce\":119,\"text\":\"generic subagent seeded as\\nsecurity lens [session model]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nsecurity lens [session model]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el120\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":105,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":120,\"versionNonce\":120,\"points\":[[0,0],[325,-105]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el121\",\"type\":\"arrow\",\"x\":590,\"y\":85,\"width\":322,\"height\":108,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":121,\"versionNonce\":121,\"points\":[[0,0],[-322,108]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el122\",\"type\":\"rectangle\",\"x\":590,\"y\":160,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":122,\"versionNonce\":122},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el123\",\"type\":\"text\",\"x\":638.28,\"y\":176,\"width\":193.44,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":123,\"versionNonce\":123,\"text\":\"generic subagent seeded as\\nmaintainability lens [mid tier]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nmaintainability lens [mid tier]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el124\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":124,\"versionNonce\":124,\"points\":[[0,0],[325,15]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el125\",\"type\":\"arrow\",\"x\":590,\"y\":205,\"width\":322,\"height\":12,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":125,\"versionNonce\":125,\"points\":[[0,0],[-322,-12]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el126\",\"type\":\"rectangle\",\"x\":590,\"y\":280,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":126,\"versionNonce\":126},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el127\",\"type\":\"text\",\"x\":653.88,\"y\":296,\"width\":162.24,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":127,\"versionNonce\":127,\"text\":\"generic subagent seeded as\\nrecap scout [cheap tier]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nrecap scout [cheap tier]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el128\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":135,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":128,\"versionNonce\":128,\"points\":[[0,0],[325,135]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el129\",\"type\":\"arrow\",\"x\":590,\"y\":325,\"width\":322,\"height\":132,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":129,\"versionNonce\":129,\"points\":[[0,0],[-322,-132]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el130\",\"type\":\"text\",\"x\":354.48,\"y\":75,\"width\":131.04,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":130,\"versionNonce\":130,\"text\":\"persona file + diff +\\nJSON schema + tier\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"persona file + diff +\\nJSON schema + tier\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el131\",\"type\":\"text\",\"x\":354.48,\"y\":315,\"width\":131.04,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":131,\"versionNonce\":131,\"text\":\"compact JSON findings\\nback to the merge\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"compact JSON findings\\nback to the merge\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Why this shape instead of registered agents:</span>\n\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Choice</span>                                             | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">What it buys</span>                                                                                                                                             |\n| :-------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Persona lives in the skill's own directory</span>         | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Skills stay self-contained; the converter can ship them to any harness as one unit</span>                                                                       |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Generic subagent, seeded at dispatch</span>               | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Each run reads the current persona from disk; no stale registration, no cache surprises (harnesses load registered agents once, at session start)</span>        |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Model tier chosen by the caller, never the persona</span> | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Extraction work runs cheap, judgment work runs on the session model (the same top-tier model the user's session runs on); cost policy lives in one place</span> |\n| <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Structured output contract per dispatch</span>            | <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Findings merge mechanically: dedup, cross-reviewer promotion, confidence gates</span>                                                                           |\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">The deeper principle is</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">independence budgeting</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">. A finding is only as trustworthy as the independence of whoever confirmed it. So the code-review skill's reviewer stack (`ce-code-review`) treats sameness as a defect: the orchestrator's own quick read (the fast pass) is capped at low confidence and can never corroborate anything, because it shares the session model's blind spots, and an agent agreeing with itself is one vote, not two; two personas agreeing promotes a finding one confidence step; per-finding validators get fresh context and no stake in the original claim; and the adversarial pass can shell out to a different model family entirely. Dogfood spends the same budget at the product level, unevenly and on purpose. The browser's independence is physical; it cannot be talked into agreeing. The persona walk's is simulated; it is a second lens, not a second judge, the same mind re-reading its own run. Dogfood buys independence in its instruments, not in its judgments; for the judgments, it buys a trail someone else can check.</span>\n\n## <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">7. One loop, every altitude</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Dogfood is the most visible verification loop because it drives a browser, but it is one rung on a ladder that the pipeline climbs for every feature:</span>\n\n```excalidraw\n{\"id\":\"altitude-ladder\",\"formatVersion\":1,\"description\":\"One grammar at every altitude: claim plus independent proof, from a single assertion to CI on the PR\",\"height\":480,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el132\",\"type\":\"rectangle\",\"x\":170,\"y\":399,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":132,\"versionNonce\":132},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el133\",\"type\":\"text\",\"x\":344.79999999999995,\"y\":413.875,\"width\":270.40000000000003,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":133,\"versionNonce\":133,\"text\":\"regression test: red before, green after\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"regression test: red before, green after\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el134\",\"type\":\"rectangle\",\"x\":170,\"y\":335,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":134,\"versionNonce\":134},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el135\",\"type\":\"text\",\"x\":358.32,\"y\":349.875,\"width\":243.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":135,\"versionNonce\":135,\"text\":\"full suite: the neighbors still pass\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"full suite: the neighbors still pass\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el136\",\"type\":\"rectangle\",\"x\":170,\"y\":271,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":136,\"versionNonce\":136},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el137\",\"type\":\"text\",\"x\":307.62,\"y\":285.875,\"width\":344.76,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":137,\"versionNonce\":137,\"text\":\"independent review: quoted lines + fresh validators\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"independent review: quoted lines + fresh validators\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el138\",\"type\":\"rectangle\",\"x\":170,\"y\":207,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":138,\"versionNonce\":138},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el139\",\"type\":\"text\",\"x\":287.34000000000003,\"y\":221.875,\"width\":385.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":139,\"versionNonce\":139,\"text\":\"behavioral evals: fresh-context dispatch for prose skills\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"behavioral evals: fresh-context dispatch for prose skills\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el140\",\"type\":\"rectangle\",\"x\":170,\"y\":143,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":140,\"versionNonce\":140},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el141\",\"type\":\"text\",\"x\":331.28,\"y\":157.875,\"width\":297.44,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":141,\"versionNonce\":141,\"text\":\"dogfood: a real browser walks the real flows\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"dogfood: a real browser walks the real flows\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el142\",\"type\":\"rectangle\",\"x\":170,\"y\":79,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":142,\"versionNonce\":142},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el143\",\"type\":\"text\",\"x\":321.14,\"y\":93.875,\"width\":317.72,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":143,\"versionNonce\":143,\"text\":\"CI watch: lfg repairs, capped at three attempts\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"CI watch: lfg repairs, capped at three attempts\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el144\",\"type\":\"rectangle\",\"x\":170,\"y\":15,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":144,\"versionNonce\":144},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el145\",\"type\":\"text\",\"x\":317.76,\"y\":29.875,\"width\":324.48,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":145,\"versionNonce\":145,\"text\":\"residuals made durable: PR body, issues, reports\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"residuals made durable: PR body, issues, reports\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el146\",\"type\":\"arrow\",\"x\":110,\"y\":415,\"width\":0,\"height\":390,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":146,\"versionNonce\":146,\"points\":[[0,0],[0,-390]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el147\",\"type\":\"text\",\"x\":42.96,\"y\":211.875,\"width\":54.08,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":147,\"versionNonce\":147,\"text\":\"altitude\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"altitude\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Each rung has the same grammar, claim plus independent proof, at a different altitude. The bottom two rungs are section 5's story; the others each add something new:</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-work`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">refuses to call a unit complete without</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">verification evidence</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">, captured by whoever witnessed it: the red observed before a fix cannot be reconstructed from the diff afterward.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-code-review`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">refuses high confidence without a quoted line (`file:line`) that makes the finding true; survivors still face fresh-context validators.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Prose skills (the skills themselves are markdown) get behavioral evals: fresh subagents run the scenario against the current text, because a skill invoked in its authoring session tests the stale cached copy.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`lfg`, the end-to-end ship pipeline, watches CI and repairs, but stops after three attempts and writes the residue into the PR body instead of looping forever.</span>\n\n* <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">And whatever no loop could close becomes a durable residual: a</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`Blocked (human decision)`</span> <span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">row, a filed issue, a report section. The loop never closes silently on an open question; it closes by making the question impossible to lose.</span>\n\n<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Autonomous verification is not agents being confident; it is agents being</span> **<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">auditable</span>**<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">, down to the commit SHA per scenario in a dogfood report. The loop is closed when the proof is durable, and a human can walk in at any point, read the trail, and take over exactly where their judgment is needed.</span>\n\n***\n\n*<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">Grounded in the live repo, July 2026:</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`skills/ce-dogfood/`</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">(workflow, fix-loop governor, report template), its test-matrix taxonomy, the specialist-prompt-asset conventions in</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`AGENTS.md`, and the review and evidence contracts of</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-code-review`,</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`ce-work`, and</span>* *<span data-provenance data-kind=\"ai\" data-author=\"Claude Code\" data-state=\"pending\">`lfg`.</span>*\n","plain_markdown":"# Closing the Verification Loop\n\n*How a branch proves itself ready: browser reality, persona eyes, and fixes that carry their own evidence.*\n\n## 1. The loop that must close\n\nAgents made building cheap. The cost moved: the expensive question is no longer \"can we ship this?\" but \"does anyone actually know it works?\" A branch that compiles, passes review, and merges can still greet its first real user with a form that validates the wrong field and an email that links to the wrong thread.\n\nThe verification loop is the distance between a claim and its proof:\n\n```excalidraw\n{\"id\":\"verification-loop\",\"formatVersion\":1,\"description\":\"The verification loop: the distance between a claim and its proof\",\"height\":280,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el1\",\"type\":\"rectangle\",\"x\":10,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":1,\"versionNonce\":1},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el2\",\"type\":\"text\",\"x\":39.28,\"y\":91,\"width\":37.44,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":2,\"versionNonce\":2,\"text\":\"change\\nlands\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"change\\nlands\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el3\",\"type\":\"rectangle\",\"x\":120,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":3,\"versionNonce\":3},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el4\",\"type\":\"text\",\"x\":143.04,\"y\":91,\"width\":49.92,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":4,\"versionNonce\":4,\"text\":\"claim:\\nit works\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"claim:\\nit works\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el5\",\"type\":\"arrow\",\"x\":106,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":5,\"versionNonce\":5,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el6\",\"type\":\"rectangle\",\"x\":230,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":6,\"versionNonce\":6},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el7\",\"type\":\"text\",\"x\":243.68,\"y\":91,\"width\":68.64,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":7,\"versionNonce\":7,\"text\":\"exercise it\\nas a user\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"exercise it\\nas a user\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el8\",\"type\":\"arrow\",\"x\":216,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":8,\"versionNonce\":8,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el9\",\"type\":\"rectangle\",\"x\":340,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":9,\"versionNonce\":9},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el10\",\"type\":\"text\",\"x\":350.56,\"y\":91,\"width\":74.88,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":10,\"versionNonce\":10,\"text\":\"observe what\\nhappens\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"observe what\\nhappens\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el11\",\"type\":\"arrow\",\"x\":326,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":11,\"versionNonce\":11,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el12\",\"type\":\"rectangle\",\"x\":450,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":12,\"versionNonce\":12},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el13\",\"type\":\"text\",\"x\":466.8,\"y\":91,\"width\":62.400000000000006,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":13,\"versionNonce\":13,\"text\":\"fix what's\\nbroken\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"fix what's\\nbroken\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el14\",\"type\":\"arrow\",\"x\":436,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":14,\"versionNonce\":14,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el15\",\"type\":\"rectangle\",\"x\":560,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":15,\"versionNonce\":15},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el16\",\"type\":\"text\",\"x\":573.68,\"y\":91,\"width\":68.64,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":16,\"versionNonce\":16,\"text\":\"prove it\\nwith a test\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"prove it\\nwith a test\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el17\",\"type\":\"arrow\",\"x\":546,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":17,\"versionNonce\":17,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el18\",\"type\":\"rectangle\",\"x\":670,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":18,\"versionNonce\":18},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el19\",\"type\":\"text\",\"x\":689.92,\"y\":98.5,\"width\":56.160000000000004,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":19,\"versionNonce\":19,\"text\":\"re-verify\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"re-verify\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el20\",\"type\":\"arrow\",\"x\":656,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":20,\"versionNonce\":20,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el21\",\"type\":\"rectangle\",\"x\":780,\"y\":80,\"width\":96,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":21,\"versionNonce\":21},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el22\",\"type\":\"text\",\"x\":812.4,\"y\":98.5,\"width\":31.200000000000003,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":22,\"versionNonce\":22,\"text\":\"ready\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"ready\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el23\",\"type\":\"arrow\",\"x\":766,\"y\":106,\"width\":14,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":23,\"versionNonce\":23,\"points\":[[0,0],[14,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el24\",\"type\":\"arrow\",\"x\":700,\"y\":80,\"width\":434,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":24,\"versionNonce\":24,\"points\":[[0,0],[0,-30],[-434,-30],[-434,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el25\",\"type\":\"text\",\"x\":304.24,\"y\":11.875,\"width\":351.52000000000004,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":25,\"versionNonce\":25,\"text\":\"the loop: a failed re-verify goes back to exercising\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"the loop: a failed re-verify goes back to exercising\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\nMost teams close this loop with humans: someone clicks around before the demo, someone eyeballs staging. That works until agents outrun the humans, which is what the agents were for. Compound engineering (CE, a plugin of skills for coding agents like Claude Code) answers that the loop itself is work an agent can do, end to end, with people pulled in where judgment belongs to them, and where the tooling genuinely cannot reach. The skill that embodies this is `/ce-dogfood`, and the rest of this piece walks through how it closes the loop, and the persona strategy that gives it eyes.\n\n## 2. Dogfood in one pass\n\n`/ce-dogfood` acts as a QA engineer who dogfoods the active branch: understand every change, test every change in a real browser as a user would, and fix what breaks, autonomously, until the branch is ready. Two constraints define it:\n\n* **Diff-scoped, never whole-app.** It tests what this branch changed versus the trunk, and it refuses to run on the trunk itself: no diff, nothing to dogfood.\n\n* **A real browser, one tool.** All automation goes through the `agent-browser` CLI, a shell tool that drives the browser directly (a Rust binary, not a wrapper, not an MCP server): no exceptions.\n\nThe workflow is seven phases with a loop in the middle:\n\n```excalidraw\n{\"id\":\"dogfood-phases\",\"formatVersion\":1,\"description\":\"Seven phases with a loop in the middle: the fix loop feeds back into execution\",\"height\":260,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el26\",\"type\":\"rectangle\",\"x\":10,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":26,\"versionNonce\":26},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el27\",\"type\":\"text\",\"x\":41.34,\"y\":77.875,\"width\":47.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":27,\"versionNonce\":27,\"text\":\"0 Scope\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"0 Scope\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el28\",\"type\":\"rectangle\",\"x\":135,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":28,\"versionNonce\":28},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el29\",\"type\":\"text\",\"x\":159.57999999999998,\"y\":77.875,\"width\":60.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":29,\"versionNonce\":29,\"text\":\"1 Analyze\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"1 Analyze\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el30\",\"type\":\"arrow\",\"x\":120,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":30,\"versionNonce\":30,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el31\",\"type\":\"rectangle\",\"x\":260,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":31,\"versionNonce\":31},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el32\",\"type\":\"text\",\"x\":284.58,\"y\":69.75,\"width\":60.84,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":32,\"versionNonce\":32,\"text\":\"2 Flows +\\nmatrix\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"2 Flows +\\nmatrix\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el33\",\"type\":\"arrow\",\"x\":245,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":33,\"versionNonce\":33,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el34\",\"type\":\"rectangle\",\"x\":385,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":34,\"versionNonce\":34},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el35\",\"type\":\"text\",\"x\":416.34,\"y\":77.875,\"width\":47.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":35,\"versionNonce\":35,\"text\":\"3 Serve\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"3 Serve\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el36\",\"type\":\"arrow\",\"x\":370,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":36,\"versionNonce\":36,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el37\",\"type\":\"rectangle\",\"x\":510,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":37,\"versionNonce\":37},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el38\",\"type\":\"text\",\"x\":534.58,\"y\":77.875,\"width\":60.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":38,\"versionNonce\":38,\"text\":\"4 Execute\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"4 Execute\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el39\",\"type\":\"arrow\",\"x\":495,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":39,\"versionNonce\":39,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el40\",\"type\":\"rectangle\",\"x\":635,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":40,\"versionNonce\":40},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el41\",\"type\":\"text\",\"x\":656.2,\"y\":77.875,\"width\":67.60000000000001,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":41,\"versionNonce\":41,\"text\":\"5 Fix loop\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"5 Fix loop\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el42\",\"type\":\"arrow\",\"x\":620,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":42,\"versionNonce\":42,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el43\",\"type\":\"rectangle\",\"x\":760,\"y\":60,\"width\":110,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":43,\"versionNonce\":43},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el44\",\"type\":\"text\",\"x\":787.96,\"y\":77.875,\"width\":54.08,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":44,\"versionNonce\":44,\"text\":\"6 Report\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"6 Report\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el45\",\"type\":\"arrow\",\"x\":745,\"y\":86,\"width\":15,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":45,\"versionNonce\":45,\"points\":[[0,0],[15,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el46\",\"type\":\"arrow\",\"x\":690,\"y\":112,\"width\":180,\"height\":92,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":46,\"versionNonce\":46,\"points\":[[0,0],[0,46],[-180,46],[-180,-46]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el47\",\"type\":\"text\",\"x\":498.6,\"y\":176.875,\"width\":202.8,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":47,\"versionNonce\":47,\"text\":\"every fix re-runs its scenario\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"every fix re-runs its scenario\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\nA few phase details that carry the philosophy:\n\n* **Scope** pins the identity of the ref under test, so the diff is cut against the right base (a PR stays a PR; a fork's head can literally be named `main`), and offers worktree isolation via `ce-worktree` when testing someone else's ref, so your checkout is never disturbed.\n\n* **Serve** is hands-off by design: detect the port (explicit flag, then project instructions, then `package.json`, then `.env`, then 3000), reuse a running server or start one, poll until it accepts connections. It does not stop to ask permission to start a dev server.\n\n* **Everything is resumable.** The matrix (the scenario checklist phase 2 produces) lives twice: as a live task list in the session, and as a report document on disk at `docs/dogfood-reports/<date>-<branch>-dogfood.md`, created the moment the matrix exists and updated after every scenario and every fix. Kill the session mid-run and the report is the checkpoint a later run (or a teammate) resumes from.\n\n`ce-dogfood` is also deliberately an orchestrator, not a soloist: root-causing a weird failure delegates to `ce-debug`, commits go through `ce-commit`, reusable lessons go to `ce-compound`.\n\n## 3. Flows before matrix: the email rule\n\nThe most common way automated QA lies to you is by testing pages instead of journeys. Every page renders; the feature is still broken, because the breakage lives between the pages.\n\nSo dogfood forbids jumping to a checklist. Phase 2 first maps every user-visible change as an explicit flow: entry point, each action, every branch (validation error, empty state, permission denied), every side effect, and the true end state. Only then does the matrix get derived, by walking each flow and turning every node and branch into scenarios.\n\n```excalidraw\n{\"id\":\"reply-email-flow\",\"formatVersion\":1,\"description\":\"The email rule: the flow map carries the journey past the send to its true destination\",\"height\":560,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el48\",\"type\":\"rectangle\",\"x\":330,\"y\":10,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":48,\"versionNonce\":48},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el49\",\"type\":\"text\",\"x\":385.78,\"y\":22.875,\"width\":128.44,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":49,\"versionNonce\":49,\"text\":\"user opens /threads\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"user opens /threads\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el50\",\"type\":\"rectangle\",\"x\":330,\"y\":80,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":50,\"versionNonce\":50},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el51\",\"type\":\"text\",\"x\":409.44,\"y\":92.875,\"width\":81.12,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":51,\"versionNonce\":51,\"text\":\"clicks Reply\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"clicks Reply\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el52\",\"type\":\"diamond\",\"x\":340,\"y\":150,\"width\":220,\"height\":64,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":52,\"versionNonce\":52},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el53\",\"type\":\"text\",\"x\":412.82,\"y\":173.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":53,\"versionNonce\":53,\"text\":\"form valid?\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"form valid?\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el54\",\"type\":\"rectangle\",\"x\":40,\"y\":160,\"width\":230,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":54,\"versionNonce\":54},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el55\",\"type\":\"text\",\"x\":77.25999999999999,\"y\":173.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":55,\"versionNonce\":55,\"text\":\"inline validation error\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"inline validation error\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el56\",\"type\":\"rectangle\",\"x\":330,\"y\":244,\"width\":240,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":56,\"versionNonce\":56},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el57\",\"type\":\"text\",\"x\":412.82,\"y\":256.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":57,\"versionNonce\":57,\"text\":\"reply saved\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"reply saved\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el58\",\"type\":\"rectangle\",\"x\":90,\"y\":316,\"width\":250,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":58,\"versionNonce\":58},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el59\",\"type\":\"text\",\"x\":137.26,\"y\":329.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":59,\"versionNonce\":59,\"text\":\"UI scrolls to new reply\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"UI scrolls to new reply\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el60\",\"type\":\"rectangle\",\"x\":520,\"y\":316,\"width\":300,\"height\":44,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":60,\"versionNonce\":60},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el61\",\"type\":\"text\",\"x\":582.12,\"y\":329.875,\"width\":175.76000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":61,\"versionNonce\":61,\"text\":\"email sent to participants\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"email sent to participants\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el62\",\"type\":\"rectangle\",\"x\":520,\"y\":390,\"width\":300,\"height\":42,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":62,\"versionNonce\":62},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el63\",\"type\":\"text\",\"x\":578.74,\"y\":402.875,\"width\":182.52,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":63,\"versionNonce\":63,\"text\":\"recipient clicks email link\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"recipient clicks email link\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el64\",\"type\":\"diamond\",\"x\":490,\"y\":462,\"width\":360,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":64,\"versionNonce\":64},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el65\",\"type\":\"text\",\"x\":601.36,\"y\":482,\"width\":137.28,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":65,\"versionNonce\":65,\"text\":\"RIGHT thread, scrolled\\nto the RIGHT reply?\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"RIGHT thread, scrolled\\nto the RIGHT reply?\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el66\",\"type\":\"arrow\",\"x\":450,\"y\":52,\"width\":0,\"height\":28,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":66,\"versionNonce\":66,\"points\":[[0,0],[0,28]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el67\",\"type\":\"arrow\",\"x\":450,\"y\":122,\"width\":0,\"height\":28,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":67,\"versionNonce\":67,\"points\":[[0,0],[0,28]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el68\",\"type\":\"arrow\",\"x\":340,\"y\":182,\"width\":70,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":68,\"versionNonce\":68,\"points\":[[0,0],[-70,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el69\",\"type\":\"text\",\"x\":293.76,\"y\":157.5,\"width\":12.48,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":69,\"versionNonce\":69,\"text\":\"no\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"no\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el70\",\"type\":\"arrow\",\"x\":450,\"y\":214,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":70,\"versionNonce\":70,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el71\",\"type\":\"text\",\"x\":460.64,\"y\":220.5,\"width\":18.72,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":71,\"versionNonce\":71,\"text\":\"yes\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"yes\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el72\",\"type\":\"arrow\",\"x\":390,\"y\":286,\"width\":175,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":72,\"versionNonce\":72,\"points\":[[0,0],[-175,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el73\",\"type\":\"arrow\",\"x\":510,\"y\":286,\"width\":160,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":73,\"versionNonce\":73,\"points\":[[0,0],[160,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el74\",\"type\":\"arrow\",\"x\":670,\"y\":360,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":74,\"versionNonce\":74,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el75\",\"type\":\"arrow\",\"x\":670,\"y\":432,\"width\":0,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":75,\"versionNonce\":75,\"points\":[[0,0],[0,30]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\nThe canonical example is the email rule, aimed at exactly the wrong-thread email from the opening: \"an email sends\" is not a pass. Right recipient? Does the click-through land on the right thread and scroll to the right message? Does the content read sensibly? The flow map must carry the journey past the send.\n\nThe matrix then covers both halves of quality, per the skill's test-matrix taxonomy: functional checks (forms validate, links go where they claim, data round-trips, `agent-browser errors` stays clean, permission boundaries hold), the edge, error, and empty states, and experiential checks, which need a different kind of judge.\n\n## 4. Two judges: does it work, and does it feel right\n\nFunctional truth comes from the browser. Experiential truth needs eyes, and this is where the first kind of persona enters: the **product persona**. Phase 1 looks for who the product is actually for (`STRATEGY.md`'s \"Who it's for\", `VISION.md`, persona docs) and captures the one to three primary personas and what each cares about. If none exist, it infers one from the product and the diff, and says so in the report; the disclosure is the mitigation for judging against your own guess. No persona at all is worse: that is how you get software that works and pleases nobody.\n\nEvery scenario then gets judged twice: once as a tester driving the browser, once as each persona re-reading the same run. The second pass is a change of eyes, not a second drive. The persona walk hunts **paper cuts**: friction too small to fail a functional test but real enough to degrade the experience. A confusing label. An extra click. A jump the eye doesn't expect. Copy that doesn't match how that persona thinks. Each paper cut gets recorded with who feels it and how badly.\n\n```excalidraw\n{\"id\":\"quality-quadrant\",\"formatVersion\":1,\"description\":\"Two dimensions, four outcomes: functional pass and experiential smoothness are judged separately\",\"height\":437,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el76\",\"type\":\"arrow\",\"x\":450,\"y\":380,\"width\":0,\"height\":330,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":76,\"versionNonce\":152728043,\"points\":[[0,0],[0,-330]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a0\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el77\",\"type\":\"arrow\",\"x\":80,\"y\":210,\"width\":740,\"height\":0,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":77,\"versionNonce\":24000069,\"points\":[[0,0],[740,0]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a1\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el78\",\"type\":\"text\",\"x\":412.82,\"y\":21.875,\"width\":74.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":78,\"versionNonce\":1013644427,\"text\":\"feels right\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"feels right\",\"lineHeight\":1.25,\"index\":\"a2\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el79\",\"type\":\"text\",\"x\":843.1,\"y\":219.875,\"width\":33.800000000000004,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":79,\"versionNonce\":1362699685,\"text\":\"works\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"works\",\"lineHeight\":1.25,\"index\":\"a3\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el80\",\"type\":\"rectangle\",\"x\":500,\"y\":70,\"width\":280,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":80,\"versionNonce\":1452356395,\"index\":\"a4\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el81\",\"type\":\"text\",\"x\":589.04,\"y\":82.5,\"width\":101.92,\"height\":35,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":81,\"versionNonce\":2091854085,\"text\":\"Pass + smooth:\\nship it\",\"fontSize\":14,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":14,\"originalText\":\"Pass + smooth:\\nship it\",\"lineHeight\":1.25,\"index\":\"a5\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el82\",\"type\":\"rectangle\",\"x\":500,\"y\":260,\"width\":280,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":82,\"versionNonce\":1207408075,\"index\":\"a6\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el83\",\"type\":\"text\",\"x\":531.84,\"y\":278.75,\"width\":216.32,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":83,\"versionNonce\":88981605,\"text\":\"Pass + paper cuts:\\nlog them all, fix the sharp ones\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Pass + paper cuts:\\nlog them all, fix the sharp ones\",\"lineHeight\":1.25,\"index\":\"a7\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el84\",\"type\":\"rectangle\",\"x\":120,\"y\":70,\"width\":280,\"height\":60,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":84,\"versionNonce\":263758955,\"index\":\"a8\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el85\",\"type\":\"text\",\"x\":183.56,\"y\":82.5,\"width\":152.88,\"height\":35,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":85,\"versionNonce\":1625451461,\"text\":\"Fails but looks nice:\\nfix loop\",\"fontSize\":14,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":14,\"originalText\":\"Fails but looks nice:\\nfix loop\",\"lineHeight\":1.25,\"index\":\"a9\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el86\",\"type\":\"rectangle\",\"x\":120,\"y\":260,\"width\":280,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":86,\"versionNonce\":1704910603,\"index\":\"aA\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201373803,\"locked\":false,\"id\":\"el87\",\"type\":\"text\",\"x\":178.88,\"y\":278.75,\"width\":162.24,\"height\":32.5,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":87,\"versionNonce\":1871358757,\"text\":\"Fails and feels wrong:\\nfix loop, maybe escalate\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Fails and feels wrong:\\nfix loop, maybe escalate\",\"lineHeight\":1.25,\"index\":\"aB\",\"roundness\":null,\"containerId\":null,\"autoResize\":true}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\",\"theme\":\"light\",\"gridSize\":20,\"gridStep\":5,\"gridModeEnabled\":false,\"objectsSnapModeEnabled\":false,\"zenModeEnabled\":false,\"scrollX\":-56,\"scrollY\":2.3238874345549903,\"zoom\":{\"value\":0.904249}},\"files\":{}}}\n```\n\nQuality is not a boolean, and the routing rule has teeth: a scenario can be functionally `Pass` and still carry paper cuts, and a **sharp** paper cut, one severe enough to fix now, enters the fix loop exactly like a failure.\n\nNote where each verdict comes from, though. The functional one is an instrument reading; the browser does not care what the agent hoped. The experiential one comes from the same agent, in the same session, grading a walk it imagined. Two judges, one head.\n\n## 5. The fix loop and its governor\n\nWhen something fails, the naive autonomous move is to fix everything. The dangerous autonomous move is also to fix everything. Dogfood's fix loop has a governor: **judge the size of the fix before touching code.**\n\n```excalidraw\n{\"id\":\"fix-governor\",\"formatVersion\":1,\"description\":\"The governor: judge the size of the fix before touching code; escalate what is not yours to decide\",\"height\":477,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el88\",\"type\":\"rectangle\",\"x\":300,\"y\":10,\"width\":300,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffc9c9\",\"seed\":88,\"versionNonce\":1995728901,\"index\":\"a0\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el89\",\"type\":\"text\",\"x\":335.08,\"y\":24.875,\"width\":229.84,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":89,\"versionNonce\":1860814539,\"text\":\"scenario fails, or sharp paper cut\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"scenario fails, or sharp paper cut\",\"lineHeight\":1.25,\"index\":\"a1\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el90\",\"type\":\"diamond\",\"x\":290,\"y\":90,\"width\":320,\"height\":70,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":90,\"versionNonce\":580067173,\"index\":\"a2\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el91\",\"type\":\"text\",\"x\":378.24,\"y\":110,\"width\":143.52,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":91,\"versionNonce\":1530705259,\"text\":\"small, well-understood,\\nlow-risk?\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"small, well-understood,\\nlow-risk?\",\"lineHeight\":1.25,\"index\":\"a3\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el92\",\"type\":\"rectangle\",\"x\":60,\"y\":200,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":92,\"versionNonce\":203680453,\"index\":\"a4\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el93\",\"type\":\"text\",\"x\":131.36,\"y\":211,\"width\":137.28,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":93,\"versionNonce\":679006219,\"text\":\"investigate root cause\\n(ce-debug if murky)\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"investigate root cause\\n(ce-debug if murky)\",\"lineHeight\":1.25,\"index\":\"a5\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el94\",\"type\":\"arrow\",\"x\":200,\"y\":252,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":94,\"versionNonce\":1413761573,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a6\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el95\",\"type\":\"rectangle\",\"x\":60,\"y\":274,\"width\":280,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":95,\"versionNonce\":949524139,\"index\":\"a7\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el96\",\"type\":\"text\",\"x\":159.44,\"y\":286.5,\"width\":81.12,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":96,\"versionNonce\":736214405,\"text\":\"apply the fix\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"apply the fix\",\"lineHeight\":1.25,\"index\":\"a8\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el97\",\"type\":\"arrow\",\"x\":200,\"y\":314,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":97,\"versionNonce\":1246136651,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"a9\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el98\",\"type\":\"rectangle\",\"x\":60,\"y\":336,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":98,\"versionNonce\":1245299941,\"index\":\"aA\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el99\",\"type\":\"text\",\"x\":128.24,\"y\":347,\"width\":143.52,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":99,\"versionNonce\":1658660843,\"text\":\"regression test:\\nred before, green after\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"regression test:\\nred before, green after\",\"lineHeight\":1.25,\"index\":\"aB\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el100\",\"type\":\"arrow\",\"x\":200,\"y\":388,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":100,\"versionNonce\":584704069,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aC\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el101\",\"type\":\"rectangle\",\"x\":60,\"y\":410,\"width\":280,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":101,\"versionNonce\":2020012683,\"index\":\"aD\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el102\",\"type\":\"text\",\"x\":128.24,\"y\":422.5,\"width\":143.52,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":102,\"versionNonce\":1537183653,\"text\":\"commit: one logical fix\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"commit: one logical fix\",\"lineHeight\":1.25,\"index\":\"aE\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el103\",\"type\":\"arrow\",\"x\":200,\"y\":450,\"width\":0,\"height\":22,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":103,\"versionNonce\":1537108267,\"points\":[[0,0],[0,22]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aF\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el104\",\"type\":\"rectangle\",\"x\":60,\"y\":472,\"width\":280,\"height\":52,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":104,\"versionNonce\":45634309,\"index\":\"aG\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el105\",\"type\":\"text\",\"x\":140.72,\"y\":483,\"width\":118.56,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":105,\"versionNonce\":1642990539,\"text\":\"re-run scenario\\n+ adjacent journeys\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"re-run scenario\\n+ adjacent journeys\",\"lineHeight\":1.25,\"index\":\"aH\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el106\",\"type\":\"text\",\"x\":0,\"y\":0,\"width\":0.52,\"height\":1.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":106,\"versionNonce\":77703781,\"text\":\" \",\"fontSize\":1,\"fontFamily\":1,\"textAlign\":\"left\",\"verticalAlign\":\"top\",\"baseline\":1,\"originalText\":\" \",\"lineHeight\":1.25,\"index\":\"aI\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el107\",\"type\":\"rectangle\",\"x\":540,\"y\":210,\"width\":300,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":107,\"versionNonce\":1332763243,\"index\":\"aJ\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el108\",\"type\":\"text\",\"x\":577.68,\"y\":226,\"width\":224.64000000000001,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":108,\"versionNonce\":1646859717,\"text\":\"record what's broken,\\noptions + trade-offs, recommendation\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"record what's broken,\\noptions + trade-offs, recommendation\",\"lineHeight\":1.25,\"index\":\"aK\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el109\",\"type\":\"rectangle\",\"x\":540,\"y\":310,\"width\":300,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":109,\"versionNonce\":15717643,\"index\":\"aL\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el110\",\"type\":\"text\",\"x\":612.26,\"y\":324.875,\"width\":155.48000000000002,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":110,\"versionNonce\":644617509,\"text\":\"Blocked: human decision\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"Blocked: human decision\",\"lineHeight\":1.25,\"index\":\"aM\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el111\",\"type\":\"arrow\",\"x\":330,\"y\":160,\"width\":130,\"height\":40,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":111,\"versionNonce\":1441201067,\"points\":[[0,0],[-130,40]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aN\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el112\",\"type\":\"text\",\"x\":220.64,\"y\":164.5,\"width\":18.72,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":112,\"versionNonce\":483928197,\"text\":\"yes\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"yes\",\"lineHeight\":1.25,\"index\":\"aO\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el113\",\"type\":\"arrow\",\"x\":570,\"y\":160,\"width\":120,\"height\":50,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":113,\"versionNonce\":1518358091,\"points\":[[0,0],[120,50]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aP\",\"roundness\":null},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el114\",\"type\":\"text\",\"x\":663.76,\"y\":170.5,\"width\":12.48,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":114,\"versionNonce\":1193988069,\"text\":\"no\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"no\",\"lineHeight\":1.25,\"index\":\"aQ\",\"roundness\":null,\"containerId\":null,\"autoResize\":true},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":2,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1783201361720,\"locked\":false,\"id\":\"el115\",\"type\":\"arrow\",\"x\":690,\"y\":272,\"width\":0,\"height\":38,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":115,\"versionNonce\":831933675,\"points\":[[0,0],[0,38]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\",\"index\":\"aR\",\"roundness\":null}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\",\"theme\":\"light\",\"gridSize\":20,\"gridStep\":5,\"gridModeEnabled\":false,\"objectsSnapModeEnabled\":false,\"zenModeEnabled\":false,\"scrollX\":24,\"scrollY\":-119.55317915173518,\"zoom\":{\"value\":0.86036}},\"files\":{}}}\n```\n\nAuto-fix territory is narrow on purpose: a clear bug, an obvious correct fix, a few files, no schema or architecture or product trade-off. Everything else gets escalated, not attempted; the report's \"Decisions for a human\" section receives what's broken, the options with trade-offs, and a recommendation.\n\nThe auto-fix path pays for its autonomy up front:\n\n* **Every fix ships with a regression test designed to fail before and pass after.** When a test is genuinely meaningless (a copy tweak, a spacing fix), the report must say why, and a documented browser-replay stands in. Hollow tests invented to satisfy the step are explicitly banned.\n\n* **One logical fix per commit**, so the history reads as a sequence of provable claims.\n\n* **Re-run the scenario, then re-test adjacent journeys.** Fixes regress neighbors; the loop assumes so.\n\n* Two states are terminal for the loop because they wait on people: `Blocked (human decision)` from the governor, and `Blocked (needs human verify)` from external legs the browser can't drive alone (OAuth, real email delivery, payments). The second is the email rule hitting its own wall: the flow's decisive legs, real delivery and the real inbox click-through, live outside localhost reality (dev server, dev data, dev email adapter), and the loop verifies the branch, not production. A Blocked row there is the point; the alternative is a pass the browser never saw.\n\nOne caveat, made once: this is the design contract, not a post-mortem. The skill orders the red run but does not archive it; the trail records that red was claimed, not a capture of it.\n\nThe exit gate: before declaring the branch ready, run the whole automated suite. **A green matrix with a red suite is not \"ready.\"**\n\nRed blocks even when the red looks flaky; the gate is conservative by design. Ready, stated affirmatively: a green matrix, a green suite, a report carrying a commit and a test for every fix, and a \"Decisions for a human\" section that is empty or explicitly handed off. All of it is slower than a smoke test. That is the trade.\n\n## 6. The persona strategy: seeded specialists, not standing agents\n\nBy the end of the fix loop, one head has done everything: mapped the flows, driven the browser, written the fixes, declared them fixed. The second kind of persona is architectural, and it is the plugin's answer to that concentration: the same pattern that powers every CE skill that fans out work, **specialist prompt assets**. The plugin ships zero standalone agents. When a skill needs a specialist (a reviewer lens, a research scout, a profiler), it keeps a persona file inside its own directory (`references/agents/`, `references/personas/`) and seeds a *generic* subagent with that file's contents at dispatch time.\n\n```excalidraw\n{\"id\":\"persona-dispatch\",\"formatVersion\":1,\"description\":\"Specialist prompt assets: persona files seed generic subagents at dispatch time; no standing agents\",\"height\":400,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el116\",\"type\":\"rectangle\",\"x\":30,\"y\":150,\"width\":230,\"height\":80,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":116,\"versionNonce\":116},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el117\",\"type\":\"text\",\"x\":67.25999999999999,\"y\":165.625,\"width\":155.48000000000002,\"height\":48.75,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":117,\"versionNonce\":117,\"text\":\"orchestrating skill\\n(SKILL.md owns dispatch\\npolicy + model tiers)\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"orchestrating skill\\n(SKILL.md owns dispatch\\npolicy + model tiers)\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el118\",\"type\":\"rectangle\",\"x\":590,\"y\":40,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":118,\"versionNonce\":118},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el119\",\"type\":\"text\",\"x\":644.52,\"y\":56,\"width\":180.96,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":119,\"versionNonce\":119,\"text\":\"generic subagent seeded as\\nsecurity lens [session model]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nsecurity lens [session model]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el120\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":105,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":120,\"versionNonce\":120,\"points\":[[0,0],[325,-105]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el121\",\"type\":\"arrow\",\"x\":590,\"y\":85,\"width\":322,\"height\":108,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":121,\"versionNonce\":121,\"points\":[[0,0],[-322,108]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el122\",\"type\":\"rectangle\",\"x\":590,\"y\":160,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":122,\"versionNonce\":122},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el123\",\"type\":\"text\",\"x\":638.28,\"y\":176,\"width\":193.44,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":123,\"versionNonce\":123,\"text\":\"generic subagent seeded as\\nmaintainability lens [mid tier]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nmaintainability lens [mid tier]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el124\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":15,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":124,\"versionNonce\":124,\"points\":[[0,0],[325,15]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el125\",\"type\":\"arrow\",\"x\":590,\"y\":205,\"width\":322,\"height\":12,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":125,\"versionNonce\":125,\"points\":[[0,0],[-322,-12]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el126\",\"type\":\"rectangle\",\"x\":590,\"y\":280,\"width\":290,\"height\":62,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":126,\"versionNonce\":126},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el127\",\"type\":\"text\",\"x\":653.88,\"y\":296,\"width\":162.24,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":127,\"versionNonce\":127,\"text\":\"generic subagent seeded as\\nrecap scout [cheap tier]\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"generic subagent seeded as\\nrecap scout [cheap tier]\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el128\",\"type\":\"arrow\",\"x\":260,\"y\":185,\"width\":325,\"height\":135,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":128,\"versionNonce\":128,\"points\":[[0,0],[325,135]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"dashed\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el129\",\"type\":\"arrow\",\"x\":590,\"y\":325,\"width\":322,\"height\":132,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":129,\"versionNonce\":129,\"points\":[[0,0],[-322,-132]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el130\",\"type\":\"text\",\"x\":354.48,\"y\":75,\"width\":131.04,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":130,\"versionNonce\":130,\"text\":\"persona file + diff +\\nJSON schema + tier\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"persona file + diff +\\nJSON schema + tier\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el131\",\"type\":\"text\",\"x\":354.48,\"y\":315,\"width\":131.04,\"height\":30,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":131,\"versionNonce\":131,\"text\":\"compact JSON findings\\nback to the merge\",\"fontSize\":12,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":12,\"originalText\":\"compact JSON findings\\nback to the merge\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\nWhy this shape instead of registered agents:\n\n| Choice                                             | What it buys                                                                                                                                             |\n| :-------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Persona lives in the skill's own directory         | Skills stay self-contained; the converter can ship them to any harness as one unit                                                                       |\n| Generic subagent, seeded at dispatch               | Each run reads the current persona from disk; no stale registration, no cache surprises (harnesses load registered agents once, at session start)        |\n| Model tier chosen by the caller, never the persona | Extraction work runs cheap, judgment work runs on the session model (the same top-tier model the user's session runs on); cost policy lives in one place |\n| Structured output contract per dispatch            | Findings merge mechanically: dedup, cross-reviewer promotion, confidence gates                                                                           |\n\nThe deeper principle is **independence budgeting**. A finding is only as trustworthy as the independence of whoever confirmed it. So the code-review skill's reviewer stack (`ce-code-review`) treats sameness as a defect: the orchestrator's own quick read (the fast pass) is capped at low confidence and can never corroborate anything, because it shares the session model's blind spots, and an agent agreeing with itself is one vote, not two; two personas agreeing promotes a finding one confidence step; per-finding validators get fresh context and no stake in the original claim; and the adversarial pass can shell out to a different model family entirely. Dogfood spends the same budget at the product level, unevenly and on purpose. The browser's independence is physical; it cannot be talked into agreeing. The persona walk's is simulated; it is a second lens, not a second judge, the same mind re-reading its own run. Dogfood buys independence in its instruments, not in its judgments; for the judgments, it buys a trail someone else can check.\n\n## 7. One loop, every altitude\n\nDogfood is the most visible verification loop because it drives a browser, but it is one rung on a ladder that the pipeline climbs for every feature:\n\n```excalidraw\n{\"id\":\"altitude-ladder\",\"formatVersion\":1,\"description\":\"One grammar at every altitude: claim plus independent proof, from a single assertion to CI on the PR\",\"height\":480,\"scene\":{\"type\":\"excalidraw\",\"version\":2,\"elements\":[{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el132\",\"type\":\"rectangle\",\"x\":170,\"y\":399,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":132,\"versionNonce\":132},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el133\",\"type\":\"text\",\"x\":344.79999999999995,\"y\":413.875,\"width\":270.40000000000003,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":133,\"versionNonce\":133,\"text\":\"regression test: red before, green after\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"regression test: red before, green after\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el134\",\"type\":\"rectangle\",\"x\":170,\"y\":335,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#e9ecef\",\"seed\":134,\"versionNonce\":134},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el135\",\"type\":\"text\",\"x\":358.32,\"y\":349.875,\"width\":243.36,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":135,\"versionNonce\":135,\"text\":\"full suite: the neighbors still pass\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"full suite: the neighbors still pass\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el136\",\"type\":\"rectangle\",\"x\":170,\"y\":271,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":136,\"versionNonce\":136},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el137\",\"type\":\"text\",\"x\":307.62,\"y\":285.875,\"width\":344.76,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":137,\"versionNonce\":137,\"text\":\"independent review: quoted lines + fresh validators\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"independent review: quoted lines + fresh validators\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el138\",\"type\":\"rectangle\",\"x\":170,\"y\":207,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#a5d8ff\",\"seed\":138,\"versionNonce\":138},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el139\",\"type\":\"text\",\"x\":287.34000000000003,\"y\":221.875,\"width\":385.32,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":139,\"versionNonce\":139,\"text\":\"behavioral evals: fresh-context dispatch for prose skills\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"behavioral evals: fresh-context dispatch for prose skills\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el140\",\"type\":\"rectangle\",\"x\":170,\"y\":143,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#d0bfff\",\"seed\":140,\"versionNonce\":140},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el141\",\"type\":\"text\",\"x\":331.28,\"y\":157.875,\"width\":297.44,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":141,\"versionNonce\":141,\"text\":\"dogfood: a real browser walks the real flows\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"dogfood: a real browser walks the real flows\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el142\",\"type\":\"rectangle\",\"x\":170,\"y\":79,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#ffec99\",\"seed\":142,\"versionNonce\":142},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el143\",\"type\":\"text\",\"x\":321.14,\"y\":93.875,\"width\":317.72,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":143,\"versionNonce\":143,\"text\":\"CI watch: lfg repairs, capped at three attempts\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"CI watch: lfg repairs, capped at three attempts\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el144\",\"type\":\"rectangle\",\"x\":170,\"y\":15,\"width\":620,\"height\":46,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"#b2f2bb\",\"seed\":144,\"versionNonce\":144},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el145\",\"type\":\"text\",\"x\":317.76,\"y\":29.875,\"width\":324.48,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":145,\"versionNonce\":145,\"text\":\"residuals made durable: PR body, issues, reports\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"residuals made durable: PR body, issues, reports\",\"lineHeight\":1.25},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el146\",\"type\":\"arrow\",\"x\":110,\"y\":415,\"width\":0,\"height\":390,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":146,\"versionNonce\":146,\"points\":[[0,0],[0,-390]],\"lastCommittedPoint\":null,\"startBinding\":null,\"endBinding\":null,\"startArrowhead\":null,\"endArrowhead\":\"arrow\"},{\"angle\":0,\"fillStyle\":\"solid\",\"strokeWidth\":1,\"strokeStyle\":\"solid\",\"roughness\":1,\"opacity\":100,\"version\":1,\"isDeleted\":false,\"groupIds\":[],\"frameId\":null,\"boundElements\":[],\"updated\":1,\"locked\":false,\"id\":\"el147\",\"type\":\"text\",\"x\":42.96,\"y\":211.875,\"width\":54.08,\"height\":16.25,\"strokeColor\":\"#1e1e1e\",\"backgroundColor\":\"transparent\",\"seed\":147,\"versionNonce\":147,\"text\":\"altitude\",\"fontSize\":13,\"fontFamily\":1,\"textAlign\":\"center\",\"verticalAlign\":\"top\",\"baseline\":13,\"originalText\":\"altitude\",\"lineHeight\":1.25}],\"appState\":{\"viewBackgroundColor\":\"#fffef9\"},\"files\":{}}}\n```\n\nEach rung has the same grammar, claim plus independent proof, at a different altitude. The bottom two rungs are section 5's story; the others each add something new:\n\n* `ce-work` refuses to call a unit complete without **verification evidence**, captured by whoever witnessed it: the red observed before a fix cannot be reconstructed from the diff afterward.\n\n* `ce-code-review` refuses high confidence without a quoted line (`file:line`) that makes the finding true; survivors still face fresh-context validators.\n\n* Prose skills (the skills themselves are markdown) get behavioral evals: fresh subagents run the scenario against the current text, because a skill invoked in its authoring session tests the stale cached copy.\n\n* `lfg`, the end-to-end ship pipeline, watches CI and repairs, but stops after three attempts and writes the residue into the PR body instead of looping forever.\n\n* And whatever no loop could close becomes a durable residual: a `Blocked (human decision)` row, a filed issue, a report section. The loop never closes silently on an open question; it closes by making the question impossible to lose.\n\nAutonomous verification is not agents being confident; it is agents being **auditable**, down to the commit SHA per scenario in a dogfood report. The loop is closed when the proof is durable, and a human can walk in at any point, read the trail, and take over exactly where their judgment is needed.\n\n***\n\n*Grounded in the live repo, July 2026:* *`skills/ce-dogfood/`* *(workflow, fix-loop governor, report template), its test-matrix taxonomy, the specialist-prompt-asset conventions in* *`AGENTS.md`, and the review and evidence contracts of* *`ce-code-review`,* *`ce-work`, and* *`lfg`.*\n"}