<?xml version="1.0" encoding="UTF-8"?>
<mxfile host="drawio" version="26.0.0">
  <diagram name="Architecture">
    <mxGraphModel dx="1422" dy="794" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1900" pageHeight="1200" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
        <mxCell id="title" value="Chat ownership、心跳与恢复图" style="text;html=1;strokeColor=none;fillColor=none;fontSize=26;fontColor=#263238;fontStyle=1;align=left;verticalAlign=middle;whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="50" y="25" width="1800" height="42" as="geometry"/></mxCell>
        <mxCell id="runtime-a" value="Runtime A" style="swimlane;startSize=36;html=1;container=1;collapsible=0;pointerEvents=0;fillColor=#e9f5ec;swimlaneFillColor=#ffffff;strokeColor=#4f8a5b;fontColor=#263238;fontSize=15;fontStyle=1;dashed=0;strokeWidth=1.5;rounded=0;shadow=0" vertex="1" parent="1"><mxGeometry x="50" y="150" width="390" height="850" as="geometry"/></mxCell>
        <mxCell id="claim" value="1 · Claim owner CAS&#xa;replica_id + token + epoch" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f1eafa;strokeColor=#8064a2;fontColor=#263238;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-a"><mxGeometry x="55" y="70" width="280" height="90" as="geometry"/></mxCell>
        <mxCell id="running" value="2 · Agent running&#xa;TaskRuns + Session" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-a"><mxGeometry x="55" y="220" width="280" height="80" as="geometry"/></mxCell>
        <mxCell id="guarded" value="3 · Guarded writes&#xa;session / status / archive" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f1eafa;strokeColor=#8064a2;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-a"><mxGeometry x="55" y="360" width="280" height="90" as="geometry"/></mxCell>
        <mxCell id="heartbeat" value="4 · Replica heartbeat&#xa;status + task_count" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-a"><mxGeometry x="55" y="510" width="280" height="80" as="geometry"/></mxCell>
        <mxCell id="shutdown" value="正常关停&#xa;maintenance → pause → flush → archive" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fff6d9;strokeColor=#c28b20;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-a"><mxGeometry x="55" y="650" width="280" height="100" as="geometry"/></mxCell>
        <mxCell id="selffence" value="Self-fence&#xa;maintenance → cancel → exit" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fdeaea;strokeColor=#b85450;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-a"><mxGeometry x="55" y="775" width="280" height="60" as="geometry"/></mxCell>
        <mxCell id="database" value="共享数据库事实源" style="swimlane;startSize=36;html=1;container=1;collapsible=0;pointerEvents=0;fillColor=#e5f5f3;swimlaneFillColor=#ffffff;strokeColor=#3c8d87;fontColor=#263238;fontSize=15;fontStyle=1;dashed=0;strokeWidth=1.5;rounded=0;shadow=0" vertex="1" parent="1"><mxGeometry x="520" y="130" width="500" height="920" as="geometry"/></mxCell>
        <mxCell id="chat" value="my_chat&#xa;status · owner_replica_id&#xa;owner_token · owner_epoch" style="shape=cylinder3;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="database"><mxGeometry x="75" y="75" width="350" height="120" as="geometry"/></mxCell>
        <mxCell id="replica" value="myagents_runtime_replica&#xa;heartbeat · status · reconciled_at" style="shape=cylinder3;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="database"><mxGeometry x="75" y="250" width="350" height="110" as="geometry"/></mxCell>
        <mxCell id="recovery" value="Chat recovery record&#xa;checkpoint · route key · lease · token" style="shape=cylinder3;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fff6d9;strokeColor=#c28b20;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="database"><mxGeometry x="75" y="435" width="350" height="110" as="geometry"/></mxCell>
        <mxCell id="guardcheck" value="所有写入比较完整 ownership guard&#xa;旧 epoch / token 不再生效" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f1eafa;strokeColor=#8064a2;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="database"><mxGeometry x="75" y="620" width="350" height="95" as="geometry"/></mxCell>
        <mxCell id="truthnote" value="数据库是跨副本事实源&#xa;本地任务表只表示当前进程运行态" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f3f5f7;strokeColor=#68737d;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="database"><mxGeometry x="75" y="790" width="350" height="75" as="geometry"/></mxCell>
        <mxCell id="gateway" value="Gateway / 组合角色 · Replica Monitor Leader" style="swimlane;startSize=36;html=1;container=1;collapsible=0;pointerEvents=0;fillColor=#fff0df;swimlaneFillColor=#ffffff;strokeColor=#c96f2d;fontColor=#263238;fontSize=15;fontStyle=1;dashed=0;strokeWidth=1.5;rounded=0;shadow=0" vertex="1" parent="1"><mxGeometry x="1100" y="150" width="390" height="850" as="geometry"/></mxCell>
        <mxCell id="scan" value="5 · 扫描心跳&#xa;30s suspect / 60s expired" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fff6d9;strokeColor=#c28b20;fontColor=#263238;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="gateway"><mxGeometry x="55" y="75" width="280" height="90" as="geometry"/></mxCell>
        <mxCell id="expire" value="6 · CAS 标记 expired&#xa;先 fence 副本身份" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fdeaea;strokeColor=#b85450;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="gateway"><mxGeometry x="55" y="230" width="280" height="85" as="geometry"/></mxCell>
        <mxCell id="settle" value="7 · 按完整 owner guard&#xa;收口 running Chat" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fdeaea;strokeColor=#b85450;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="gateway"><mxGeometry x="55" y="375" width="280" height="90" as="geometry"/></mxCell>
        <mxCell id="wait" value="8 · 恢复静默窗口&#xa;60 秒" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fff6d9;strokeColor=#c28b20;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="gateway"><mxGeometry x="55" y="525" width="280" height="70" as="geometry"/></mxCell>
        <mxCell id="dispatch" value="9 · 领取恢复记录&#xa;租约 + 退避 + 稳定路由键" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fff0df;strokeColor=#c96f2d;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="gateway"><mxGeometry x="55" y="660" width="280" height="100" as="geometry"/></mxCell>
        <mxCell id="monitorplan" value="规划：完整多副本故障演练" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f1eafa;strokeColor=#8064a2;fontColor=#263238;fontSize=12;fontStyle=0;dashed=1;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="gateway"><mxGeometry x="55" y="790" width="280" height="55" as="geometry"/></mxCell>
        <mxCell id="runtime-b" value="Runtime B · 恢复目标" style="swimlane;startSize=36;html=1;container=1;collapsible=0;pointerEvents=0;fillColor=#e9f5ec;swimlaneFillColor=#ffffff;strokeColor=#4f8a5b;fontColor=#263238;fontSize=15;fontStyle=1;dashed=0;strokeWidth=1.5;rounded=0;shadow=0" vertex="1" parent="1"><mxGeometry x="1570" y="220" width="280" height="750" as="geometry"/></mxCell>
        <mxCell id="recoverapi" value="10 · /runtime/recover" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#fff0df;strokeColor=#c96f2d;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-b"><mxGeometry x="35" y="80" width="210" height="70" as="geometry"/></mxCell>
        <mxCell id="recovercas" value="11 · 单条恢复 CAS&#xa;recovery + token + epoch + owner empty" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f1eafa;strokeColor=#8064a2;fontColor=#263238;fontSize=13;fontStyle=1;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-b"><mxGeometry x="35" y="220" width="210" height="110" as="geometry"/></mxCell>
        <mxCell id="resume" value="12 · 新 owner guard&#xa;恢复 Agent / Session" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=13;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-b"><mxGeometry x="35" y="390" width="210" height="90" as="geometry"/></mxCell>
        <mxCell id="conflict" value="并发请求未取得 owner&#xa;返回 409" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f3f5f7;strokeColor=#68737d;fontColor=#263238;fontSize=11;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-b"><mxGeometry x="35" y="515" width="210" height="55" as="geometry"/></mxCell>
        <mxCell id="resumesemantics" value="续写原 assistant 消息&#xa;不新增用户消息" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=11;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="runtime-b"><mxGeometry x="35" y="610" width="210" height="70" as="geometry"/></mxCell>
        <mxCell id="claim-chat" value="CAS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.25;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="claim" target="chat"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="claim-running" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="claim" target="running"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="running-guarded" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="running" target="guarded"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="guarded-check" value="校验 guard" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="guarded" target="guardcheck"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="heartbeat-replica" value="upsert" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="heartbeat" target="replica"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="shutdown-recovery" value="写 checkpoint" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.7;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="shutdown" target="recovery"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="scan-replica" value="读取" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.3;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="scan" target="replica"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="scan-expire" value="超时" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="scan" target="expire"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="expire-replica" value="CAS expired" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.7;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="expire" target="replica"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="expire-settle" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="expire" target="settle"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="settle-chat" value="旧 guard 匹配才失败" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0;exitY=0.5;entryX=1;entryY=0.75;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="settle" target="chat"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="replica-selffence" value="记录失效" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0;exitY=0.9;entryX=1;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="replica" target="selffence"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="settle-wait" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="settle" target="wait"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="wait-dispatch" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="wait" target="dispatch"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="recovery-dispatch" value="领取 / 租约" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.4;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="recovery" target="dispatch"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="dispatch-recover" value="X-Route-Chat-Id" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="dispatch" target="recoverapi"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="api-cas" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="recoverapi" target="recovercas"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="cas-chat" value="新 owner CAS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0;exitY=0.4;entryX=1;entryY=0.4;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="recovercas" target="chat"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1520" y="500"/><mxPoint x="1050" y="500"/></Array></mxGeometry></mxCell>
        <mxCell id="cas-resume" value="成功" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="recovercas" target="resume"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="cas-conflict" value="失败" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=1;endArrow=block;endFill=1;exitX=0.8;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="recovercas" target="conflict"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="resume-semantics" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#64748b;fontColor=#475569;fontSize=11;strokeWidth=1.5;dashed=0;endArrow=block;endFill=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0" edge="1" parent="1" source="resume" target="resumesemantics"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
        <mxCell id="legend-current" value="当前已落地" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#e9f5ec;strokeColor=#4f8a5b;fontColor=#263238;fontSize=12;fontStyle=0;dashed=0;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="1"><mxGeometry x="50" y="1100" width="150" height="36" as="geometry"/></mxCell>
        <mxCell id="legend-planned" value="规划 / 待完善" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#f1eafa;strokeColor=#8064a2;fontColor=#263238;fontSize=12;fontStyle=0;dashed=1;strokeWidth=1.5;spacing=8;align=center;verticalAlign=middle;shadow=0" vertex="1" parent="1"><mxGeometry x="220" y="1100" width="160" height="36" as="geometry"/></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
