The emphasis here is on strongly encouraging Senders to get the actual, full
and correct, values to Listeners. But where they can't, be that due to
data source limitations (CAPI), or their code architecture (common EDDN
sending code that has no concept of the data source), they're allowed to
send a less than optimal value.
**BUT**, they still should start sending the fields as outlined.
* Actually define what we expect from the existing fields.
* Document what should go in the new `gameversion` and `gamebuild` fields.
* Update the generic example to include all of these "what version of the game,
or feature set, did this come from?" fields.
* Listeners really do need these, where defined in the schemas, so state
that they're mandatory.
* REALLY emphasise that where an `Odyssey` flag isn't in `LoadGame` Senders
MUST NOT send it with a `false` value.
Although pending addition of header->gameversion will aid Listeners,
currently this could give the misleading impression that a 3.8 Horizons
client is a 4.0 Horizons client.
This includes the new `4.0 Horizons` client, which changes the semantics
of what the `Odyssey` flag in the `Fileheader` means. It now indicates if
the client is a 4.0+ one, not if the player is utilising Odyssey DLC.
* It's using `sys.argv`, not `argparse`.
* Thus there's no `--help`.
* Supply it with: 1) Filename of a schema definition, 2) filename of a full
EDDN message text to test for compliance.
* No output if both schema and message load *and* the message passes the
schema. Else you'll get python exception output from `jsonschema.validate()`.
1. Get the designation of the version correct.
2. That empty `#` fragment is a SHOULD NOT, so just don't.
3. Append `_<source>` to the "filename" where necessary.
* Add new mandatory `data-source` field.
* `CarrierName` now optional (not in CAPI data).
* `Items` is defined a lot more loosely, due to Journal vs CAPI
differences.
I brainfarted, slinging a `.+` into this to generalise it, when the code
is using `str.startswith()`, not a regex match.
So, use two tests, `.startswith()` for the static portion, then a
`.find()` for the remainder after the variant part.