Skip to content

v0.3.0 — .ant format

Latest

Choose a tag to compare

@andrewmonostate andrewmonostate released this 20 Aug 23:59
· 1 commit to main since this release

The .ant interchange format at version 0.3. The normative document is
SPEC.md; this release is the reference point it describes,
together with the JSON Schema, both reference bindings, and the
conformance goldens they are verified against.

Reading a file: the same-major policy

version in the manifest is MAJOR.MINOR, and a conformant reader
implements one rule (SPEC.md §3):

  • Same MAJOR reads, at any MINOR. Minor bumps are additive by
    definition, so everything a reader already understood keeps its
    meaning.
  • A MINOR ahead of the reader must still be readable, and the reader
    must say it is ahead
    — it saw the file, but only a subset of what
    the file means. A caller needing completeness can then refuse.
  • A different MAJOR is refused, naming both versions, because a
    major bump means field meanings or the container framing changed and
    reading on would silently misinterpret records.

A version gate written as version == "0.3" passes every positive test
while being wrong, and locks out every future file. v0.1 shipped with
exactly that bug; the policy exists to prevent it.

What 0.3 contains

  • 0.2 introduced the MAJOR.MINOR policy above, and vertex and edge
    tombstones so a deletion propagates on re-import instead of leaving
    the record alive at the destination forever.
  • 0.3 adds tagged property envelopes for the SQL types JSON cannot
    distinguish from strings — decimal, date, time, timestamp, uuid,
    bytes, int16/int32, and arrays — so a DATE and a TEXT survive a
    round-trip as different things. Legacy bare scalars are unchanged.

Verifying an implementation

The conformance suite is the contract. Both runners work against the
goldens as checked in:

python3 conformance/run_conformance.py    # needs zstandard
node conformance/run_conformance.mjs      # Node >= 22.15

Each reads and fully verifies every golden, rejects the negative
fixtures, and checks that a newer MINOR stays readable. CI runs both on
every push. Pass them and your reader is conformant.

Apache-2.0.