classify_file assigns an initial tier from the path. is_parseable checks semantic-parser availability. Code/data/markup parser failure or analysis limits fall directly to raw lines. Numbered tiers describe abstraction levels, not a mandatory parser cascade.
Data parsing is format-directed. Scalar type changes, nested YAML edits, and non-label HTML attribute changes remain visible. Original byte comparisons preserve binary differences that text decoding could erase.
See the tier reference for Rust APIs and pipeline for fallback details.
Structured data: change one setting
Markup: change an attribute
title stay the same. The href value changes even though it is
not the element’s label. The > inside a quoted attribute remains part of its
value.
Prose: edit a word
.txt
and .log files.
Markdown: keep line structure
Binary: changed bytes of the same length
For binary data, equal lengths do not imply equal contents. You can reproduce a three-byte comparison with:Update
action; the length text alone does not explain which byte changed. Format-specific
plugins can provide more detail through the Rust library API.
Add an adapter
Choose an existing tier when it fits the format. Build a validated tree throughTreeBuilder and add routing in crates/differens-tiers/src/router.rs; raw/prose
adapters may use the shared sequence engine. Keep parser errors visible as line
fallbacks. See contributing and
the tiers API for the extension points.