Repository navigation
Release v0.8.0
Highlights
Artifact analysis now says who owns the code in a binary. Symbols are labelled as your own, toolchain or other code, reports total the bytes per owner, and they name the functions of yours that pull toolchain code in. Identical copies of one function now get distinct fingerprints, so retained sizes and dead-code results are available on emscripten C++ and stripped release WASM, where they used to be withdrawn. Source scanning is unchanged.
Before you upgrade: artifact JSON moved to schema v3
The source scan, its database and baselines did not change. A 0.7.0 database opens as it is and no rescan is needed.
Both artifact JSON reports moved to a new schema version:
artifact-report-v3:retained_sizes[].symbol,dead_code.symbols[],duplicate_groups.*[].fingerprintand each member'ssymbolare hex strings instead of byte arrays. New fields:symbols[].content_fingerprint,symbols[].identity_by_orderand a top-levelsymbol_assumptions.artifact-comparison-report-v3: adds ownership deltas and an owner on each symbol delta.
The v2 schema files still ship unchanged, for consumers that validate old output against them.
Some artifact symbols get new fingerprints, so artifact compare across the upgrade can show them as removed and added:
- C++ demangling applies only to
_Z/__Z/___Znames. Bare names such asy,Ssor_GLOBAL__I_aare no longer turned into type names, and a binaryen$byn$…suffix is kept. Symbols whose display name changed get a new fingerprint. - Copies of one function (same name, same content) now have distinct fingerprints. Unique symbols keep theirs.
artifact compare now reads codehelion.toml from the working directory, like artifact analyze, and fails on an invalid configuration. It used to read no configuration.
Artifact analysis
[artifact] ownlists the owners that count as your code. Every symbol is labelledown,toolchain,otherorunnamed, andanalyze,reportandcompareshow totals per class and per owner, in text, JSON and CSV. See Artifact analysis.- Toolchain holdings: the report names the non-toolchain functions through which toolchain code is reached, with the bytes each one holds.
- Owner labels are derived when a report is rendered, from the stored names and the current
[artifact] own. Nothing about ownership is written to the database, soartifact reporton an older analysis shows ownership too. - Copies of one function are told apart by their callers, callees, roots and body, and by file order only as a last resort. Such symbols are marked
identity_by_orderand the report says so. On suzume's release WASM this restores retained sizes for 240 copies. - Each copy gets its own DWARF/PDB inline frames and source-mapping rows, and dead-code lists copies individually.
artifact comparepairs copies by their shared content, so reordering identical functions no longer shows them as removed and added. Editing one function in an archive no longer marks its unchanged siblings as changed.- A stored analysis from before this release still replays, with retained sizes for shared identities withdrawn as before.
- Mixed-format archives classify each member's symbols by that member's format.
- Artifact CSV gains per-symbol, owner, ownership-summary and toolchain-holdings records; comparison CSV gains owner deltas.
Library crates
codehelion-artifact changed its API: ArtifactSymbol has new public fields content_fingerprint and identity_by_order, so struct literals need updating. native::NativeSymbolRange, native::NativeTextSymbols and native::infer_text_regions now carry symbol positions, and native::join_addresses is new. The new ownership module and metrics::CallGraph::toolchain_holdings are additive.
Full Changelog: v0.7.0...v0.8.0