v2.0.0-rc.1
Pre-release
Pre-release
Engine swap to filefacts
The new filefacts crate (codeberg.org/atomdrift/filefacts) owns every parse cleave used to do directly. Cleave no longer depends on goblin, gimli, png, jpeg-decoder, or
any of the 21 tree-sitter grammar crates.
Breaking — JSON schema v3
AnalysisReport reshaped:
- Removed: binary_properties, code_metrics, source_code_metrics, overlay_metrics, metrics.
- Added: filefacts — typed views (values, metrics, sections, imports, exports, functions, errors). Read filefacts.values.pe.machine directly.
- Added: filefacts_metrics: BTreeMap<String, f64> — the only numeric metric surface.
- Renamed: kv_tree → values_tree.
Breaking — CLI
- cleave kv → cleave value.
- New: facts (alias inspect), imports, exports, functions.
- Trait matcher type: kv → type: value.
- Section gained flags[].
Features
- Cached AST traits reuse filefacts's tree_sitter::Tree.
- Subfile pipeline — better OOXML and embedded-payload routing.
- Archive analyzers reworked; Dockerfile support; archive kv/metrics.
- NATS and gRPC under communication taxonomy.
Docs & packaging
- New: docs/INTEGRATION.md, RUST_API.md, SERVER_API.md, JSON.md.
- New: packaging/wolfi/ (apko/melange/lima + scripts).
Build & performance
- Release: lto = "fat", codegen-units = 1.
- Profiling: lto = "thin", cu = 16 (saves ~10 min/link for tuna's iteration loop).
- Dev opt-level = 3 for cleave + regex + serde_yaml + aho-corasick — kills 30 s of trait-init overhead per subprocess test.
- Strings: skip XOR + UTF-16 scan on large ASCII inputs.
- analyze takes the report by ownership instead of cloning.