> a time series CRDT is... just an append-only log, sure you can call it a CRDT, but it doesn't really have any meaningful properties. So what's the point of calling this a CRDT?
I'm confused by this question. I don't think it's true that "a time series CRDT is just an append-only log". In Roshi, each object is identified by a key, and LWWSet semantics are provided via the timestamp. It's a CRDT because writing the same key repeatedly with different timestamps results in a single "winner" being kept in storage; if it were an append-only log, that wouldn't be true. Right?
> LWW Last Write Wins is also an odd choice, because the notion of "last" doesn't exist in a distributed system - last according to who? When? What about clock drift? If who, then do you rely upon an authority? Then you aren't a CRDT.
I'm also confused by this question. LWWSet requires a concept of "last", it's even right there in the name. And the documentation clearly indicates that Roshi's "last" is clock time of the node that processes the request. As long as you ensure that time is unique and monotonic (usually by including things like node ID and a per-node monotonic counter) then it's absolutely sufficient to act as the timestamp component of a LWWSet. If there is clock drift between nodes, then a write W1 against some node may actually "beat" a later write W2 against another node with a slower clock, but in terms of correctness, that doesn't actually matter: the write conflict still resolves deterministically.
> What benefits does this give over just using timestamps series into Redis directly?
I'm also confused by this question, and I'm not quite sure how to answer it. The operation semantics, and the benefits they confer, are quite exhaustively described in the README. You might also check the READMEs in the cluster and farm subdirectories, which go into more detail. What specifically don't you understand?