Skip to content

ethos-parser 0.60.0

Choose a tag to compare

@ethos-pramaan ethos-pramaan released this 20 Sep 09:42
· 115 commits to main since this release
Immutable release. Only release title and notes can be modified.

The sixth release of ethos-parser. Markdown can now be produced from a document in one process, and a page set with letter-spacing no longer comes out one block per glyph.

Platforms

Archive Target State
ethos-parser-0.60.0-x86_64-unknown-linux-gnu.tar.gz Linux, x86-64 verified
ethos-parser-0.60.0-x86_64-pc-windows-msvc.tar.gz Windows, x86-64 verified
ethos-parser-0.60.0-aarch64-apple-darwin.tar.gz macOS, Apple silicon verified
ethos-parser-0.60.0-x86_64-apple-darwin.tar.gz macOS, Intel verified

This is the first release built on every platform it ships. 0.55.0 to 0.59.0 shipped macOS
only; these four come from one workflow run
(35501680336), each built and
executed on the runner that built it.

They arrive in one asset. This release carries release-bundle.zip and nothing else: the four
archives above, their four .fingerprint files — the per-target record of what each binary
produced over the gate corpus — and SHA256SUMS.txt. Unzip first, then verify; the Install block
below does both.

verified means:

  • built with the pinned Rust 1.88.0;
  • executed on the runner that built it;
  • its artifact digests over the gate corpus equal to every other runner's.

SHA256SUMS.txt records the state beside each digest, and it exists only because every runner produced the same fingerprint: the assembly refuses to write it at all if any target's artifact digests over the gate corpus differ from the others'. Nothing is published to crates.io, npm or PyPI.

Install

curl -LO https://github.com/docushell/ethos-parser/releases/download/v0.60.0/release-bundle.zip
unzip release-bundle.zip -d ethos-parser-0.60.0
cd ethos-parser-0.60.0
shasum -a 256 -c SHA256SUMS.txt --ignore-missing
tar -xzf ethos-parser-0.60.0-aarch64-apple-darwin.tar.gz   # or your platform's archive
./ethos-parser-0.60.0-aarch64-apple-darwin/ethos-parser --version

SHA256SUMS.txt covers the four archives, so a mismatch on any one of them fails the check — and
the digests it carries are the ones the workflow's verify job recorded, which you can read in the
run linked above.

The macOS binaries are not notarized. A copy downloaded through a browser is quarantined; once the digest checks out, xattr -d com.apple.quarantine ethos-parser-0.60.0-*/ethos-parser clears it. curl does not set the attribute.

What changed

Wire changes a 0.59.0 consumer sees:

  • markdown_rule and html_rule move to markdown-blocks-v9 and html-blocks-v9. A document whose fonts draw no space at all projects byte for byte what -v8 projected; a document set with tracking projects very differently, and much better.
  • Nothing else. No artifact changes shape, no schema version moves, no declaration is added or removed.

New:

  • ethos-parser markdown --source <FILE> — extraction and projection in one process, for a byte-identical artifact. 0.035 s → 0.020 s per document over 200 benchmark documents, at 9.4 MB peak memory. It exists because the two-process path spent about 15 ms starting processes and 3 ms carrying a 250 KB record between them, on 5.4 ms of actual work. A caller who needs the record — to ground a claim, to locate a quote, to keep — still runs extract.

Fixed:

  • A gap narrower than the space the page itself draws is not a word gap. A page set with letter-spacing draws each glyph as its own run, and every letter used to become its own block: one benchmark document produced 944 blocks averaging 1.2 characters where the page draws "Once the slides are created". It now produces 48. The measure is the page's own — the width of the space that font draws, per size — not a threshold anybody chose.

profile_sha256: sha256:53bb81a1b39caffb6f6fa3691a21ae3758fd1a85af372cf2b93790c600e9091c. The full entry is in CHANGELOG.md.

Known limits

This release was made while measuring this engine against another on a public benchmark, and three gaps stay open. Each was attempted or costed rather than argued about, and the numbers are in the repository:

  • Reading order. The repair the measurement prescribes was built and made things worse — net −0.1042 across the corpus. The documents that score badly are not hiding columns; their content streams are out of order, and reordering those needs a rule this engine refuses to make.
  • Headings. A font-weight clause was built: it reads the font's own bold declaration and raises the heading score from 0.34 to 0.52. It also fires on bold text that is not a heading often enough to break the false-positive bound this rule shipped under, on documents that bold defined terms and table headers. Not shipped; measured twice, including the guard that might have bounded it.
  • Tables. Most of the documents scoring zero need either OCR, which this profile refuses, or a relaxation that has been measured fabricating a table on five of eight gate documents.

Every open item, and what it waits on, is tracked in docs/OPEN-WORK.md.