Skip to content

v2.0.0-rc.1

Pre-release
Pre-release

Choose a tag to compare

@tstromberg tstromberg released this 24 Jul 05:16

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.