GEP Ultra — K5 dense graph (bài toán khó)

5 nodes radius 78px, 10 edges đều multi-char labels ("12/20", "9/14", "5/15"…), node_r=18 — midpoints dồn về tâm, budget along cực thấp.

GEP v1.2 (naive) BAD

GEP Ultra (2+5+3+4 combined) GOOD

origin (on-stroke) along-shift / saturate perp (off-stroke) fallback (unresolved)

Ultra cascade — 6 stages

Mỗi pill thử từ trái sang phải. Dừng ngay khi stage đầu tiên resolve.

Stage 0 — OriginThử mid-point trước tiên (GEP-06).
Stage 1 — AlongProbes ±step, ±2·step. Skip nếu > budget.
Stage 1.5 — Saturate ★Nếu step > budget > 0, probe đúng ±budget (Opt 5).
Stage 2 — Perp (side-prefer)+perp, +2·perp trước, rồi flip (Opt 2 anti-flicker).
Stage 3 — Shrink ★Font 11→9, pad 5→3. Retry cascade (Opt 3).
Stage 4 — Relax node ★Budget chấp nhận pill chạm node 40% (Opt 4).

Per-edge breakdown