digraph ReleaseTimeline {
    rankdir=LR;
    node [shape=box, style=rounded, fontsize=10, width=1.5, fontname="Helvetica"];

    subgraph cluster_dev {
        label="Development";
        style=dashed;
        color=blue;
        node [fillcolor=lightblue, style=filled];
        "dev/X.Y";
    }

    subgraph cluster_rc {
        label="Release Candidate";
        style=dashed;
        color=orange;
        node [fillcolor=orange, style=filled];
        "RC";
    }

    subgraph cluster_stable {
        label="Stable Release";
        style=dashed;
        color=green;
        node [fillcolor=lightgreen, style=filled];
        "release";
    }

    // Release steps with actions
    "freeze" [label="Freeze", shape=ellipse, style=dotted, fontcolor=red];
    "dev/X.Y" [label="dev/X.Y\n(Development)", fillcolor=lightblue];
    "RC" [label="RC\n(Release Candidate)", fillcolor=orange];
    "release" [label="Release\n(Final)", fillcolor=lightgreen];

    // Connect the steps with actions
    "freeze" -> "dev/X.Y" [label="      "];
    "dev/X.Y" -> "RC" [label="      "];
    "RC" -> "release" [label="      "];

    // Date connections (freeze -> dev/X.Y -> RC -> release)
    "2025-01-21" -> "2025-02-04" -> "2025-02-18" -> "2025-03-04";
    "2025-05-20" -> "2025-06-03" -> "2025-06-17" -> "2025-07-01";
    "2025-09-23" -> "2025-10-07" -> "2025-10-21" -> "2025-11-04";
}
