7a4d55ec9a
When jobs within the same declared GitLab stage have needs: relationships between each other, the pipeline graph now splits that stage into topological sub-columns: jobs with no same-stage deps are in sub-column 0, jobs that depend on them shift one column right. A new computeColumns() function handles the topo-sort; a narrower subStageGap (20 px vs 50 px stageGap) separates sub-columns; stage headers span all sub-columns. SVG connector lines (Bézier curves in DAG mode, bus-bar stubs in classic mode) are now emitted before job chip rectangles so connectors visually pass behind chips rather than on top of them. 100% statement coverage maintained (99 tests in graph package). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>