@haaaiawd/loom 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,29 +1,29 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="360" viewBox="0 0 1280 360" role="img" aria-labelledby="title desc">
2
- <title id="title">LOOM — 记住全貌,继续工作。</title>
3
- <desc id="desc">一根连续的线穿过项目理解、专业能力、独立验证和交付,并在中断后继续向前。</desc>
4
- <rect width="1280" height="360" rx="28" fill="#F5F2EA"/>
5
- <path d="M0 304H1280" stroke="#D8D3C8"/>
6
- <g transform="translate(84 70)">
7
- <g fill="none" stroke="#17212B" stroke-width="4">
8
- <rect x="0" y="16" width="38" height="76" rx="8"/><rect x="47" y="16" width="38" height="76" rx="8"/><rect x="94" y="16" width="38" height="76" rx="8"/><rect x="141" y="16" width="30" height="76" rx="8"/>
9
- </g>
10
- <path d="M-14 54H10c10 0 10-20 20-20s10 40 20 40 10-40 20-40 10 40 20 40 10-40 20-40 10 40 20 40" fill="none" stroke="#4169E1" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
11
- <circle cx="145" cy="74" r="4" fill="#4169E1"/><circle cx="158" cy="74" r="4" fill="#4169E1" opacity=".5"/>
12
- <path d="M171 74c20 0 27 13 27 28 0 23-18 42-42 42H59" fill="none" stroke="#4169E1" stroke-width="8" stroke-linecap="round"/>
13
- <path d="M72 132 56 144l16 12" fill="none" stroke="#4169E1" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
14
- </g>
15
- <g font-family="Inter,Segoe UI,Arial,sans-serif" fill="#17212B">
16
- <text x="350" y="142" font-size="94" font-weight="750" letter-spacing="12">LOOM</text>
17
- </g>
18
- <g font-family="Noto Sans SC,Microsoft YaHei,PingFang SC,Segoe UI,Arial,sans-serif" fill="#17212B">
19
- <text x="355" y="190" font-size="24" font-weight="650">记住全貌,继续工作。</text>
20
- <text x="355" y="228" font-size="17" fill="#58636D">为 AI Agent 提供无形的项目理解与连续性基础设施。</text>
21
- </g>
22
- <g transform="translate(82 311)" font-family="Noto Sans SC,Microsoft YaHei,PingFang SC,Segoe UI,Arial,sans-serif" font-size="13" font-weight="700" letter-spacing="1.6" fill="#17212B">
23
- <circle cx="4" cy="-1" r="4" fill="#4169E1"/><text x="18" y="4">理解</text><path d="M70-1h42" stroke="#9AD8C2" stroke-width="3"/>
24
- <circle cx="125" cy="-1" r="4" fill="#9AD8C2"/><text x="139" y="4">记住</text><path d="M191-1h42" stroke="#E88773" stroke-width="3"/>
25
- <circle cx="246" cy="-1" r="4" fill="#E88773"/><text x="260" y="4">验证</text><path d="M312-1h42" stroke="#4169E1" stroke-width="3"/>
26
- <circle cx="367" cy="-1" r="4" fill="#4169E1"/><text x="381" y="4">继续</text>
27
- </g>
28
- <text x="1198" y="322" text-anchor="end" font-family="ui-monospace,SFMono-Regular,Consolas,monospace" font-size="13" fill="#58636D">npm i -g @haaaiawd/loom</text>
29
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="360" viewBox="0 0 1280 360" role="img" aria-labelledby="title desc">
2
+ <title id="title">LOOM — 记住全貌,继续工作。</title>
3
+ <desc id="desc">一根连续的线穿过项目理解、专业能力、独立验证和交付,并在中断后继续向前。</desc>
4
+ <rect width="1280" height="360" rx="28" fill="#F5F2EA"/>
5
+ <path d="M0 304H1280" stroke="#D8D3C8"/>
6
+ <g transform="translate(84 70)">
7
+ <g fill="none" stroke="#17212B" stroke-width="4">
8
+ <rect x="0" y="16" width="38" height="76" rx="8"/><rect x="47" y="16" width="38" height="76" rx="8"/><rect x="94" y="16" width="38" height="76" rx="8"/><rect x="141" y="16" width="30" height="76" rx="8"/>
9
+ </g>
10
+ <path d="M-14 54H10c10 0 10-20 20-20s10 40 20 40 10-40 20-40 10 40 20 40 10-40 20-40 10 40 20 40" fill="none" stroke="#4169E1" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
11
+ <circle cx="145" cy="74" r="4" fill="#4169E1"/><circle cx="158" cy="74" r="4" fill="#4169E1" opacity=".5"/>
12
+ <path d="M171 74c20 0 27 13 27 28 0 23-18 42-42 42H59" fill="none" stroke="#4169E1" stroke-width="8" stroke-linecap="round"/>
13
+ <path d="M72 132 56 144l16 12" fill="none" stroke="#4169E1" stroke-width="8" stroke-linecap="round" stroke-linejoin="round"/>
14
+ </g>
15
+ <g font-family="Inter,Segoe UI,Arial,sans-serif" fill="#17212B">
16
+ <text x="350" y="142" font-size="94" font-weight="750" letter-spacing="12">LOOM</text>
17
+ </g>
18
+ <g font-family="Noto Sans SC,Microsoft YaHei,PingFang SC,Segoe UI,Arial,sans-serif" fill="#17212B">
19
+ <text x="355" y="190" font-size="24" font-weight="650">记住全貌,继续工作。</text>
20
+ <text x="355" y="228" font-size="17" fill="#58636D">为 AI Agent 提供无形的项目理解与连续性基础设施。</text>
21
+ </g>
22
+ <g transform="translate(82 311)" font-family="Noto Sans SC,Microsoft YaHei,PingFang SC,Segoe UI,Arial,sans-serif" font-size="13" font-weight="700" letter-spacing="1.6" fill="#17212B">
23
+ <circle cx="4" cy="-1" r="4" fill="#4169E1"/><text x="18" y="4">理解</text><path d="M70-1h42" stroke="#9AD8C2" stroke-width="3"/>
24
+ <circle cx="125" cy="-1" r="4" fill="#9AD8C2"/><text x="139" y="4">记住</text><path d="M191-1h42" stroke="#E88773" stroke-width="3"/>
25
+ <circle cx="246" cy="-1" r="4" fill="#E88773"/><text x="260" y="4">验证</text><path d="M312-1h42" stroke="#4169E1" stroke-width="3"/>
26
+ <circle cx="367" cy="-1" r="4" fill="#4169E1"/><text x="381" y="4">继续</text>
27
+ </g>
28
+ <text x="1198" y="322" text-anchor="end" font-family="ui-monospace,SFMono-Regular,Consolas,monospace" font-size="13" fill="#58636D">npm i -g @haaaiawd/loom</text>
29
+ </svg>
@@ -1,21 +1,21 @@
1
- <mxfile host="app.diagrams.net" modified="2026-08-09T22:30:00.000Z" agent="Codex" version="24.7.17">
2
- <diagram id="loom-eval" name="LOOM Evil Eval">
3
- <mxGraphModel dx="1600" dy="860" grid="1" gridSize="10" guides="1" page="1" pageScale="1" pageWidth="1600" pageHeight="860"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
4
- <mxCell id="title" value="The Evil Eval: does LOOM cause the gain?" style="text;html=1;fontSize=28;fontStyle=1;fontColor=#17212B;align=left;" vertex="1" parent="1"><mxGeometry x="70" y="30" width="900" height="50" as="geometry"/></mxCell>
5
- <mxCell id="controls" value="FREEZE EVERYTHING EXCEPT THE TREATMENT&lt;br&gt;same model · same tools · same workspace · same hidden user facts · same budget · same reset schedule · ≥ 3 repeats" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#17212B;strokeColor=#17212B;fontColor=#F5F2EA;fontStyle=1;align=left;spacingLeft=24;" vertex="1" parent="1"><mxGeometry x="70" y="110" width="1460" height="90" as="geometry"/></mxCell>
6
- <mxCell id="a-band" value="A · BASELINE — Normal Agent, no LOOM" style="swimlane;horizontal=1;startSize=52;rounded=1;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#C7C2B8;fontColor=#58636D;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="70" y="240" width="700" height="270" as="geometry"/></mxCell>
7
- <mxCell id="b-band" value="B · TREATMENT — Same Agent, LOOM available" style="swimlane;horizontal=1;startSize=52;rounded=1;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#4169E1;fontColor=#4169E1;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="830" y="240" width="700" height="270" as="geometry"/></mxCell>
8
- <mxCell id="a1" value="&lt;b&gt;Shape project&lt;/b&gt;&lt;br&gt;questions · decisions&lt;br&gt;plans · documents" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="105" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="a2" value="&lt;b&gt;Force reset&lt;/b&gt;&lt;br&gt;after shaping&lt;br&gt;and mid-Task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="330" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="a3" value="&lt;b&gt;Fresh Agent&lt;/b&gt;&lt;br&gt;continue from disk&lt;br&gt;build vertical slice" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="555" y="335" width="175" height="85" as="geometry"/></mxCell>
9
- <mxCell id="b1" value="&lt;b&gt;Shape with LOOM&lt;/b&gt;&lt;br&gt;same brief and Agent&lt;br&gt;treatment only" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="865" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="b2" value="&lt;b&gt;Force reset&lt;/b&gt;&lt;br&gt;identical timing&lt;br&gt;identical budget" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="1090" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="b3" value="&lt;b&gt;Fresh Agent&lt;/b&gt;&lt;br&gt;use LOOM disk truth&lt;br&gt;build vertical slice" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8ECFA;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="1315" y="335" width="175" height="85" as="geometry"/></mxCell>
10
- <mxCell id="ae1" edge="1" source="a1" target="a2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="ae2" edge="1" source="a2" target="a3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="be1" edge="1" source="b1" target="b2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="be2" edge="1" source="b2" target="b3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/>
11
- <mxCell id="collect-a" value="COLLECT · questions · docs · code · tests · time · tokens · user burden" style="text;html=1;fontSize=11;fontColor=#58636D;align=left;" vertex="1" parent="1"><mxGeometry x="105" y="450" width="610" height="30" as="geometry"/></mxCell><mxCell id="collect-b" value="COLLECT · the same artifact classes, under the same stopping rule" style="text;html=1;fontSize=11;fontColor=#58636D;align=left;" vertex="1" parent="1"><mxGeometry x="865" y="450" width="610" height="30" as="geometry"/></mxCell>
12
- <mxCell id="judge" value="BLIND PAIRWISE JUDGE&lt;br&gt;&lt;b&gt;Anonymize → randomize → swap order&lt;/b&gt;&lt;br&gt;Preflight the packet; repeat ≥ 3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E88773;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="590" y="560" width="420" height="105" as="geometry"/></mxCell>
13
- <mxCell id="aj" edge="1" source="a-band" target="judge" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="bj" edge="1" source="b-band" target="judge" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/>
14
- <mxCell id="score" value="&lt;b&gt;SCORE NET VALUE&lt;/b&gt;&lt;br&gt;intent · question value · buildability&lt;br&gt;continuity · burden · cost · ceremony" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="120" y="720" width="280" height="85" as="geometry"/></mxCell>
15
- <mxCell id="gain" value="Reliable net gain across repeats?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="520" y="710" width="230" height="105" as="geometry"/></mxCell>
16
- <mxCell id="yes" value="YES · ABLATE&lt;br&gt;&lt;b&gt;Find the causal mechanism&lt;/b&gt;&lt;br&gt;keep only what creates the gain" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F3ED;strokeColor=#9AD8C2;" vertex="1" parent="1"><mxGeometry x="870" y="720" width="250" height="85" as="geometry"/></mxCell>
17
- <mxCell id="no" value="NO · BE EVIL&lt;br&gt;&lt;b&gt;Simplify, revise, or delete&lt;/b&gt;&lt;br&gt;ceremony gets no sympathy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="1230" y="720" width="250" height="85" as="geometry"/></mxCell>
18
- <mxCell id="js" edge="1" source="judge" target="score" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="sg" edge="1" source="score" target="gain" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="gy" value="yes" edge="1" source="gain" target="yes" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="gn" value="no" edge="1" source="gain" target="no" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="635" y="835"/><mxPoint x="1355" y="835"/></Array></mxGeometry></mxCell>
19
- </root></mxGraphModel>
20
- </diagram>
21
- </mxfile>
1
+ <mxfile host="app.diagrams.net" modified="2026-08-09T22:30:00.000Z" agent="Codex" version="24.7.17">
2
+ <diagram id="loom-eval" name="LOOM Evil Eval">
3
+ <mxGraphModel dx="1600" dy="860" grid="1" gridSize="10" guides="1" page="1" pageScale="1" pageWidth="1600" pageHeight="860"><root><mxCell id="0"/><mxCell id="1" parent="0"/>
4
+ <mxCell id="title" value="The Evil Eval: does LOOM cause the gain?" style="text;html=1;fontSize=28;fontStyle=1;fontColor=#17212B;align=left;" vertex="1" parent="1"><mxGeometry x="70" y="30" width="900" height="50" as="geometry"/></mxCell>
5
+ <mxCell id="controls" value="FREEZE EVERYTHING EXCEPT THE TREATMENT&lt;br&gt;same model · same tools · same workspace · same hidden user facts · same budget · same reset schedule · ≥ 3 repeats" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#17212B;strokeColor=#17212B;fontColor=#F5F2EA;fontStyle=1;align=left;spacingLeft=24;" vertex="1" parent="1"><mxGeometry x="70" y="110" width="1460" height="90" as="geometry"/></mxCell>
6
+ <mxCell id="a-band" value="A · BASELINE — Normal Agent, no LOOM" style="swimlane;horizontal=1;startSize=52;rounded=1;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#C7C2B8;fontColor=#58636D;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="70" y="240" width="700" height="270" as="geometry"/></mxCell>
7
+ <mxCell id="b-band" value="B · TREATMENT — Same Agent, LOOM available" style="swimlane;horizontal=1;startSize=52;rounded=1;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#4169E1;fontColor=#4169E1;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="830" y="240" width="700" height="270" as="geometry"/></mxCell>
8
+ <mxCell id="a1" value="&lt;b&gt;Shape project&lt;/b&gt;&lt;br&gt;questions · decisions&lt;br&gt;plans · documents" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="105" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="a2" value="&lt;b&gt;Force reset&lt;/b&gt;&lt;br&gt;after shaping&lt;br&gt;and mid-Task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="330" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="a3" value="&lt;b&gt;Fresh Agent&lt;/b&gt;&lt;br&gt;continue from disk&lt;br&gt;build vertical slice" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="555" y="335" width="175" height="85" as="geometry"/></mxCell>
9
+ <mxCell id="b1" value="&lt;b&gt;Shape with LOOM&lt;/b&gt;&lt;br&gt;same brief and Agent&lt;br&gt;treatment only" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="865" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="b2" value="&lt;b&gt;Force reset&lt;/b&gt;&lt;br&gt;identical timing&lt;br&gt;identical budget" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="1090" y="335" width="175" height="85" as="geometry"/></mxCell><mxCell id="b3" value="&lt;b&gt;Fresh Agent&lt;/b&gt;&lt;br&gt;use LOOM disk truth&lt;br&gt;build vertical slice" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8ECFA;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="1315" y="335" width="175" height="85" as="geometry"/></mxCell>
10
+ <mxCell id="ae1" edge="1" source="a1" target="a2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="ae2" edge="1" source="a2" target="a3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="be1" edge="1" source="b1" target="b2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="be2" edge="1" source="b2" target="b3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/>
11
+ <mxCell id="collect-a" value="COLLECT · questions · docs · code · tests · time · tokens · user burden" style="text;html=1;fontSize=11;fontColor=#58636D;align=left;" vertex="1" parent="1"><mxGeometry x="105" y="450" width="610" height="30" as="geometry"/></mxCell><mxCell id="collect-b" value="COLLECT · the same artifact classes, under the same stopping rule" style="text;html=1;fontSize=11;fontColor=#58636D;align=left;" vertex="1" parent="1"><mxGeometry x="865" y="450" width="610" height="30" as="geometry"/></mxCell>
12
+ <mxCell id="judge" value="BLIND PAIRWISE JUDGE&lt;br&gt;&lt;b&gt;Anonymize → randomize → swap order&lt;/b&gt;&lt;br&gt;Preflight the packet; repeat ≥ 3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E88773;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="590" y="560" width="420" height="105" as="geometry"/></mxCell>
13
+ <mxCell id="aj" edge="1" source="a-band" target="judge" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="bj" edge="1" source="b-band" target="judge" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/>
14
+ <mxCell id="score" value="&lt;b&gt;SCORE NET VALUE&lt;/b&gt;&lt;br&gt;intent · question value · buildability&lt;br&gt;continuity · burden · cost · ceremony" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="120" y="720" width="280" height="85" as="geometry"/></mxCell>
15
+ <mxCell id="gain" value="Reliable net gain across repeats?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="520" y="710" width="230" height="105" as="geometry"/></mxCell>
16
+ <mxCell id="yes" value="YES · ABLATE&lt;br&gt;&lt;b&gt;Find the causal mechanism&lt;/b&gt;&lt;br&gt;keep only what creates the gain" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F3ED;strokeColor=#9AD8C2;" vertex="1" parent="1"><mxGeometry x="870" y="720" width="250" height="85" as="geometry"/></mxCell>
17
+ <mxCell id="no" value="NO · BE EVIL&lt;br&gt;&lt;b&gt;Simplify, revise, or delete&lt;/b&gt;&lt;br&gt;ceremony gets no sympathy" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="1230" y="720" width="250" height="85" as="geometry"/></mxCell>
18
+ <mxCell id="js" edge="1" source="judge" target="score" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="sg" edge="1" source="score" target="gain" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="gy" value="yes" edge="1" source="gain" target="yes" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="gn" value="no" edge="1" source="gain" target="no" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="635" y="835"/><mxPoint x="1355" y="835"/></Array></mxGeometry></mxCell>
19
+ </root></mxGraphModel>
20
+ </diagram>
21
+ </mxfile>
@@ -1,56 +1,56 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="860" viewBox="0 0 1600 860" role="img" aria-labelledby="title desc">
2
- <title id="title">LOOM Evil Eval</title>
3
- <desc id="desc">A controlled comparison between the same capable Agent without a framework and with LOOM, followed by blinded judging and ablation.</desc>
4
- <defs>
5
- <marker id="a" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0 10 5 0 10Z" fill="#17212B"/></marker>
6
- <marker id="ba" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0 10 5 0 10Z" fill="#4169E1"/></marker>
7
- <style>text{font-family:Inter,Segoe UI,Arial,sans-serif;fill:#17212B}.title{font-size:34px;font-weight:760}.subtitle{font-size:16px;fill:#58636D}.eyebrow{font-size:11px;font-weight:760;letter-spacing:1.35px}.h{font-size:16px;font-weight:720}.body{font-size:12px;fill:#58636D}.small{font-size:11px;font-weight:690}.inverse{fill:#F5F2EA}.mint{fill:#9AD8C2}.edge{fill:none;stroke:#17212B;stroke-width:2.2;marker-end:url(#a)}.feedback{fill:none;stroke:#4169E1;stroke-width:2.3;stroke-dasharray:7 7;marker-end:url(#ba)}</style>
8
- </defs>
9
- <rect width="1600" height="860" fill="#F5F2EA"/>
10
- <text class="title" x="70" y="62">The Evil Eval: does LOOM cause the gain?</text>
11
- <text class="subtitle" x="70" y="92">Primary comparison: the same capable Agent, with and without the framework—not LOOM 2 versus its weaker ancestor.</text>
12
-
13
- <rect x="70" y="128" width="1460" height="92" rx="20" fill="#17212B"/>
14
- <text class="eyebrow mint" x="98" y="158">FREEZE EVERYTHING EXCEPT THE TREATMENT</text>
15
- <g font-family="ui-monospace,SFMono-Regular,Consolas,monospace" font-size="13">
16
- <text class="inverse" x="98" y="190">same model</text><text class="inverse" x="264" y="190">same tools</text><text class="inverse" x="416" y="190">same workspace</text><text class="inverse" x="600" y="190">same hidden user facts</text><text class="inverse" x="846" y="190">same budget</text><text class="inverse" x="996" y="190">same reset schedule</text><text class="inverse" x="1240" y="190">≥ 3 repeats</text>
17
- </g>
18
-
19
- <!-- parallel lanes -->
20
- <g>
21
- <rect x="70" y="258" width="702" height="276" rx="22" fill="#FBFAF6" stroke="#D8D3C8"/>
22
- <rect x="70" y="258" width="10" height="276" rx="5" fill="#C7C2B8"/>
23
- <rect x="828" y="258" width="702" height="276" rx="22" fill="#FBFAF6" stroke="#D8D3C8"/>
24
- <rect x="828" y="258" width="10" height="276" rx="5" fill="#4169E1"/>
25
- <text class="eyebrow" x="104" y="292" fill="#58636D">A · BASELINE</text><text class="h" x="104" y="320">Normal Agent, no LOOM</text>
26
- <text class="eyebrow" x="862" y="292" fill="#4169E1">B · TREATMENT</text><text class="h" x="862" y="320">Same Agent, LOOM available</text>
27
- <g transform="translate(104 352)"><rect width="176" height="88" rx="14" fill="#FFFFFF" stroke="#C7C2B8"/><text class="h" x="14" y="33">Shape the project</text><text class="body" x="14" y="55">questions · decisions</text><text class="body" x="14" y="72">plans · documents</text></g>
28
- <g transform="translate(332 352)"><rect width="176" height="88" rx="14" fill="#F9E4DE" stroke="#E88773"/><text class="h" x="14" y="33">Force reset</text><text class="body" x="14" y="55">after shaping</text><text class="body" x="14" y="72">and mid-Task</text></g>
29
- <g transform="translate(560 352)"><rect width="176" height="88" rx="14" fill="#FFFFFF" stroke="#C7C2B8"/><text class="h" x="14" y="33">Fresh Agent</text><text class="body" x="14" y="55">continue from disk</text><text class="body" x="14" y="72">build vertical slice</text></g>
30
- <path class="edge" d="M280 396H332"/><path class="edge" d="M508 396H560"/>
31
- <g transform="translate(862 352)"><rect width="176" height="88" rx="14" fill="#FFFFFF" stroke="#4169E1"/><text class="h" x="14" y="33">Shape with LOOM</text><text class="body" x="14" y="55">same brief and Agent</text><text class="body" x="14" y="72">treatment only</text></g>
32
- <g transform="translate(1090 352)"><rect width="176" height="88" rx="14" fill="#F9E4DE" stroke="#E88773"/><text class="h" x="14" y="33">Force reset</text><text class="body" x="14" y="55">identical timing</text><text class="body" x="14" y="72">identical budget</text></g>
33
- <g transform="translate(1318 352)"><rect width="176" height="88" rx="14" fill="#E8ECFA" stroke="#4169E1"/><text class="h" x="14" y="33">Fresh Agent</text><text class="body" x="14" y="55">use LOOM disk truth</text><text class="body" x="14" y="72">build vertical slice</text></g>
34
- <path class="edge" d="M1038 396H1090"/><path class="edge" d="M1266 396H1318"/>
35
- <text class="small" x="104" y="483">COLLECT</text><text class="body" x="104" y="505">questions · docs · code · tests · time · tokens · user burden · failure recovery</text>
36
- <text class="small" x="862" y="483">COLLECT</text><text class="body" x="862" y="505">the same artifact classes, under the same stopping rule</text>
37
- </g>
38
-
39
- <!-- judging -->
40
- <g>
41
- <path class="edge" d="M421 534V580H590"/><path class="edge" d="M1179 534V580H1010"/>
42
- <rect x="590" y="558" width="420" height="108" rx="20" fill="#FFFFFF" stroke="#E88773" stroke-width="1.5"/>
43
- <text class="eyebrow" x="800" y="588" text-anchor="middle" fill="#A84D3C">BLIND PAIRWISE JUDGE</text>
44
- <text class="h" x="800" y="617" text-anchor="middle">Anonymize → randomize → swap order</text>
45
- <text class="body" x="800" y="642" text-anchor="middle">Preflight the judge packet; broken harness evidence cannot become product evidence.</text>
46
- </g>
47
- <g transform="translate(122 708)">
48
- <rect width="278" height="84" rx="16" fill="#FFFFFF" stroke="#C7C2B8"/>
49
- <text class="eyebrow" x="16" y="26" fill="#58636D">SCORE NET VALUE</text><text class="body" x="16" y="49">intent · question value · buildability</text><text class="body" x="16" y="67">continuity · burden · cost · ceremony</text>
50
- </g>
51
- <g transform="translate(522 698)"><path d="M114 0 228 52 114 104 0 52Z" fill="#FFFFFF" stroke="#4169E1" stroke-width="1.5"/><text class="h" x="114" y="48" text-anchor="middle">Reliable net gain?</text><text class="body" x="114" y="68" text-anchor="middle">across repeats</text></g>
52
- <g transform="translate(872 708)"><rect width="250" height="84" rx="16" fill="#E3F3ED" stroke="#9AD8C2"/><text class="eyebrow" x="16" y="26" fill="#367D67">YES · ABLATE</text><text class="h" x="16" y="50">Find the causal mechanism</text><text class="body" x="16" y="69">keep only what creates the gain</text></g>
53
- <g transform="translate(1234 708)"><rect width="250" height="84" rx="16" fill="#F9E4DE" stroke="#E88773"/><text class="eyebrow" x="16" y="26" fill="#A84D3C">NO · BE EVIL</text><text class="h" x="16" y="50">Simplify, revise, or delete</text><text class="body" x="16" y="69">ceremony gets no sympathy</text></g>
54
- <path class="edge" d="M590 634H261V708"/><path class="edge" d="M400 750H522"/><path class="edge" d="M750 750H872"/><text class="small" x="792" y="738">YES</text><path class="edge" d="M636 802V826H1359V792"/><text class="small" x="664" y="820">NO</text>
55
- <text class="body" x="70" y="842">A single pilot is directional evidence, not a statistical conclusion. Optional LOOM 1 runs are regression checks—not the primary baseline.</text>
56
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1600" height="860" viewBox="0 0 1600 860" role="img" aria-labelledby="title desc">
2
+ <title id="title">LOOM Evil Eval</title>
3
+ <desc id="desc">A controlled comparison between the same capable Agent without a framework and with LOOM, followed by blinded judging and ablation.</desc>
4
+ <defs>
5
+ <marker id="a" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0 10 5 0 10Z" fill="#17212B"/></marker>
6
+ <marker id="ba" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto"><path d="M0 0 10 5 0 10Z" fill="#4169E1"/></marker>
7
+ <style>text{font-family:Inter,Segoe UI,Arial,sans-serif;fill:#17212B}.title{font-size:34px;font-weight:760}.subtitle{font-size:16px;fill:#58636D}.eyebrow{font-size:11px;font-weight:760;letter-spacing:1.35px}.h{font-size:16px;font-weight:720}.body{font-size:12px;fill:#58636D}.small{font-size:11px;font-weight:690}.inverse{fill:#F5F2EA}.mint{fill:#9AD8C2}.edge{fill:none;stroke:#17212B;stroke-width:2.2;marker-end:url(#a)}.feedback{fill:none;stroke:#4169E1;stroke-width:2.3;stroke-dasharray:7 7;marker-end:url(#ba)}</style>
8
+ </defs>
9
+ <rect width="1600" height="860" fill="#F5F2EA"/>
10
+ <text class="title" x="70" y="62">The Evil Eval: does LOOM cause the gain?</text>
11
+ <text class="subtitle" x="70" y="92">Primary comparison: the same capable Agent, with and without the framework—not LOOM 2 versus its weaker ancestor.</text>
12
+
13
+ <rect x="70" y="128" width="1460" height="92" rx="20" fill="#17212B"/>
14
+ <text class="eyebrow mint" x="98" y="158">FREEZE EVERYTHING EXCEPT THE TREATMENT</text>
15
+ <g font-family="ui-monospace,SFMono-Regular,Consolas,monospace" font-size="13">
16
+ <text class="inverse" x="98" y="190">same model</text><text class="inverse" x="264" y="190">same tools</text><text class="inverse" x="416" y="190">same workspace</text><text class="inverse" x="600" y="190">same hidden user facts</text><text class="inverse" x="846" y="190">same budget</text><text class="inverse" x="996" y="190">same reset schedule</text><text class="inverse" x="1240" y="190">≥ 3 repeats</text>
17
+ </g>
18
+
19
+ <!-- parallel lanes -->
20
+ <g>
21
+ <rect x="70" y="258" width="702" height="276" rx="22" fill="#FBFAF6" stroke="#D8D3C8"/>
22
+ <rect x="70" y="258" width="10" height="276" rx="5" fill="#C7C2B8"/>
23
+ <rect x="828" y="258" width="702" height="276" rx="22" fill="#FBFAF6" stroke="#D8D3C8"/>
24
+ <rect x="828" y="258" width="10" height="276" rx="5" fill="#4169E1"/>
25
+ <text class="eyebrow" x="104" y="292" fill="#58636D">A · BASELINE</text><text class="h" x="104" y="320">Normal Agent, no LOOM</text>
26
+ <text class="eyebrow" x="862" y="292" fill="#4169E1">B · TREATMENT</text><text class="h" x="862" y="320">Same Agent, LOOM available</text>
27
+ <g transform="translate(104 352)"><rect width="176" height="88" rx="14" fill="#FFFFFF" stroke="#C7C2B8"/><text class="h" x="14" y="33">Shape the project</text><text class="body" x="14" y="55">questions · decisions</text><text class="body" x="14" y="72">plans · documents</text></g>
28
+ <g transform="translate(332 352)"><rect width="176" height="88" rx="14" fill="#F9E4DE" stroke="#E88773"/><text class="h" x="14" y="33">Force reset</text><text class="body" x="14" y="55">after shaping</text><text class="body" x="14" y="72">and mid-Task</text></g>
29
+ <g transform="translate(560 352)"><rect width="176" height="88" rx="14" fill="#FFFFFF" stroke="#C7C2B8"/><text class="h" x="14" y="33">Fresh Agent</text><text class="body" x="14" y="55">continue from disk</text><text class="body" x="14" y="72">build vertical slice</text></g>
30
+ <path class="edge" d="M280 396H332"/><path class="edge" d="M508 396H560"/>
31
+ <g transform="translate(862 352)"><rect width="176" height="88" rx="14" fill="#FFFFFF" stroke="#4169E1"/><text class="h" x="14" y="33">Shape with LOOM</text><text class="body" x="14" y="55">same brief and Agent</text><text class="body" x="14" y="72">treatment only</text></g>
32
+ <g transform="translate(1090 352)"><rect width="176" height="88" rx="14" fill="#F9E4DE" stroke="#E88773"/><text class="h" x="14" y="33">Force reset</text><text class="body" x="14" y="55">identical timing</text><text class="body" x="14" y="72">identical budget</text></g>
33
+ <g transform="translate(1318 352)"><rect width="176" height="88" rx="14" fill="#E8ECFA" stroke="#4169E1"/><text class="h" x="14" y="33">Fresh Agent</text><text class="body" x="14" y="55">use LOOM disk truth</text><text class="body" x="14" y="72">build vertical slice</text></g>
34
+ <path class="edge" d="M1038 396H1090"/><path class="edge" d="M1266 396H1318"/>
35
+ <text class="small" x="104" y="483">COLLECT</text><text class="body" x="104" y="505">questions · docs · code · tests · time · tokens · user burden · failure recovery</text>
36
+ <text class="small" x="862" y="483">COLLECT</text><text class="body" x="862" y="505">the same artifact classes, under the same stopping rule</text>
37
+ </g>
38
+
39
+ <!-- judging -->
40
+ <g>
41
+ <path class="edge" d="M421 534V580H590"/><path class="edge" d="M1179 534V580H1010"/>
42
+ <rect x="590" y="558" width="420" height="108" rx="20" fill="#FFFFFF" stroke="#E88773" stroke-width="1.5"/>
43
+ <text class="eyebrow" x="800" y="588" text-anchor="middle" fill="#A84D3C">BLIND PAIRWISE JUDGE</text>
44
+ <text class="h" x="800" y="617" text-anchor="middle">Anonymize → randomize → swap order</text>
45
+ <text class="body" x="800" y="642" text-anchor="middle">Preflight the judge packet; broken harness evidence cannot become product evidence.</text>
46
+ </g>
47
+ <g transform="translate(122 708)">
48
+ <rect width="278" height="84" rx="16" fill="#FFFFFF" stroke="#C7C2B8"/>
49
+ <text class="eyebrow" x="16" y="26" fill="#58636D">SCORE NET VALUE</text><text class="body" x="16" y="49">intent · question value · buildability</text><text class="body" x="16" y="67">continuity · burden · cost · ceremony</text>
50
+ </g>
51
+ <g transform="translate(522 698)"><path d="M114 0 228 52 114 104 0 52Z" fill="#FFFFFF" stroke="#4169E1" stroke-width="1.5"/><text class="h" x="114" y="48" text-anchor="middle">Reliable net gain?</text><text class="body" x="114" y="68" text-anchor="middle">across repeats</text></g>
52
+ <g transform="translate(872 708)"><rect width="250" height="84" rx="16" fill="#E3F3ED" stroke="#9AD8C2"/><text class="eyebrow" x="16" y="26" fill="#367D67">YES · ABLATE</text><text class="h" x="16" y="50">Find the causal mechanism</text><text class="body" x="16" y="69">keep only what creates the gain</text></g>
53
+ <g transform="translate(1234 708)"><rect width="250" height="84" rx="16" fill="#F9E4DE" stroke="#E88773"/><text class="eyebrow" x="16" y="26" fill="#A84D3C">NO · BE EVIL</text><text class="h" x="16" y="50">Simplify, revise, or delete</text><text class="body" x="16" y="69">ceremony gets no sympathy</text></g>
54
+ <path class="edge" d="M590 634H261V708"/><path class="edge" d="M400 750H522"/><path class="edge" d="M750 750H872"/><text class="small" x="792" y="738">YES</text><path class="edge" d="M636 802V826H1359V792"/><text class="small" x="664" y="820">NO</text>
55
+ <text class="body" x="70" y="842">A single pilot is directional evidence, not a statistical conclusion. Optional LOOM 1 runs are regression checks—not the primary baseline.</text>
56
+ </svg>
@@ -1,41 +1,41 @@
1
- <mxfile host="app.diagrams.net" modified="2026-08-09T22:30:00.000Z" agent="Codex" version="24.7.17">
2
- <diagram id="loom-production" name="LOOM Production Loops">
3
- <mxGraphModel dx="1600" dy="1000" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
4
- <root><mxCell id="0"/><mxCell id="1" parent="0"/>
5
- <mxCell id="title" value="One system. Three honest loops." style="text;html=1;fontSize=30;fontStyle=1;fontColor=#17212B;align=left;" vertex="1" parent="1"><mxGeometry x="50" y="30" width="700" height="50" as="geometry"/></mxCell>
6
- <mxCell id="u-band" value="01 · UNDERSTANDING LOOP" style="swimlane;horizontal=1;startSize=52;rounded=1;arcSize=8;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#9AD8C2;fontColor=#367D67;fontStyle=1;fontSize=16;" vertex="1" parent="1"><mxGeometry x="50" y="110" width="1500" height="240" as="geometry"/></mxCell>
7
- <mxCell id="u1" value="HUMAN&lt;br&gt;&lt;b&gt;Natural request&lt;/b&gt;&lt;br&gt;idea · correction · answer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="90" y="205" width="185" height="80" as="geometry"/></mxCell>
8
- <mxCell id="u2" value="AGENT&lt;br&gt;&lt;b&gt;Describe the result&lt;/b&gt;&lt;br&gt;inspect only when relevant" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="325" y="205" width="215" height="80" as="geometry"/></mxCell>
9
- <mxCell id="u3" value="Material unknowns still change the whole?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="590" y="195" width="190" height="100" as="geometry"/></mxCell>
10
- <mxCell id="u4" value="&lt;b&gt;Ask one dense round&lt;/b&gt;&lt;br&gt;adaptive · consequential&lt;br&gt;not a fixed questionnaire" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="830" y="205" width="205" height="80" as="geometry"/></mxCell>
11
- <mxCell id="u5" value="&lt;b&gt;Update project truth&lt;/b&gt;&lt;br&gt;facts · decisions · designs&lt;br&gt;separate field dossiers" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="1085" y="205" width="215" height="80" as="geometry"/></mxCell>
12
- <mxCell id="u6" value="&lt;b&gt;Build-ready&lt;/b&gt;&lt;br&gt;candidate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F3ED;strokeColor=#9AD8C2;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="1350" y="205" width="150" height="80" as="geometry"/></mxCell>
13
- <mxCell id="u-e1" edge="1" source="u1" target="u2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/><mxCell id="u-e2" edge="1" source="u2" target="u3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/><mxCell id="u-e3" value="yes" edge="1" source="u3" target="u4" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/><mxCell id="u-e4" edge="1" source="u4" target="u5" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/>
14
- <mxCell id="u-no" value="no · local gaps only" edge="1" source="u3" target="u6" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="685" y="310"/><mxPoint x="1425" y="310"/></Array></mxGeometry></mxCell>
15
- <mxCell id="u-loop" value="re-evaluate" edge="1" source="u5" target="u3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1190" y="330"/><mxPoint x="685" y="330"/></Array></mxGeometry></mxCell>
16
-
17
- <mxCell id="k-band" value="02 · KEEPER LOOP" style="swimlane;horizontal=1;startSize=52;rounded=1;arcSize=8;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#E88773;fontColor=#A84D3C;fontStyle=1;fontSize=16;" vertex="1" parent="1"><mxGeometry x="50" y="390" width="1500" height="240" as="geometry"/></mxCell>
18
- <mxCell id="k1" value="&lt;b&gt;Validate + freeze digest&lt;/b&gt;&lt;br&gt;PROJECT · designs · dossiers&lt;br&gt;Work Map · first Task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="90" y="485" width="220" height="80" as="geometry"/></mxCell>
19
- <mxCell id="k2" value="FRESH AGENT&lt;br&gt;&lt;b&gt;Independently inspect&lt;/b&gt;&lt;br&gt;same frozen digest" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="360" y="485" width="220" height="80" as="geometry"/></mxCell>
20
- <mxCell id="k3" value="Can responsibly start the first Task?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="630" y="475" width="200" height="100" as="geometry"/></mxCell>
21
- <mxCell id="k4" value="&lt;b&gt;Return exact gaps&lt;/b&gt;&lt;br&gt;needs_revision / blocked&lt;br&gt;evidence · files · consequences" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="880" y="485" width="220" height="80" as="geometry"/></mxCell>
22
- <mxCell id="k5" value="&lt;b&gt;Repair the source&lt;/b&gt;&lt;br&gt;new digest&lt;br&gt;different fresh Keeper" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="1150" y="485" width="180" height="80" as="geometry"/></mxCell>
23
- <mxCell id="k6" value="&lt;b&gt;Passed&lt;/b&gt;&lt;br&gt;handoff once" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F3ED;strokeColor=#9AD8C2;" vertex="1" parent="1"><mxGeometry x="1380" y="485" width="130" height="80" as="geometry"/></mxCell>
24
- <mxCell id="k-e1" edge="1" source="k1" target="k2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-e2" edge="1" source="k2" target="k3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-e3" value="no" edge="1" source="k3" target="k4" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-e4" edge="1" source="k4" target="k5" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-yes" value="yes" edge="1" source="k3" target="k6" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="730" y="450"/><mxPoint x="1445" y="450"/></Array></mxGeometry></mxCell>
25
- <mxCell id="k-loop" value="new digest · new run_id · new Keeper" edge="1" source="k5" target="k2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1240" y="600"/><mxPoint x="470" y="600"/></Array></mxGeometry></mxCell>
26
-
27
- <mxCell id="d-band" value="03 · DELIVERY LOOP" style="swimlane;horizontal=1;startSize=52;rounded=1;arcSize=8;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#4169E1;fontColor=#4169E1;fontStyle=1;fontSize=16;" vertex="1" parent="1"><mxGeometry x="50" y="670" width="1500" height="270" as="geometry"/></mxCell>
28
- <mxCell id="d1" value="&lt;b&gt;Select next Task&lt;/b&gt;&lt;br&gt;dependencies satisfied&lt;br&gt;active horizon only" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="90" y="770" width="180" height="80" as="geometry"/></mxCell>
29
- <mxCell id="d2" value="&lt;b&gt;Compile exact context&lt;/b&gt;&lt;br&gt;reads · constraints&lt;br&gt;done conditions · evidence" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="315" y="770" width="205" height="80" as="geometry"/></mxCell>
30
- <mxCell id="d3" value="&lt;b&gt;Build → observe&lt;/b&gt;&lt;br&gt;test → adjust&lt;br&gt;keep local failures local" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="565" y="770" width="190" height="80" as="geometry"/></mxCell>
31
- <mxCell id="d4" value="Done conditions actually proven?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="800" y="760" width="180" height="100" as="geometry"/></mxCell>
32
- <mxCell id="d5" value="&lt;b&gt;Record exact evidence&lt;/b&gt;&lt;br&gt;complete / block / reopen&lt;br&gt;preserve what comes next" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8ECFA;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="1025" y="770" width="205" height="80" as="geometry"/></mxCell>
33
- <mxCell id="d6" value="More Tasks or new upper gap?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="1275" y="760" width="170" height="100" as="geometry"/></mxCell>
34
- <mxCell id="d7" value="DELIVER" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#17212B;strokeColor=#17212B;fontColor=#F5F2EA;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="1470" y="780" width="60" height="60" as="geometry"/></mxCell>
35
- <mxCell id="d-e1" edge="1" source="d1" target="d2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e2" edge="1" source="d2" target="d3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e3" edge="1" source="d3" target="d4" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e4" value="yes" edge="1" source="d4" target="d5" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e5" edge="1" source="d5" target="d6" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e6" value="done" edge="1" source="d6" target="d7" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/>
36
- <mxCell id="d-local" value="local no · iterate" edge="1" source="d4" target="d3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="890" y="890"/><mxPoint x="660" y="890"/></Array></mxGeometry></mxCell>
37
- <mxCell id="d-more" value="more Tasks · or block → repair upper source → reopen" edge="1" source="d6" target="d1" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1360" y="920"/><mxPoint x="180" y="920"/></Array></mxGeometry></mxCell>
38
- </root>
39
- </mxGraphModel>
40
- </diagram>
41
- </mxfile>
1
+ <mxfile host="app.diagrams.net" modified="2026-08-09T22:30:00.000Z" agent="Codex" version="24.7.17">
2
+ <diagram id="loom-production" name="LOOM Production Loops">
3
+ <mxGraphModel dx="1600" dy="1000" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1600" pageHeight="1000" math="0" shadow="0">
4
+ <root><mxCell id="0"/><mxCell id="1" parent="0"/>
5
+ <mxCell id="title" value="One system. Three honest loops." style="text;html=1;fontSize=30;fontStyle=1;fontColor=#17212B;align=left;" vertex="1" parent="1"><mxGeometry x="50" y="30" width="700" height="50" as="geometry"/></mxCell>
6
+ <mxCell id="u-band" value="01 · UNDERSTANDING LOOP" style="swimlane;horizontal=1;startSize=52;rounded=1;arcSize=8;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#9AD8C2;fontColor=#367D67;fontStyle=1;fontSize=16;" vertex="1" parent="1"><mxGeometry x="50" y="110" width="1500" height="240" as="geometry"/></mxCell>
7
+ <mxCell id="u1" value="HUMAN&lt;br&gt;&lt;b&gt;Natural request&lt;/b&gt;&lt;br&gt;idea · correction · answer" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="90" y="205" width="185" height="80" as="geometry"/></mxCell>
8
+ <mxCell id="u2" value="AGENT&lt;br&gt;&lt;b&gt;Describe the result&lt;/b&gt;&lt;br&gt;inspect only when relevant" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="325" y="205" width="215" height="80" as="geometry"/></mxCell>
9
+ <mxCell id="u3" value="Material unknowns still change the whole?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="590" y="195" width="190" height="100" as="geometry"/></mxCell>
10
+ <mxCell id="u4" value="&lt;b&gt;Ask one dense round&lt;/b&gt;&lt;br&gt;adaptive · consequential&lt;br&gt;not a fixed questionnaire" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="830" y="205" width="205" height="80" as="geometry"/></mxCell>
11
+ <mxCell id="u5" value="&lt;b&gt;Update project truth&lt;/b&gt;&lt;br&gt;facts · decisions · designs&lt;br&gt;separate field dossiers" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="1085" y="205" width="215" height="80" as="geometry"/></mxCell>
12
+ <mxCell id="u6" value="&lt;b&gt;Build-ready&lt;/b&gt;&lt;br&gt;candidate" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F3ED;strokeColor=#9AD8C2;fontColor=#17212B;" vertex="1" parent="1"><mxGeometry x="1350" y="205" width="150" height="80" as="geometry"/></mxCell>
13
+ <mxCell id="u-e1" edge="1" source="u1" target="u2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/><mxCell id="u-e2" edge="1" source="u2" target="u3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/><mxCell id="u-e3" value="yes" edge="1" source="u3" target="u4" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/><mxCell id="u-e4" edge="1" source="u4" target="u5" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"/>
14
+ <mxCell id="u-no" value="no · local gaps only" edge="1" source="u3" target="u6" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;endArrow=block;strokeColor=#17212B;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="685" y="310"/><mxPoint x="1425" y="310"/></Array></mxGeometry></mxCell>
15
+ <mxCell id="u-loop" value="re-evaluate" edge="1" source="u5" target="u3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1190" y="330"/><mxPoint x="685" y="330"/></Array></mxGeometry></mxCell>
16
+
17
+ <mxCell id="k-band" value="02 · KEEPER LOOP" style="swimlane;horizontal=1;startSize=52;rounded=1;arcSize=8;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#E88773;fontColor=#A84D3C;fontStyle=1;fontSize=16;" vertex="1" parent="1"><mxGeometry x="50" y="390" width="1500" height="240" as="geometry"/></mxCell>
18
+ <mxCell id="k1" value="&lt;b&gt;Validate + freeze digest&lt;/b&gt;&lt;br&gt;PROJECT · designs · dossiers&lt;br&gt;Work Map · first Task" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="90" y="485" width="220" height="80" as="geometry"/></mxCell>
19
+ <mxCell id="k2" value="FRESH AGENT&lt;br&gt;&lt;b&gt;Independently inspect&lt;/b&gt;&lt;br&gt;same frozen digest" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="360" y="485" width="220" height="80" as="geometry"/></mxCell>
20
+ <mxCell id="k3" value="Can responsibly start the first Task?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="630" y="475" width="200" height="100" as="geometry"/></mxCell>
21
+ <mxCell id="k4" value="&lt;b&gt;Return exact gaps&lt;/b&gt;&lt;br&gt;needs_revision / blocked&lt;br&gt;evidence · files · consequences" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F9E4DE;strokeColor=#E88773;" vertex="1" parent="1"><mxGeometry x="880" y="485" width="220" height="80" as="geometry"/></mxCell>
22
+ <mxCell id="k5" value="&lt;b&gt;Repair the source&lt;/b&gt;&lt;br&gt;new digest&lt;br&gt;different fresh Keeper" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="1150" y="485" width="180" height="80" as="geometry"/></mxCell>
23
+ <mxCell id="k6" value="&lt;b&gt;Passed&lt;/b&gt;&lt;br&gt;handoff once" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E3F3ED;strokeColor=#9AD8C2;" vertex="1" parent="1"><mxGeometry x="1380" y="485" width="130" height="80" as="geometry"/></mxCell>
24
+ <mxCell id="k-e1" edge="1" source="k1" target="k2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-e2" edge="1" source="k2" target="k3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-e3" value="no" edge="1" source="k3" target="k4" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-e4" edge="1" source="k4" target="k5" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="k-yes" value="yes" edge="1" source="k3" target="k6" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="730" y="450"/><mxPoint x="1445" y="450"/></Array></mxGeometry></mxCell>
25
+ <mxCell id="k-loop" value="new digest · new run_id · new Keeper" edge="1" source="k5" target="k2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1240" y="600"/><mxPoint x="470" y="600"/></Array></mxGeometry></mxCell>
26
+
27
+ <mxCell id="d-band" value="03 · DELIVERY LOOP" style="swimlane;horizontal=1;startSize=52;rounded=1;arcSize=8;fillColor=#FBFAF6;swimlaneFillColor=#FBFAF6;strokeColor=#4169E1;fontColor=#4169E1;fontStyle=1;fontSize=16;" vertex="1" parent="1"><mxGeometry x="50" y="670" width="1500" height="270" as="geometry"/></mxCell>
28
+ <mxCell id="d1" value="&lt;b&gt;Select next Task&lt;/b&gt;&lt;br&gt;dependencies satisfied&lt;br&gt;active horizon only" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="90" y="770" width="180" height="80" as="geometry"/></mxCell>
29
+ <mxCell id="d2" value="&lt;b&gt;Compile exact context&lt;/b&gt;&lt;br&gt;reads · constraints&lt;br&gt;done conditions · evidence" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="315" y="770" width="205" height="80" as="geometry"/></mxCell>
30
+ <mxCell id="d3" value="&lt;b&gt;Build → observe&lt;/b&gt;&lt;br&gt;test → adjust&lt;br&gt;keep local failures local" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#C7C2B8;" vertex="1" parent="1"><mxGeometry x="565" y="770" width="190" height="80" as="geometry"/></mxCell>
31
+ <mxCell id="d4" value="Done conditions actually proven?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="800" y="760" width="180" height="100" as="geometry"/></mxCell>
32
+ <mxCell id="d5" value="&lt;b&gt;Record exact evidence&lt;/b&gt;&lt;br&gt;complete / block / reopen&lt;br&gt;preserve what comes next" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E8ECFA;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="1025" y="770" width="205" height="80" as="geometry"/></mxCell>
33
+ <mxCell id="d6" value="More Tasks or new upper gap?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#4169E1;" vertex="1" parent="1"><mxGeometry x="1275" y="760" width="170" height="100" as="geometry"/></mxCell>
34
+ <mxCell id="d7" value="DELIVER" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#17212B;strokeColor=#17212B;fontColor=#F5F2EA;fontStyle=1;" vertex="1" parent="1"><mxGeometry x="1470" y="780" width="60" height="60" as="geometry"/></mxCell>
35
+ <mxCell id="d-e1" edge="1" source="d1" target="d2" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e2" edge="1" source="d2" target="d3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e3" edge="1" source="d3" target="d4" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e4" value="yes" edge="1" source="d4" target="d5" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e5" edge="1" source="d5" target="d6" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/><mxCell id="d-e6" value="done" edge="1" source="d6" target="d7" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;"/>
36
+ <mxCell id="d-local" value="local no · iterate" edge="1" source="d4" target="d3" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="890" y="890"/><mxPoint x="660" y="890"/></Array></mxGeometry></mxCell>
37
+ <mxCell id="d-more" value="more Tasks · or block → repair upper source → reopen" edge="1" source="d6" target="d1" parent="1" style="edgeStyle=orthogonalEdgeStyle;html=1;rounded=1;dashed=1;dashPattern=8 8;endArrow=block;strokeColor=#4169E1;fontColor=#4169E1;"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1360" y="920"/><mxPoint x="180" y="920"/></Array></mxGeometry></mxCell>
38
+ </root>
39
+ </mxGraphModel>
40
+ </diagram>
41
+ </mxfile>