|
<svg xmlns="http://www.w3.org/2000/svg" width="1320" height="760" viewBox="0 0 1320 760"> |
|
<style> |
|
.bg { fill: #f7f8fa; } |
|
.panel { fill: #ffffff; stroke: #d8dee8; stroke-width: 1; } |
|
.title { fill: #111827; font: 700 26px Inter, Arial, sans-serif; } |
|
.muted { fill: #64748b; font: 18px Inter, Arial, sans-serif; } |
|
.label { fill: #64748b; font: 15px Inter, Arial, sans-serif; } |
|
.note { fill: #334155; font: 17px Inter, Arial, sans-serif; } |
|
.run { fill: #5b9bf6; } |
|
.auto { fill: #f4b740; } |
|
.axis { stroke: #cbd5e1; stroke-width: 2; } |
|
.chip { fill: #ffffff; stroke: #2563eb; stroke-width: 3; } |
|
.chipText { fill: #2563eb; font: 800 16px Inter, Arial, sans-serif; } |
|
.bad { fill: #fee2e2; stroke: #ef4444; stroke-width: 2; } |
|
.good { fill: #dcfce7; stroke: #16a34a; stroke-width: 2; } |
|
</style> |
|
<rect class="bg" width="1320" height="760"/> |
|
<text x="60" y="64" class="title">Kickoff attribution: stale later run no longer inherits the edge</text> |
|
<text x="60" y="98" class="muted">Synthetic two-run case matching the regression test: one board kickoff edge, then a later automation run for the same actor and issue.</text> |
|
|
|
<rect x="60" y="140" width="560" height="500" rx="8" class="panel"/> |
|
<text x="92" y="186" class="title">Before</text> |
|
<text x="92" y="216" class="muted">The same kickoff edge could be reused.</text> |
|
<g transform="translate(92 310)"> |
|
<line x1="0" y1="100" x2="460" y2="100" class="axis"/> |
|
<text x="0" y="136" class="label">09:00</text> |
|
<text x="210" y="136" class="label">10:00</text> |
|
<text x="420" y="136" class="label">11:00</text> |
|
<rect x="24" y="60" width="90" height="34" class="run" rx="6"/> |
|
<text x="32" y="52" class="label">Closest assigned run</text> |
|
<circle cx="24" cy="58" r="18" class="chip"/> |
|
<text x="14" y="64" class="chipText">BO</text> |
|
<rect x="330" y="60" width="80" height="34" class="auto" rx="6"/> |
|
<text x="302" y="52" class="label">Later automation run</text> |
|
<circle cx="330" cy="58" r="18" class="bad"/> |
|
<text x="320" y="64" class="chipText">BO</text> |
|
</g> |
|
<text x="92" y="560" class="note">Problem: the later automation bar appeared delegated by the board even though the kickoff edge belonged to the earlier run.</text> |
|
|
|
<rect x="700" y="140" width="560" height="500" rx="8" class="panel"/> |
|
<text x="732" y="186" class="title">After this PR</text> |
|
<text x="732" y="216" class="muted">Each edge is assigned to only its closest matching run.</text> |
|
<g transform="translate(732 310)"> |
|
<line x1="0" y1="100" x2="460" y2="100" class="axis"/> |
|
<text x="0" y="136" class="label">09:00</text> |
|
<text x="210" y="136" class="label">10:00</text> |
|
<text x="420" y="136" class="label">11:00</text> |
|
<rect x="24" y="60" width="90" height="34" class="run" rx="6"/> |
|
<text x="32" y="52" class="label">Closest assigned run</text> |
|
<circle cx="24" cy="58" r="18" class="chip"/> |
|
<text x="14" y="64" class="chipText">BO</text> |
|
<rect x="330" y="60" width="80" height="34" class="auto" rx="6"/> |
|
<text x="302" y="52" class="label">Later automation run</text> |
|
<rect x="312" y="20" width="150" height="32" class="good" rx="16"/> |
|
<text x="330" y="42" class="label">No stale chip</text> |
|
</g> |
|
<text x="732" y="560" class="note">Expected result: the board chip stays on the closest run; the later automation run remains automation-colored and unchipped.</text> |
|
</svg> |