Skip to content

v1.14.0: trace-side reliability + breadth

Choose a tag to compare

@carloshpdoc carloshpdoc released this 15 May 16:04
· 28 commits to main since this release

Trace-side reliability + breadth release. Single day, 11 items landed across the trace analyzers and MCP surface. Suite 546 -> 626 (+80). MCP tools 36 -> 37.

Trace-side parser fixes

  • `inspectTrace` + `summarizeTrace` now work against real Apple traces. The old xpath `/trace-toc/run` returned empty against bundles from `xcrun xctrace record` and Instruments.app; cascaded into `summarizeTrace` reporting "no events detected" even when the trace had 35 hangs. Now uses `xctrace export --toc` + per-schema row-count queries.
  • `analyzeTimeProfile` returns real symbol names. Was returning `"1.00 ms"` (the weight column) as every symbol. Now reads the leaf frame's `@_name` from `` with fallback to the binary name for unsymbolicated hex addresses.

Schema coverage expansion

  • `analyzeNetworkActivity` MCP tool (37th). Parses the `network-connections` schema. Per-request URL / host / method / status / duration / bytes-in / bytes-out, top-N by duration + by bytes, per-host aggregates.
  • `analyzeHangs` reads the `hang-risks` schema alongside `potential-hangs`. Surfaced as `risks[]` + `risksTotals`.

Structural refactors

  • Pattern-matching schema discovery. All 5 trace analyzers resolve schema names through a regex map (SCHEMA_FAMILIES) with canonical fallback. Survives future xctrace renames without code changes.
  • Unified `supportStatus[]` surface across all 6 trace analyzers (XcodeTraceMCP-pattern). Old `status` / `notice` aliases remain for backwards compat.

macOS 26.x xctrace --time-limit regression UX

  • README + USAGE.md callout naming the bug + 4 recovery options.
  • `MEMORYDETECTIVE_PREFLIGHT_XCTRACE` env var enables a 2-second probe before the user's actual recording. Cuts failure latency from ~70s to ~8s. Auto-enabled on macOS 26.x simulator attach.
  • `MEMORYDETECTIVE_AUTO_OPEN_INSTRUMENTS` env var enables fire-and-forget `open -a Instruments ` on timeout, opening the partial trace in the Instruments.app GUI.

Memgraph polish

  • `countAlive` returns `instanceSizeBytes` + `totalBytes` per class and accepts `sortBy: "totalBytes"`. FLEX-inspired Size view. Validated against real abandoned-memory memgraph: top by totalBytes surfaces 2 MB NSMutableDictionary, 1.3 MB CFString, actionableCounts highlight 800 KB Kernel Pointers + 460 KB CGDataProvider.
  • `verifyFix` accepts `expectedAliveClasses[]` whitelist with curated default list of system VCs / views / windows (`UICompatibilityInputViewController`, `UIPredictionViewController`, `UIRemoteKeyboardWindow`, etc.). MLeaksFinder + DebugSwift-inspired UX. Whitelist hits surface in `expectedAlive[]` for transparency without flipping the verdict.

Deferred to v1.15

  • `recordViaInstrumentsApp` (item G, 8-12h big feature)
  • screenshot during `replayScenario` (item N)
  • `summarizeTrace` network chain integration

Full diff: `v1.13.0...v1.14.0`