<mxfile host="Electron" modified="2026-09-15T00:00:00.000Z" agent="draw.io" version="24.7.17">
  <diagram id="legacy-modernization-sequence" name="Shadow-mode Cutover">
    <mxGraphModel dx="1100" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1000" pageHeight="900" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>

        <mxCell id="title" value="Shadow-mode cutover · externalized rating rule" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Helvetica;fontSize=24;fontStyle=1;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="30" y="20" width="760" height="36" as="geometry"/></mxCell>
        <mxCell id="subtitle" value="The modern service evaluates a published GoRules decision, then reconciles its result against the legacy path before retirement." style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontFamily=Helvetica;fontSize=12;fontColor=#647069;" vertex="1" parent="1"><mxGeometry x="30" y="55" width="900" height="30" as="geometry"/></mxCell>

        <mxCell id="client" value="Agent / API&lt;br&gt;client" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#647069;fillColor=#FFFFFF;fontFamily=Helvetica;fontSize=11;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="20" y="100" width="125" height="52" as="geometry"/></mxCell>
        <mxCell id="gateway" value="API gateway" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#647069;fillColor=#FFFFFF;fontFamily=Helvetica;fontSize=11;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="180" y="100" width="125" height="52" as="geometry"/></mxCell>
        <mxCell id="service" value="New rating&lt;br&gt;service" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#E17A56;strokeWidth=2;fillColor=#F3E8DA;fontFamily=Helvetica;fontSize=11;fontStyle=1;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="340" y="100" width="125" height="52" as="geometry"/></mxCell>
        <mxCell id="rules" value="GoRules Agent&lt;br&gt;age-surcharge decision" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#E17A56;strokeWidth=2;fillColor=#F3E8DA;fontFamily=Helvetica;fontSize=11;fontStyle=1;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="500" y="100" width="140" height="52" as="geometry"/></mxCell>
        <mxCell id="legacy" value="Legacy Sybase&lt;br&gt;core" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#9F4C35;fillColor=#FFFFFF;fontFamily=Helvetica;fontSize=11;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="675" y="100" width="125" height="52" as="geometry"/></mxCell>
        <mxCell id="cdc" value="CDC&lt;br&gt;Flink + Kafka" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#9F4C35;fillColor=#FFFFFF;fontFamily=Helvetica;fontSize=11;fontColor=#14231E;" vertex="1" parent="1"><mxGeometry x="835" y="100" width="125" height="52" as="geometry"/></mxCell>

        <mxCell id="life1" style="edgeStyle=none;html=1;strokeColor=#AAB2AD;dashed=1;dashPattern=5 5;endArrow=none;startArrow=none;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="82" y="152" as="sourcePoint"/><mxPoint x="82" y="760" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="life2" style="edgeStyle=none;html=1;strokeColor=#AAB2AD;dashed=1;dashPattern=5 5;endArrow=none;startArrow=none;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="242" y="152" as="sourcePoint"/><mxPoint x="242" y="760" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="life3" style="edgeStyle=none;html=1;strokeColor=#AAB2AD;dashed=1;dashPattern=5 5;endArrow=none;startArrow=none;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="402" y="152" as="sourcePoint"/><mxPoint x="402" y="760" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="life4" style="edgeStyle=none;html=1;strokeColor=#AAB2AD;dashed=1;dashPattern=5 5;endArrow=none;startArrow=none;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="570" y="152" as="sourcePoint"/><mxPoint x="570" y="760" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="life5" style="edgeStyle=none;html=1;strokeColor=#AAB2AD;dashed=1;dashPattern=5 5;endArrow=none;startArrow=none;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="737" y="152" as="sourcePoint"/><mxPoint x="737" y="760" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="life6" style="edgeStyle=none;html=1;strokeColor=#AAB2AD;dashed=1;dashPattern=5 5;endArrow=none;startArrow=none;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="897" y="152" as="sourcePoint"/><mxPoint x="897" y="760" as="targetPoint"/></mxGeometry></mxCell>

        <mxCell id="m1" value="01 · Premium quote request" style="edgeStyle=none;html=1;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="83" y="200" as="sourcePoint"/><mxPoint x="241" y="200" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m2" value="02 · Route to modern service" style="edgeStyle=none;html=1;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="243" y="260" as="sourcePoint"/><mxPoint x="401" y="260" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m3" value="03 · Evaluate age-surcharge decision" style="edgeStyle=none;html=1;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="403" y="320" as="sourcePoint"/><mxPoint x="569" y="320" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m4" value="04 · Result + published rule version" style="edgeStyle=none;html=1;dashed=1;dashPattern=6 4;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="569" y="380" as="sourcePoint"/><mxPoint x="403" y="380" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="processing" value="05 · Assemble quote from rule result" style="rounded=0;whiteSpace=wrap;html=1;strokeColor=#E17A56;fillColor=#F3E8DA;fontFamily=Helvetica;fontSize=10;fontColor=#14231E;align=left;spacingLeft=10;" vertex="1" parent="1"><mxGeometry x="402" y="420" width="235" height="38" as="geometry"/></mxCell>
        <mxCell id="m6" value="06 · Shadow result" style="edgeStyle=none;html=1;dashed=1;dashPattern=6 4;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="403" y="500" as="sourcePoint"/><mxPoint x="736" y="500" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m7" value="07 · Existing legacy writes" style="edgeStyle=none;html=1;dashed=1;dashPattern=6 4;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="738" y="560" as="sourcePoint"/><mxPoint x="896" y="560" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m8" value="08 · Reconcile and compare outputs" style="edgeStyle=none;html=1;dashed=1;dashPattern=6 4;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="896" y="620" as="sourcePoint"/><mxPoint x="403" y="620" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m9" value="09 · Quote + rule version" style="edgeStyle=none;html=1;dashed=1;dashPattern=6 4;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="401" y="680" as="sourcePoint"/><mxPoint x="243" y="680" as="targetPoint"/></mxGeometry></mxCell>
        <mxCell id="m10" value="10 · Response" style="edgeStyle=none;html=1;dashed=1;dashPattern=6 4;strokeColor=#9F4C35;fontColor=#43514B;fontSize=10;endArrow=block;endFill=1;" edge="1" parent="1"><mxGeometry relative="1" as="geometry"><mxPoint x="241" y="740" as="sourcePoint"/><mxPoint x="83" y="740" as="targetPoint"/></mxGeometry></mxCell>

        <mxCell id="note" value="Cutover control: compare modern and legacy outputs until variance is within the agreed threshold, then retire the legacy rule path." style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;size=16;strokeColor=#9F4C35;fillColor=#F3E8DA;fontFamily=Helvetica;fontSize=11;fontColor=#14231E;align=left;verticalAlign=middle;spacing=10;" vertex="1" parent="1"><mxGeometry x="330" y="780" width="480" height="62" as="geometry"/></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
