For the M7 RSS gap (core/docs/m7-baseline.md: ~70 MB measured vs ADR 0012's ~45-50 MB estimate) -- "find where before tuning anything". No root here to install massif or heaptrack, so this is a small in-process equivalent: operator new/delete (already overridden for alloc-check's counter) now also track, per call site (one return address via __builtin_return_address(0), cheap enough to run for a whole scenario), live (not-yet-freed) bytes. Runs the same 20-task concurrent scenario as `load`, waits for peak RSS to stop growing, then prints the top sites by live bytes -- resolved via one batched addr2line invocation against /proc/self/exe (dladdr alone only resolves dynamic-symbol-table entries, which misses most of this codebase's internal-linkage call sites), with dladdr as a per-site fallback. Also adds the nothrow operator new/delete overloads alongside the existing plain ones: without them, anything that allocates via the nothrow form (e.g. std::stable_sort's std::get_temporary_buffer, hit once while investigating the RSS gap) falls through to ASan's own default nothrow new while still being freed through this file's plain delete override -- an alloc-dealloc-mismatch ASan correctly flags as a real ABI-level bug in an allocator override that claims to intercept "everything". Using this tool, sum(effective_segments) across all 20 tasks vs. Engine::segment_budget().budget() (now cross-checked and printed together) showed the budget hands out well more than max_active_segments -- the actual root cause, in core/src/segment/budget.cpp, not covered by this commit. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Q3QrF7rCt21bkAjt9BCDFQ
mockd/ lane PROTO - mock daemon serving contracts/fixtures testserver/ lane PKG/QA - deliberately hostile HTTP server bench/ lane CORE - throughput and CPU benchmarks fuzz/ lane CORE - libFuzzer targets for every parser