Here's how I see it working: the ECP1 proposal is standalone. If we
want to make additions to it, we do so before we approve it. Once it's
approved, we cannot extend ECP1 and we will have to build ECP2 (which
will be a superset of ECP1). We need to have clearly defined versions
that won't change on you once you implement an approved specification.
As a developer, the last thing I would want is someone to say, "Oh
yeah, your implementation is no longer compliant because we changed
the spec."
I don't think we will be extending the control protocol frequently. I
expect that over time, we'll move towards TCP-ish behaviour (and we
see that already with the flow control in ECP1's window size packet)
but it'll only happen when the need arises or when we see a simple
solution to decrease the overhead. I don't expect any work on ECP2 for
months, if not more.
It's possible that we may have to deprecate old packets because we
found a better way to perform the same task (or our needs changed and
the old packet can't satisfy them). It's safe to deprecate packets but
it's unsafe to remove them (i.e. you must implement the handlers for
deprecated packets as well).
I don't think we should tie version numbers to something like a packet
ID. If we do so, we're forced to monotonically increase packet IDs and
we might run into a lot of trouble with that in the future. There
might be a good reason to leave a gap in packet IDs and then fill them
in later with a newer ECP but we don't know that yet. At this stage,
we don't have the foresight to give guarantees on a packet ID
allocation policy so I think it's still best to use a logical version
number as we have right now.