Skip to content

ethos-parser 0.57.0

Choose a tag to compare

@ethos-pramaan ethos-pramaan released this 14 Sep 18:53
· 228 commits to main since this release
Immutable release. Only release title and notes can be modified.

The third release of ethos-parser. grounding-check now answers as Ethos v0.6.0 — the verifier this engine is oracled against — does, fault for fault, and does it in a third of the memory.

Platforms

Archive Target State
ethos-parser-0.57.0-aarch64-apple-darwin.tar.gz macOS, Apple silicon verified
ethos-parser-0.57.0-x86_64-apple-darwin.tar.gz macOS, Intel verified (executed under Rosetta 2)

verified means built with the pinned Rust 1.88.0, executed, and its output byte-identical to the native build's over the gate corpus. SHA256SUMS.txt records the state beside each digest. Linux and Windows are still not shipped: nothing available can execute them. Nothing is published to crates.io, npm or PyPI.

Install

gh release download v0.57.0 --repo docushell/ethos-parser
shasum -a 256 -c SHA256SUMS.txt --ignore-missing
tar -xzf ethos-parser-0.57.0-aarch64-apple-darwin.tar.gz
./ethos-parser-0.57.0-aarch64-apple-darwin/ethos-parser --version

Neither binary is notarized. A copy downloaded through a browser is quarantined; once the digest checks out, xattr -d com.apple.quarantine ethos-parser-0.57.0-*/ethos-parser clears it. gh release download does not set the attribute.

What changed

Why it is a MINOR — grounding-check's reports change for the same input:

  • It gives Ethos v0.6.0's report byte for byte on a valid artifact, and its verdict, error code and path on an invalid one, on every input measured. On 198 of 3,681 mutated artifacts 0.56.0 gave a different code or path — among them an integer at i64::MIN (a debug build panicked), a million-item array, nesting 128 levels deep, a five-number bbox, a repeated unknown key, an artifact written as a JSON array, and any two faults Ethos orders by where they sit in the bytes.
  • Every artifact 0.56.0 judged valid gets a byte-identical report, unless bound to a source over 256 MiB. Of the invalid mutants, 1,969 keep code and path but change message, which now quotes the parser.
  • --source-artifact is read only for a valid artifact, as Ethos reads it, under Ethos's 256 MiB: an invalid artifact is reported whatever the source path holds — missing, too large, or a FIFO that would block.
  • For library callers: GroundingSource's spans and tables default when absent, and grounding_check_reading_source is new; grounding_check is unchanged.

Lighter:

  • On a valid artifact grounding-check peaks at 3.8–4.1× its input, where 0.56.0 peaked at 13.2–13.5×, and runs 44–47% faster. On the largest gate document's artifact, refused for its 1.6 million spans, 1,923 MiB → 154 MiB and 1.36 s → 0.45 s.
  • The one slower case: an artifact that parses as JSON but not as a grounding artifact, such as one with an unknown key at its root, still builds Ethos's full tree — +0.15 s on a 48 MiB artifact, same memory.

Tested against the pinned verifier: the oracle pin moved to Ethos v0.6.0, so the test suite checks page-less (Office) artifacts against it for the first time — all 16 committed Office documents and eight schema 1.1.0 rules.

profile_sha256: sha256:de706c10009dac90a6ba0d97d0aa1295b272a5d192afb69713f1a742c888a0b1. The full entry, with every measurement, is in CHANGELOG.md.

Known limits

  • grounding-check's error messages are its own; only verdict, code and path are Ethos's on an invalid artifact. Its exit code for an invalid artifact is 1, where Ethos's is 2.
  • ethos grounding check <path> -V exits 0 without checking; ethos-parser grounding-check does not copy that.
  • An element omitted for its length leaves no trace in the artifact or the representation; it is declared only on stderr, in MCP's summary, and to library callers.
  • classify and overlay still read their input through Document::open, which has no source ceiling.
  • MCP's refusal of a path that is not a regular file is Unix-only in effect: Windows reports anything but a directory as a file.
  • A caller cannot set a hard memory ceiling; --max-pages bounds pages, not bytes.