# Changelog

## Score

- CAI 65 → 67 (+1.5)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

## Lenses

- Code Health 85 → 85 (-0.1)
- Architecture 95 → 95 (-0.3)
- Maturity 59 → 59 (+0.0)
- Readiness 66 → 66 (+0.1)
- Security 62 → 69 (+7.2)
- Performance 100 (new)

## Resolved (5)

- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (6 lines × 2) (fxprof-processed-profile/src/func_table.rs)
- Hotspot: samply-symbols/src/macho.rs (samply-symbols/src/macho.rs)
- Hotspot: samply/src/linux_shared/converter.rs (samply/src/linux_shared/converter.rs)

## New (12)

- Confusing separation of concerns between `Api.build_query` and the specific `*ApiQueryState` constructors. `Api.build_query` takes a URL and JSON, while the specific query states (Source, Symbolicate) have `from_request_json` constructors. It is unclear how `Api.build_query` relates to these specific states. If `Api.build_query` is a factory, it should return the appropriate `ApiQueryState` or a generic builder. The existence of multiple `from_request_json` methods on different types suggests a lack of a unified entry point for query processing.
- Duplicated block (6 lines × 2) (fxprof-processed-profile/src/native_symbols.rs)
- Hotspot: samply-symbols/src/symbol_map_object.rs (samply-symbols/src/symbol_map_object.rs)
- Inconsistent naming for handle creation. The `Profile` type uses `handle_for_` prefix for creating handles for categories, strings, frames, etc. However, `InternalCategory` uses `index_for_subcategory`. This mixes 'handle' and 'index' terminology for similar concepts (identifiers/lookups) within the same domain. Additionally, `handle_for_frame_with_label` and `handle_for_frame_with_address` are distinct methods for similar intents (getting a frame handle), which is acceptable, but the lack of a unified `handle_for_frame` with a discriminator or enum argument increases API complexity.
- Inconsistent naming for property retrieval/access. `TraceEventInfoRaw` exposes a raw pointer accessor with a generic name `info_as_ptr`, while the `Parser` component uses `find_property` to locate specific data. More critically, `TypedEvent` and `EventSchema` both expose `property(index: u32): Property`, but `Parser` uses `find_property(name: str)`. This forces consumers to use different methods (`find_property` vs `property`) depending on whether they are using the low-level `Parser` or the higher-level `TypedEvent`/`EventSchema` abstractions, despite both ultimately accessing event properties.
- Low cohesion: SymbolManagerConfig (LCOM4 13) (wholesym/src/config.rs)
- Medium vulnerability: RUSTSEC-2026-0285 (Cargo.lock)
- Off the main sequence: fxprof-processed-profile
- Off the main sequence: samply-quota-manager
- Redundant API surface for schema registration. `SchemaLocator` has an instance method `add_custom_schema`, but the module-level function `etw_reader.add_custom_schemas` takes a `SchemaLocator` as an argument. It is unclear if the module function performs a different operation (e.g., global registration) or if it is a redundant wrapper. If it just calls the instance method, the module function is unnecessary noise. If it does something else, the naming is ambiguous.
- Split samply
- SymbolList::new (cyclomatic 16) (samply-symbols/src/symbol_map_object.rs)

## Changes since last survey

- 17 commits — 17 feature/other, 0 fixes

## By area

- fxprof-processed-profile/src — 5 commits
- (repo) — 4 commits
- samply-symbols/src — 4 commits
- fxprof-processed-profile/tests — 2 commits
- (root) — 1 commit
- wholesym/src — 1 commit

## Notable commits

- change: Add SymbolMap::set_access_pattern_hint to wholesym.
- change: Add test helpers for looking up objects and columns in JSLB output.
- change: Apply symbol list memory optimization for PLT stubs.
- change: Apply symbol list memory optimization for exports.
- change: Bump mach2 from 0.6.0 to 0.7.0
- change: Bump mach2 from 0.6.0 to 0.7.0 (#877)
- change: Emit processed profile format version 72.
- change: Emit processed profile format version 73.
- change: Emit processed profile format version 74.
- change: Emit processed profile format version 75.
- change: Emit profiles of v75 (#886)
- change: Further reduce SymbolList memory.
- change: Intern frames in two levels: template + address.
- change: Reduce SymbolList memory usage.
- change: Reduce memory for ELF objects with lots of symbols (#878)
- change: Stop splitting the frame table and func table into their own JSON slabs.
- change: Two memory consumption improvements (#879)
