fn compare_versions(client: Version, server: Version, constraint: proto::VersionRange) -> bool {
    match constraint {
        proto::VersionRange::Exact => client == server,
        proto::VersionRange::Patch => {
            client.major == server.major
                && client.minor == server.minor
                && client.patch <= server.patch
        }
        proto::VersionRange::Minor => client.major == server.major && client.minor <= server.minor,
        // changes to major version is always incompatible
        proto::VersionRange::Major => client.major == server.major,
    }
}
Determine whether a server can serve a client's request based on its
version.

When the `proto::VersionRange` is anything other than `Exact` it means that
the server's version must exceed the client's version. For example, if the
client is `1.2.3` and the server is `1.2.4`, then the client's request can
be served if the `proto::VersionRange` is `Patch`, `Minor`, or `Major`.
However, if the server is `1.3.0`, then the client's request can only be
served if the `proto::VersionRange` is `Minor` or `Major`.
crates/turborepo-lib/src/daemon/server.rs