Skip to content

perf(build): incremental editable installs — skip artifact cleanup and add up-to-date checks#17202

Draft
taegyunkim wants to merge 4 commits intomainfrom
taegyunkim/riot-build-time
Draft

perf(build): incremental editable installs — skip artifact cleanup and add up-to-date checks#17202
taegyunkim wants to merge 4 commits intomainfrom
taegyunkim/riot-build-time

Conversation

@taegyunkim
Copy link
Copy Markdown
Contributor

@taegyunkim taegyunkim commented Mar 30, 2026

Description

Every `pip install -e .` called `remove_artifacts()` which deleted all `.so` files, forcing full rebuilds of Rust, libdd_wrapper, and Cython extensions even when nothing changed. This also silently defeated CI's `ext_cache` mechanism: `before_script` restores cached `.so` files before `riot generate` runs, but `remove_artifacts()` deleted them immediately, making every CI build a full recompile.

Changes:

  • Skip `remove_artifacts()` for editable installs so incremental checks and `ext_cache` restorations are preserved
  • Detect `IS_EDITABLE` early in `CustomBuildExt.run()` so outputs resolve to the source tree instead of pip's throwaway temp dir
  • Persistent `.cmake_cache/` build dir for `libdd_wrapper` in editable mode (avoids ~10 s ThinLTO relink)
  • Mtime-based skip for Cython/C extensions when `.so` is already up-to-date
  • Exclude `.pyx`/`.pxd` from `CMakeExtension.get_sources()` to prevent false-positive rebuilds
  • `_purge_stale_cmake_caches()`: auto-delete CMake build dirs whose `CMakeCache.txt` was configured at a different absolute path (e.g. switching between host and Docker, or different worktree paths), which previously caused a hard cmake failure

Benchmarks

Local: warm `scripts/ddtest riot -P -v generate --python=3.14` (venv exists, nothing changed)

Branch Run 1 Run 2
`main` 43.7 s 44.9 s
this PR 13.2 s 12.9 s

~3.4× faster (44 s → 13 s). Remaining 13 s is riot unconditionally invoking `pip install -e .` on every call regardless of whether anything changed — a separate riot-side issue.

CI: `build_base_venvs` job runtimes (3 pipelines on `main` today vs this PR)

Python `main` avg this PR
3.9 464 s 243 s
3.10 494 s 204 s
3.11 449 s 183 s
3.12 392 s 267 s
3.13 410 s 207 s
3.14 441 s 220 s
avg 442 s 221 s

~2× faster in CI (442 s → 221 s). The gap is smaller than locally because fixed overhead (artifact download, pytest collection, smoke test) is not affected by this change.

Direct `pip install --no-build-isolation -e .` (local, warm)

`>20 s → ~5 s`

Testing

Timed `riot generate` and `pip install --no-build-isolation -e .` on a warm local filesystem before/after. Draft PR to observe CI `build_base_venvs` runtimes.

Risks

Stale `.so` files from a Python version change or ABI-incompatible rebuild won't be auto-cleaned on editable installs; developers would need to run `python setup.py clean --all` manually. Non-editable installs (wheel builds, `pip install` without `-e`) are unaffected — `remove_artifacts()` still runs for those.

Additional Notes

`.cmake_cache/` is gitignored and only used for editable installs.

…d add up-to-date checks

`LibraryDownloader.run()` called `remove_artifacts()` on every editable install,
deleting all `.so` files and forcing full rebuilds of Rust, libdd_wrapper, and
Cython extensions even when nothing changed.

- Skip `remove_artifacts()` for editable installs
- Detect `IS_EDITABLE` early in `CustomBuildExt.run()` so outputs resolve to
  the source tree instead of pip's throwaway temp dir
- Use persistent `.cmake_cache/` build dir for libdd_wrapper (editable only)
  to reuse CMake incremental state across invocations (~10 s ThinLTO relink avoided)
- Add mtime incremental checks for Cython/C extensions
- Exclude `.pyx`/`.pxd` from `CMakeExtension.get_sources()` to avoid false positives

Result: steady-state `pip install --no-build-isolation -e .` drops from >20 s to ~5 s.
CI `build_base_venvs` jobs benefit when ext_cache is warm.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@taegyunkim taegyunkim added the changelog/no-changelog A changelog entry is not required for this PR. label Mar 30, 2026
@cit-pr-commenter-54b7da
Copy link
Copy Markdown

cit-pr-commenter-54b7da bot commented Mar 30, 2026

Codeowners resolved as

setup.py                                                                @DataDog/python-guild

@pr-commenter
Copy link
Copy Markdown

pr-commenter bot commented Mar 30, 2026

Performance SLOs

Comparing candidate taegyunkim/riot-build-time (e6c0f77) with baseline main (97d4f14)

📈 Performance Regressions (2 suites)
📈 iastaspects - 118/118

✅ add_aspect

Time: ✅ 104.583µs (SLO: <130.000µs 📉 -19.6%) vs baseline: +3.8%

Memory: ✅ 44.015MB (SLO: <46.000MB -4.3%) vs baseline: +5.1%


✅ add_inplace_aspect

Time: ✅ 101.819µs (SLO: <130.000µs 📉 -21.7%) vs baseline: ~same

Memory: ✅ 44.133MB (SLO: <46.000MB -4.1%) vs baseline: +5.4%


✅ add_inplace_noaspect

Time: ✅ 28.102µs (SLO: <40.000µs 📉 -29.7%) vs baseline: -0.6%

Memory: ✅ 44.112MB (SLO: <46.000MB -4.1%) vs baseline: +5.4%


✅ add_noaspect

Time: ✅ 48.844µs (SLO: <70.000µs 📉 -30.2%) vs baseline: -0.2%

Memory: ✅ 44.052MB (SLO: <46.000MB -4.2%) vs baseline: +5.6%


✅ bytearray_aspect

Time: ✅ 251.589µs (SLO: <400.000µs 📉 -37.1%) vs baseline: -0.4%

Memory: ✅ 43.880MB (SLO: <46.000MB -4.6%) vs baseline: +4.8%


✅ bytearray_extend_aspect

Time: ✅ 652.523µs (SLO: <800.000µs 📉 -18.4%) vs baseline: -1.6%

Memory: ✅ 43.950MB (SLO: <46.000MB -4.5%) vs baseline: +5.3%


✅ bytearray_extend_noaspect

Time: ✅ 266.461µs (SLO: <400.000µs 📉 -33.4%) vs baseline: +0.7%

Memory: ✅ 43.910MB (SLO: <46.000MB -4.5%) vs baseline: +5.2%


✅ bytearray_noaspect

Time: ✅ 138.699µs (SLO: <300.000µs 📉 -53.8%) vs baseline: -1.0%

Memory: ✅ 44.064MB (SLO: <46.000MB -4.2%) vs baseline: +5.3%


✅ bytes_aspect

Time: ✅ 219.201µs (SLO: <300.000µs 📉 -26.9%) vs baseline: +0.3%

Memory: ✅ 43.999MB (SLO: <46.000MB -4.3%) vs baseline: +5.3%


✅ bytes_noaspect

Time: ✅ 133.926µs (SLO: <200.000µs 📉 -33.0%) vs baseline: +1.3%

Memory: ✅ 44.089MB (SLO: <46.000MB -4.2%) vs baseline: +5.1%


✅ bytesio_aspect

Time: ✅ 3.762ms (SLO: <5.000ms 📉 -24.8%) vs baseline: -0.4%

Memory: ✅ 44.022MB (SLO: <46.000MB -4.3%) vs baseline: +5.2%


✅ bytesio_noaspect

Time: ✅ 315.895µs (SLO: <420.000µs 📉 -24.8%) vs baseline: ~same

Memory: ✅ 44.191MB (SLO: <46.000MB -3.9%) vs baseline: +5.9%


✅ capitalize_aspect

Time: ✅ 88.589µs (SLO: <300.000µs 📉 -70.5%) vs baseline: +0.5%

Memory: ✅ 44.038MB (SLO: <46.000MB -4.3%) vs baseline: +5.1%


✅ capitalize_noaspect

Time: ✅ 246.461µs (SLO: <300.000µs 📉 -17.8%) vs baseline: +1.2%

Memory: ✅ 43.974MB (SLO: <46.000MB -4.4%) vs baseline: +4.8%


✅ casefold_aspect

Time: ✅ 88.483µs (SLO: <500.000µs 📉 -82.3%) vs baseline: +0.8%

Memory: ✅ 44.030MB (SLO: <46.000MB -4.3%) vs baseline: +5.3%


✅ casefold_noaspect

Time: ✅ 302.988µs (SLO: <500.000µs 📉 -39.4%) vs baseline: -0.3%

Memory: ✅ 43.879MB (SLO: <46.000MB -4.6%) vs baseline: +4.8%


✅ decode_aspect

Time: ✅ 86.985µs (SLO: <100.000µs 📉 -13.0%) vs baseline: ~same

Memory: ✅ 43.930MB (SLO: <46.000MB -4.5%) vs baseline: +5.2%


✅ decode_noaspect

Time: ✅ 155.611µs (SLO: <210.000µs 📉 -25.9%) vs baseline: +0.9%

Memory: ✅ 43.982MB (SLO: <46.000MB -4.4%) vs baseline: +4.8%


✅ encode_aspect

Time: ✅ 84.514µs (SLO: <200.000µs 📉 -57.7%) vs baseline: +0.3%

Memory: ✅ 43.827MB (SLO: <46.000MB -4.7%) vs baseline: +4.9%


✅ encode_noaspect

Time: ✅ 141.803µs (SLO: <200.000µs 📉 -29.1%) vs baseline: +0.6%

Memory: ✅ 43.919MB (SLO: <46.000MB -4.5%) vs baseline: +4.7%


✅ format_aspect

Time: ✅ 14.640ms (SLO: <19.200ms 📉 -23.8%) vs baseline: +0.4%

Memory: ✅ 43.900MB (SLO: <46.000MB -4.6%) vs baseline: +4.7%


✅ format_map_aspect

Time: ✅ 16.423ms (SLO: <21.500ms 📉 -23.6%) vs baseline: +0.3%

Memory: ✅ 44.028MB (SLO: <46.000MB -4.3%) vs baseline: +4.8%


✅ format_map_noaspect

Time: ✅ 374.902µs (SLO: <500.000µs 📉 -25.0%) vs baseline: +0.4%

Memory: ✅ 43.999MB (SLO: <46.000MB -4.3%) vs baseline: +5.1%


✅ format_noaspect

Time: ✅ 305.214µs (SLO: <500.000µs 📉 -39.0%) vs baseline: +0.3%

Memory: ✅ 44.166MB (SLO: <46.000MB -4.0%) vs baseline: +5.4%


✅ index_aspect

Time: ✅ 139.208µs (SLO: <300.000µs 📉 -53.6%) vs baseline: 📈 +13.4%

Memory: ✅ 44.018MB (SLO: <46.000MB -4.3%) vs baseline: +5.3%


✅ index_noaspect

Time: ✅ 40.636µs (SLO: <300.000µs 📉 -86.5%) vs baseline: +0.7%

Memory: ✅ 44.111MB (SLO: <46.000MB -4.1%) vs baseline: +5.4%


✅ join_aspect

Time: ✅ 209.999µs (SLO: <300.000µs 📉 -30.0%) vs baseline: -0.3%

Memory: ✅ 43.995MB (SLO: <46.000MB -4.4%) vs baseline: +5.2%


✅ join_noaspect

Time: ✅ 142.458µs (SLO: <300.000µs 📉 -52.5%) vs baseline: -1.9%

Memory: ✅ 44.066MB (SLO: <46.000MB -4.2%) vs baseline: +5.6%


✅ ljust_aspect

Time: ✅ 505.425µs (SLO: <700.000µs 📉 -27.8%) vs baseline: -0.4%

Memory: ✅ 43.974MB (SLO: <46.000MB -4.4%) vs baseline: +5.0%


✅ ljust_noaspect

Time: ✅ 268.719µs (SLO: <300.000µs 📉 -10.4%) vs baseline: +5.6%

Memory: ✅ 44.086MB (SLO: <46.000MB -4.2%) vs baseline: +5.2%


✅ lower_aspect

Time: ✅ 299.989µs (SLO: <500.000µs 📉 -40.0%) vs baseline: +1.5%

Memory: ✅ 44.043MB (SLO: <46.000MB -4.3%) vs baseline: +5.6%


✅ lower_noaspect

Time: ✅ 232.470µs (SLO: <300.000µs 📉 -22.5%) vs baseline: -0.5%

Memory: ✅ 43.993MB (SLO: <46.000MB -4.4%) vs baseline: +4.9%


✅ lstrip_aspect

Time: ✅ 0.278ms (SLO: <3.000ms 📉 -90.7%) vs baseline: +0.7%

Memory: ✅ 43.892MB (SLO: <46.000MB -4.6%) vs baseline: +4.8%


✅ lstrip_noaspect

Time: ✅ 0.176ms (SLO: <3.000ms 📉 -94.1%) vs baseline: +0.2%

Memory: ✅ 44.018MB (SLO: <46.000MB -4.3%) vs baseline: +4.9%


✅ modulo_aspect

Time: ✅ 14.300ms (SLO: <18.750ms 📉 -23.7%) vs baseline: +0.5%

Memory: ✅ 44.003MB (SLO: <46.000MB -4.3%) vs baseline: +4.9%


✅ modulo_aspect_for_bytearray_bytearray

Time: ✅ 14.858ms (SLO: <19.350ms 📉 -23.2%) vs baseline: +0.3%

Memory: ✅ 44.345MB (SLO: <46.000MB -3.6%) vs baseline: +5.4%


✅ modulo_aspect_for_bytes

Time: ✅ 14.362ms (SLO: <18.900ms 📉 -24.0%) vs baseline: +0.2%

Memory: ✅ 44.111MB (SLO: <46.000MB -4.1%) vs baseline: +4.9%


✅ modulo_aspect_for_bytes_bytearray

Time: ✅ 14.627ms (SLO: <19.150ms 📉 -23.6%) vs baseline: -0.3%

Memory: ✅ 44.290MB (SLO: <46.000MB -3.7%) vs baseline: +5.4%


✅ modulo_noaspect

Time: ✅ 0.356ms (SLO: <3.000ms 📉 -88.1%) vs baseline: -0.5%

Memory: ✅ 43.986MB (SLO: <46.000MB -4.4%) vs baseline: +5.3%


✅ replace_aspect

Time: ✅ 18.372ms (SLO: <24.000ms 📉 -23.4%) vs baseline: ~same

Memory: ✅ 44.210MB (SLO: <46.000MB -3.9%) vs baseline: +5.3%


✅ replace_noaspect

Time: ✅ 283.140µs (SLO: <400.000µs 📉 -29.2%) vs baseline: +0.5%

Memory: ✅ 44.045MB (SLO: <46.000MB -4.3%) vs baseline: +5.2%


✅ repr_aspect

Time: ✅ 320.043µs (SLO: <420.000µs 📉 -23.8%) vs baseline: +0.1%

Memory: ✅ 44.022MB (SLO: <46.000MB -4.3%) vs baseline: +5.1%


✅ repr_noaspect

Time: ✅ 46.724µs (SLO: <90.000µs 📉 -48.1%) vs baseline: -0.8%

Memory: ✅ 43.940MB (SLO: <46.000MB -4.5%) vs baseline: +5.3%


✅ rstrip_aspect

Time: ✅ 388.233µs (SLO: <500.000µs 📉 -22.4%) vs baseline: +0.2%

Memory: ✅ 44.022MB (SLO: <46.000MB -4.3%) vs baseline: +5.5%


✅ rstrip_noaspect

Time: ✅ 180.609µs (SLO: <300.000µs 📉 -39.8%) vs baseline: -0.5%

Memory: ✅ 43.981MB (SLO: <46.000MB -4.4%) vs baseline: +5.2%


✅ slice_aspect

Time: ✅ 185.990µs (SLO: <300.000µs 📉 -38.0%) vs baseline: ~same

Memory: ✅ 44.057MB (SLO: <46.000MB -4.2%) vs baseline: +5.4%


✅ slice_noaspect

Time: ✅ 54.615µs (SLO: <90.000µs 📉 -39.3%) vs baseline: -0.4%

Memory: ✅ 43.998MB (SLO: <46.000MB -4.4%) vs baseline: +5.0%


✅ stringio_aspect

Time: ✅ 3.801ms (SLO: <5.000ms 📉 -24.0%) vs baseline: ~same

Memory: ✅ 44.043MB (SLO: <46.000MB -4.3%) vs baseline: +5.3%


✅ stringio_noaspect

Time: ✅ 375.204µs (SLO: <500.000µs 📉 -25.0%) vs baseline: +8.2%

Memory: ✅ 44.094MB (SLO: <46.000MB -4.1%) vs baseline: +5.3%


✅ strip_aspect

Time: ✅ 277.448µs (SLO: <350.000µs 📉 -20.7%) vs baseline: +0.6%

Memory: ✅ 44.150MB (SLO: <46.000MB -4.0%) vs baseline: +5.8%


✅ strip_noaspect

Time: ✅ 176.083µs (SLO: <240.000µs 📉 -26.6%) vs baseline: -0.3%

Memory: ✅ 43.991MB (SLO: <46.000MB -4.4%) vs baseline: +4.7%


✅ swapcase_aspect

Time: ✅ 331.576µs (SLO: <500.000µs 📉 -33.7%) vs baseline: -1.0%

Memory: ✅ 44.146MB (SLO: <46.000MB -4.0%) vs baseline: +5.6%


✅ swapcase_noaspect

Time: ✅ 268.709µs (SLO: <400.000µs 📉 -32.8%) vs baseline: -0.2%

Memory: ✅ 44.148MB (SLO: <46.000MB -4.0%) vs baseline: +5.3%


✅ title_aspect

Time: ✅ 319.711µs (SLO: <500.000µs 📉 -36.1%) vs baseline: +0.2%

Memory: ✅ 44.037MB (SLO: <46.000MB -4.3%) vs baseline: +5.5%


✅ title_noaspect

Time: ✅ 252.909µs (SLO: <400.000µs 📉 -36.8%) vs baseline: -0.9%

Memory: ✅ 43.950MB (SLO: <46.000MB -4.5%) vs baseline: +4.7%


✅ translate_aspect

Time: ✅ 492.622µs (SLO: <700.000µs 📉 -29.6%) vs baseline: +0.2%

Memory: ✅ 43.892MB (SLO: <46.000MB -4.6%) vs baseline: +4.9%


✅ translate_noaspect

Time: ✅ 420.877µs (SLO: <500.000µs 📉 -15.8%) vs baseline: -1.5%

Memory: ✅ 44.024MB (SLO: <46.000MB -4.3%) vs baseline: +5.2%


✅ upper_aspect

Time: ✅ 294.995µs (SLO: <500.000µs 📉 -41.0%) vs baseline: -0.4%

Memory: ✅ 44.026MB (SLO: <46.000MB -4.3%) vs baseline: +5.1%


✅ upper_noaspect

Time: ✅ 229.913µs (SLO: <400.000µs 📉 -42.5%) vs baseline: -0.8%

Memory: ✅ 44.052MB (SLO: <46.000MB -4.2%) vs baseline: +5.2%


📈 iastaspectsospath - 24/24

✅ ospathbasename_aspect

Time: ✅ 506.965µs (SLO: <700.000µs 📉 -27.6%) vs baseline: 📈 +19.0%

Memory: ✅ 43.925MB (SLO: <46.000MB -4.5%) vs baseline: +5.1%


✅ ospathbasename_noaspect

Time: ✅ 433.269µs (SLO: <700.000µs 📉 -38.1%) vs baseline: +1.3%

Memory: ✅ 43.881MB (SLO: <46.000MB -4.6%) vs baseline: +4.8%


✅ ospathjoin_aspect

Time: ✅ 626.869µs (SLO: <700.000µs 📉 -10.4%) vs baseline: +1.0%

Memory: ✅ 43.839MB (SLO: <46.000MB -4.7%) vs baseline: +4.8%


✅ ospathjoin_noaspect

Time: ✅ 633.945µs (SLO: <700.000µs -9.4%) vs baseline: -0.8%

Memory: ✅ 43.893MB (SLO: <46.000MB -4.6%) vs baseline: +4.9%


✅ ospathnormcase_aspect

Time: ✅ 348.320µs (SLO: <700.000µs 📉 -50.2%) vs baseline: -1.3%

Memory: ✅ 43.972MB (SLO: <46.000MB -4.4%) vs baseline: +5.2%


✅ ospathnormcase_noaspect

Time: ✅ 362.123µs (SLO: <700.000µs 📉 -48.3%) vs baseline: +0.6%

Memory: ✅ 43.881MB (SLO: <46.000MB -4.6%) vs baseline: +5.0%


✅ ospathsplit_aspect

Time: ✅ 481.019µs (SLO: <700.000µs 📉 -31.3%) vs baseline: -0.8%

Memory: ✅ 43.859MB (SLO: <46.000MB -4.7%) vs baseline: +4.8%


✅ ospathsplit_noaspect

Time: ✅ 499.373µs (SLO: <700.000µs 📉 -28.7%) vs baseline: +1.3%

Memory: ✅ 43.895MB (SLO: <46.000MB -4.6%) vs baseline: +5.4%


✅ ospathsplitdrive_aspect

Time: ✅ 373.152µs (SLO: <700.000µs 📉 -46.7%) vs baseline: +0.3%

Memory: ✅ 43.804MB (SLO: <46.000MB -4.8%) vs baseline: +4.7%


✅ ospathsplitdrive_noaspect

Time: ✅ 73.296µs (SLO: <700.000µs 📉 -89.5%) vs baseline: +0.3%

Memory: ✅ 43.968MB (SLO: <46.000MB -4.4%) vs baseline: +5.2%


✅ ospathsplitext_aspect

Time: ✅ 457.474µs (SLO: <700.000µs 📉 -34.6%) vs baseline: +0.1%

Memory: ✅ 43.879MB (SLO: <46.000MB -4.6%) vs baseline: +4.8%


✅ ospathsplitext_noaspect

Time: ✅ 464.503µs (SLO: <700.000µs 📉 -33.6%) vs baseline: +0.6%

Memory: ✅ 43.744MB (SLO: <46.000MB -4.9%) vs baseline: +4.4%

🟡 Near SLO Breach (3 suites)
🟡 djangosimple - 30/30

✅ appsec

Time: ✅ 19.604ms (SLO: <22.300ms 📉 -12.1%) vs baseline: ~same

Memory: ✅ 69.330MB (SLO: <73.500MB -5.7%) vs baseline: +4.8%


✅ exception-replay-enabled

Time: ✅ 1.324ms (SLO: <1.450ms -8.7%) vs baseline: -0.2%

Memory: ✅ 67.546MB (SLO: <71.500MB -5.5%) vs baseline: +4.8%


✅ iast

Time: ✅ 19.594ms (SLO: <22.250ms 📉 -11.9%) vs baseline: -0.3%

Memory: ✅ 69.304MB (SLO: <75.000MB -7.6%) vs baseline: +4.8%


✅ profiler

Time: ✅ 15.149ms (SLO: <16.550ms -8.5%) vs baseline: ~same

Memory: ✅ 60.438MB (SLO: <61.000MB 🟡 -0.9%) vs baseline: +4.8%


✅ resource-renaming

Time: ✅ 19.606ms (SLO: <21.750ms -9.9%) vs baseline: -0.2%

Memory: ✅ 69.297MB (SLO: <73.500MB -5.7%) vs baseline: +4.9%


✅ span-code-origin

Time: ✅ 20.237ms (SLO: <28.200ms 📉 -28.2%) vs baseline: +1.9%

Memory: ✅ 69.615MB (SLO: <75.000MB -7.2%) vs baseline: +5.0%


✅ tracer

Time: ✅ 19.659ms (SLO: <21.750ms -9.6%) vs baseline: -1.0%

Memory: ✅ 69.287MB (SLO: <75.000MB -7.6%) vs baseline: +4.7%


✅ tracer-and-profiler

Time: ✅ 21.098ms (SLO: <23.500ms 📉 -10.2%) vs baseline: +0.1%

Memory: ✅ 71.300MB (SLO: <75.000MB -4.9%) vs baseline: +4.7%


✅ tracer-dont-create-db-spans

Time: ✅ 19.744ms (SLO: <21.500ms -8.2%) vs baseline: ~same

Memory: ✅ 69.229MB (SLO: <75.000MB -7.7%) vs baseline: +4.7%


✅ tracer-minimal

Time: ✅ 16.900ms (SLO: <17.500ms -3.4%) vs baseline: ~same

Memory: ✅ 69.322MB (SLO: <75.000MB -7.6%) vs baseline: +4.8%


✅ tracer-native

Time: ✅ 19.639ms (SLO: <21.750ms -9.7%) vs baseline: -0.5%

Memory: ✅ 69.255MB (SLO: <72.500MB -4.5%) vs baseline: +4.7%


✅ tracer-no-caches

Time: ✅ 17.679ms (SLO: <19.650ms 📉 -10.0%) vs baseline: -0.1%

Memory: ✅ 69.283MB (SLO: <75.000MB -7.6%) vs baseline: +4.9%


✅ tracer-no-databases

Time: ✅ 19.327ms (SLO: <20.100ms -3.8%) vs baseline: ~same

Memory: ✅ 69.245MB (SLO: <75.000MB -7.7%) vs baseline: +4.7%


✅ tracer-no-middleware

Time: ✅ 19.449ms (SLO: <21.500ms -9.5%) vs baseline: +0.9%

Memory: ✅ 69.240MB (SLO: <75.000MB -7.7%) vs baseline: +4.7%


✅ tracer-no-templates

Time: ✅ 19.702ms (SLO: <22.000ms 📉 -10.4%) vs baseline: +0.6%

Memory: ✅ 69.251MB (SLO: <73.500MB -5.8%) vs baseline: +4.8%


🟡 flasksimple - 18/18

✅ appsec-get

Time: ✅ 3.372ms (SLO: <4.750ms 📉 -29.0%) vs baseline: ~same

Memory: ✅ 56.433MB (SLO: <66.500MB 📉 -15.1%) vs baseline: +4.8%


✅ appsec-post

Time: ✅ 2.867ms (SLO: <6.750ms 📉 -57.5%) vs baseline: ~same

Memory: ✅ 56.495MB (SLO: <66.500MB 📉 -15.0%) vs baseline: +4.9%


✅ appsec-telemetry

Time: ✅ 3.405ms (SLO: <4.750ms 📉 -28.3%) vs baseline: +1.5%

Memory: ✅ 56.594MB (SLO: <66.500MB 📉 -14.9%) vs baseline: +5.0%


✅ debugger

Time: ✅ 1.879ms (SLO: <2.000ms -6.0%) vs baseline: ~same

Memory: ✅ 49.217MB (SLO: <51.500MB -4.4%) vs baseline: +4.8%


✅ iast-get

Time: ✅ 1.874ms (SLO: <2.000ms -6.3%) vs baseline: ~same

Memory: ✅ 45.883MB (SLO: <49.000MB -6.4%) vs baseline: +4.7%


✅ profiler

Time: ✅ 1.910ms (SLO: <2.100ms -9.0%) vs baseline: -0.6%

Memory: ✅ 52.544MB (SLO: <53.500MB 🟡 -1.8%) vs baseline: +4.9%


✅ resource-renaming

Time: ✅ 3.334ms (SLO: <3.650ms -8.7%) vs baseline: -0.3%

Memory: ✅ 56.600MB (SLO: <60.000MB -5.7%) vs baseline: +4.9%


✅ tracer

Time: ✅ 3.353ms (SLO: <3.650ms -8.1%) vs baseline: ~same

Memory: ✅ 56.514MB (SLO: <60.000MB -5.8%) vs baseline: +4.9%


✅ tracer-native

Time: ✅ 3.349ms (SLO: <3.650ms -8.2%) vs baseline: -0.1%

Memory: ✅ 56.578MB (SLO: <60.000MB -5.7%) vs baseline: +4.9%


🟡 recursivecomputation - 8/8

✅ deep

Time: ✅ 310.827ms (SLO: <320.950ms -3.2%) vs baseline: -0.3%

Memory: ✅ 37.336MB (SLO: <38.750MB -3.6%) vs baseline: +4.6%


✅ deep-profiled

Time: ✅ 328.671ms (SLO: <359.150ms -8.5%) vs baseline: ~same

Memory: ✅ 43.863MB (SLO: <46.000MB -4.6%) vs baseline: +5.1%


✅ medium

Time: ✅ 7.284ms (SLO: <7.400ms 🟡 -1.6%) vs baseline: -0.1%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +4.9%


✅ shallow

Time: ✅ 1.012ms (SLO: <1.050ms -3.6%) vs baseline: +1.0%

Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +5.0%

⚠️ Unstable Tests (2 suites)
⚠️ coreapiscenario - 10/10 (1 unstable)

⚠️ context_with_data_listeners

Time: ⚠️ 13.633µs (SLO: <20.000µs 📉 -31.8%) vs baseline: -0.3%

Memory: ✅ 36.274MB (SLO: <38.000MB -4.5%) vs baseline: +4.7%


✅ context_with_data_no_listeners

Time: ✅ 3.626µs (SLO: <10.000µs 📉 -63.7%) vs baseline: +0.3%

Memory: ✅ 36.333MB (SLO: <38.000MB -4.4%) vs baseline: +5.0%


✅ get_item_exists

Time: ✅ 0.583µs (SLO: <10.000µs 📉 -94.2%) vs baseline: -0.7%

Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +4.4%


✅ get_item_missing

Time: ✅ 0.636µs (SLO: <10.000µs 📉 -93.6%) vs baseline: -1.2%

Memory: ✅ 36.255MB (SLO: <38.000MB -4.6%) vs baseline: +4.7%


✅ set_item

Time: ✅ 24.442µs (SLO: <30.000µs 📉 -18.5%) vs baseline: -0.7%

Memory: ✅ 36.294MB (SLO: <38.000MB -4.5%) vs baseline: +4.7%


⚠️ packagesupdateimporteddependencies - 24/24 (1 unstable)

✅ import_many

Time: ✅ 155.366µs (SLO: <170.000µs -8.6%) vs baseline: +0.7%

Memory: ✅ 41.669MB (SLO: <46.000MB -9.4%) vs baseline: +5.3%


✅ import_many_cached

Time: ✅ 120.730µs (SLO: <130.000µs -7.1%) vs baseline: -0.1%

Memory: ✅ 41.677MB (SLO: <46.000MB -9.4%) vs baseline: +5.4%


✅ import_many_stdlib

Time: ✅ 0.796ms (SLO: <1.750ms 📉 -54.5%) vs baseline: ~same

Memory: ✅ 41.484MB (SLO: <46.000MB -9.8%) vs baseline: +4.9%


⚠️ import_many_stdlib_cached

Time: ⚠️ 0.185ms (SLO: <1.100ms 📉 -83.2%) vs baseline: -0.4%

Memory: ✅ 41.530MB (SLO: <46.000MB -9.7%) vs baseline: +4.9%


✅ import_many_unknown

Time: ✅ 834.877µs (SLO: <890.000µs -6.2%) vs baseline: +0.9%

Memory: ✅ 41.845MB (SLO: <46.000MB -9.0%) vs baseline: +5.0%


✅ import_many_unknown_cached

Time: ✅ 801.762µs (SLO: <870.000µs -7.8%) vs baseline: +0.4%

Memory: ✅ 41.762MB (SLO: <46.000MB -9.2%) vs baseline: +5.1%


✅ import_one

Time: ✅ 19.790µs (SLO: <30.000µs 📉 -34.0%) vs baseline: +0.3%

Memory: ✅ 41.545MB (SLO: <46.000MB -9.7%) vs baseline: +4.8%


✅ import_one_cache

Time: ✅ 6.323µs (SLO: <10.000µs 📉 -36.8%) vs baseline: +0.4%

Memory: ✅ 41.626MB (SLO: <46.000MB -9.5%) vs baseline: +5.0%


✅ import_one_stdlib

Time: ✅ 18.817µs (SLO: <20.000µs -5.9%) vs baseline: +0.7%

Memory: ✅ 41.553MB (SLO: <46.000MB -9.7%) vs baseline: +5.9%


✅ import_one_stdlib_cache

Time: ✅ 6.255µs (SLO: <10.000µs 📉 -37.5%) vs baseline: -0.9%

Memory: ✅ 41.563MB (SLO: <46.000MB -9.6%) vs baseline: +4.8%


✅ import_one_unknown

Time: ✅ 45.397µs (SLO: <50.000µs -9.2%) vs baseline: +0.3%

Memory: ✅ 41.657MB (SLO: <46.000MB -9.4%) vs baseline: +5.3%


✅ import_one_unknown_cache

Time: ✅ 6.297µs (SLO: <10.000µs 📉 -37.0%) vs baseline: +0.2%

Memory: ✅ 41.610MB (SLO: <43.000MB -3.2%) vs baseline: +5.4%

✅ All Tests Passing (19 suites)
codeprovenancefork - 2/2

✅ fork-10

Time: ✅ 2.172s (SLO: <2.300s -5.6%) vs baseline: +2.0%

Memory: ✅ 17.380MB (SLO: <20.000MB 📉 -13.1%) vs baseline: +4.7%


errortrackingdjangosimple - 6/6

✅ errortracking-enabled-all

Time: ✅ 16.439ms (SLO: <19.850ms 📉 -17.2%) vs baseline: ~same

Memory: ✅ 69.147MB (SLO: <75.000MB -7.8%) vs baseline: +4.9%


✅ errortracking-enabled-user

Time: ✅ 16.450ms (SLO: <19.400ms 📉 -15.2%) vs baseline: ~same

Memory: ✅ 69.088MB (SLO: <75.000MB -7.9%) vs baseline: +4.9%


✅ tracer-enabled

Time: ✅ 16.414ms (SLO: <19.450ms 📉 -15.6%) vs baseline: +0.2%

Memory: ✅ 68.970MB (SLO: <75.000MB -8.0%) vs baseline: +4.8%


errortrackingflasksqli - 6/6

✅ errortracking-enabled-all

Time: ✅ 2.083ms (SLO: <2.300ms -9.4%) vs baseline: -0.3%

Memory: ✅ 56.456MB (SLO: <60.000MB -5.9%) vs baseline: +4.7%


✅ errortracking-enabled-user

Time: ✅ 2.090ms (SLO: <2.250ms -7.1%) vs baseline: ~same

Memory: ✅ 56.406MB (SLO: <60.000MB -6.0%) vs baseline: +4.5%


✅ tracer-enabled

Time: ✅ 2.087ms (SLO: <2.300ms -9.2%) vs baseline: +0.2%

Memory: ✅ 56.387MB (SLO: <60.000MB -6.0%) vs baseline: +4.7%


flasksqli - 6/6

✅ appsec-enabled

Time: ✅ 2.079ms (SLO: <4.200ms 📉 -50.5%) vs baseline: -0.7%

Memory: ✅ 56.339MB (SLO: <66.000MB 📉 -14.6%) vs baseline: +4.4%


✅ iast-enabled

Time: ✅ 2.097ms (SLO: <2.800ms 📉 -25.1%) vs baseline: +0.2%

Memory: ✅ 56.524MB (SLO: <62.500MB -9.6%) vs baseline: +5.2%


✅ tracer-enabled

Time: ✅ 2.086ms (SLO: <2.250ms -7.3%) vs baseline: +0.2%

Memory: ✅ 56.388MB (SLO: <60.000MB -6.0%) vs baseline: +4.7%


forktime - 4/4

✅ baseline

Time: ✅ 1.946ms (SLO: <3.000ms 📉 -35.1%) vs baseline: +3.9%

Memory: ✅ 29.255MB (SLO: <33.000MB 📉 -11.3%) vs baseline: +5.1%


✅ configured

Time: ✅ 8.758ms (SLO: <13.000ms 📉 -32.6%) vs baseline: ~same

Memory: ✅ 56.570MB (SLO: <60.000MB -5.7%) vs baseline: +4.8%


httppropagationextract - 60/60

✅ all_styles_all_headers

Time: ✅ 77.024µs (SLO: <100.000µs 📉 -23.0%) vs baseline: -0.3%

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +4.9%


✅ b3_headers

Time: ✅ 12.785µs (SLO: <20.000µs 📉 -36.1%) vs baseline: -0.4%

Memory: ✅ 36.746MB (SLO: <38.000MB -3.3%) vs baseline: +5.0%


✅ b3_single_headers

Time: ✅ 11.976µs (SLO: <20.000µs 📉 -40.1%) vs baseline: +0.9%

Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +4.5%


✅ datadog_tracecontext_tracestate_not_propagated_on_trace_id_no_match

Time: ✅ 61.890µs (SLO: <80.000µs 📉 -22.6%) vs baseline: -0.2%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +4.9%


✅ datadog_tracecontext_tracestate_propagated_on_trace_id_match

Time: ✅ 63.352µs (SLO: <80.000µs 📉 -20.8%) vs baseline: -0.6%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +5.3%


✅ empty_headers

Time: ✅ 1.286µs (SLO: <10.000µs 📉 -87.1%) vs baseline: -0.6%

Memory: ✅ 36.490MB (SLO: <38.000MB -4.0%) vs baseline: +4.0%


✅ full_t_id_datadog_headers

Time: ✅ 21.309µs (SLO: <30.000µs 📉 -29.0%) vs baseline: ~same

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +5.1%


✅ invalid_priority_header

Time: ✅ 5.897µs (SLO: <10.000µs 📉 -41.0%) vs baseline: +0.6%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +4.7%


✅ invalid_span_id_header

Time: ✅ 5.928µs (SLO: <10.000µs 📉 -40.7%) vs baseline: +1.1%

Memory: ✅ 36.825MB (SLO: <38.000MB -3.1%) vs baseline: +5.2%


✅ invalid_tags_header

Time: ✅ 5.973µs (SLO: <10.000µs 📉 -40.3%) vs baseline: +0.4%

Memory: ✅ 36.766MB (SLO: <38.000MB -3.2%) vs baseline: +5.3%


✅ invalid_trace_id_header

Time: ✅ 5.942µs (SLO: <10.000µs 📉 -40.6%) vs baseline: +0.7%

Memory: ✅ 36.805MB (SLO: <38.000MB -3.1%) vs baseline: +5.2%


✅ large_header_no_matches

Time: ✅ 27.083µs (SLO: <30.000µs -9.7%) vs baseline: +0.5%

Memory: ✅ 36.766MB (SLO: <38.000MB -3.2%) vs baseline: +5.1%


✅ large_valid_headers_all

Time: ✅ 28.147µs (SLO: <40.000µs 📉 -29.6%) vs baseline: +0.3%

Memory: ✅ 36.746MB (SLO: <38.000MB -3.3%) vs baseline: +5.1%


✅ medium_header_no_matches

Time: ✅ 9.267µs (SLO: <20.000µs 📉 -53.7%) vs baseline: ~same

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +4.9%


✅ medium_valid_headers_all

Time: ✅ 10.657µs (SLO: <20.000µs 📉 -46.7%) vs baseline: +0.4%

Memory: ✅ 36.648MB (SLO: <38.000MB -3.6%) vs baseline: +4.6%


✅ none_propagation_style

Time: ✅ 1.400µs (SLO: <10.000µs 📉 -86.0%) vs baseline: +0.2%

Memory: ✅ 36.903MB (SLO: <38.000MB -2.9%) vs baseline: +5.3%


✅ tracecontext_headers

Time: ✅ 32.746µs (SLO: <40.000µs 📉 -18.1%) vs baseline: ~same

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +4.6%


✅ valid_headers_all

Time: ✅ 5.922µs (SLO: <10.000µs 📉 -40.8%) vs baseline: +0.3%

Memory: ✅ 36.746MB (SLO: <38.000MB -3.3%) vs baseline: +4.8%


✅ valid_headers_basic

Time: ✅ 5.516µs (SLO: <10.000µs 📉 -44.8%) vs baseline: +0.2%

Memory: ✅ 36.687MB (SLO: <38.000MB -3.5%) vs baseline: +4.7%


✅ wsgi_empty_headers

Time: ✅ 1.297µs (SLO: <10.000µs 📉 -87.0%) vs baseline: +0.2%

Memory: ✅ 36.667MB (SLO: <38.000MB -3.5%) vs baseline: +4.6%


✅ wsgi_invalid_priority_header

Time: ✅ 5.962µs (SLO: <10.000µs 📉 -40.4%) vs baseline: -0.2%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +5.0%


✅ wsgi_invalid_span_id_header

Time: ✅ 1.312µs (SLO: <10.000µs 📉 -86.9%) vs baseline: +1.3%

Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +4.9%


✅ wsgi_invalid_tags_header

Time: ✅ 5.957µs (SLO: <10.000µs 📉 -40.4%) vs baseline: ~same

Memory: ✅ 36.746MB (SLO: <38.000MB -3.3%) vs baseline: +5.0%


✅ wsgi_invalid_trace_id_header

Time: ✅ 5.993µs (SLO: <10.000µs 📉 -40.1%) vs baseline: ~same

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +4.9%


✅ wsgi_large_header_no_matches

Time: ✅ 28.162µs (SLO: <40.000µs 📉 -29.6%) vs baseline: ~same

Memory: ✅ 36.785MB (SLO: <38.000MB -3.2%) vs baseline: +5.1%


✅ wsgi_large_valid_headers_all

Time: ✅ 29.233µs (SLO: <40.000µs 📉 -26.9%) vs baseline: -0.6%

Memory: ✅ 36.805MB (SLO: <38.000MB -3.1%) vs baseline: +5.2%


✅ wsgi_medium_header_no_matches

Time: ✅ 9.512µs (SLO: <20.000µs 📉 -52.4%) vs baseline: +0.3%

Memory: ✅ 36.687MB (SLO: <38.000MB -3.5%) vs baseline: +4.6%


✅ wsgi_medium_valid_headers_all

Time: ✅ 11.026µs (SLO: <20.000µs 📉 -44.9%) vs baseline: +0.2%

Memory: ✅ 36.766MB (SLO: <38.000MB -3.2%) vs baseline: +5.1%


✅ wsgi_valid_headers_all

Time: ✅ 6.034µs (SLO: <10.000µs 📉 -39.7%) vs baseline: +2.3%

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +4.8%


✅ wsgi_valid_headers_basic

Time: ✅ 5.556µs (SLO: <10.000µs 📉 -44.4%) vs baseline: +0.6%

Memory: ✅ 36.805MB (SLO: <38.000MB -3.1%) vs baseline: +5.0%


httppropagationinject - 16/16

✅ ids_only

Time: ✅ 20.824µs (SLO: <30.000µs 📉 -30.6%) vs baseline: +3.9%

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +6.1%


✅ with_all

Time: ✅ 27.143µs (SLO: <40.000µs 📉 -32.1%) vs baseline: ~same

Memory: ✅ 36.530MB (SLO: <38.000MB -3.9%) vs baseline: +4.2%


✅ with_dd_origin

Time: ✅ 23.804µs (SLO: <30.000µs 📉 -20.7%) vs baseline: +0.3%

Memory: ✅ 36.589MB (SLO: <38.000MB -3.7%) vs baseline: +5.1%


✅ with_priority_and_origin

Time: ✅ 23.155µs (SLO: <40.000µs 📉 -42.1%) vs baseline: -1.1%

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +5.6%


✅ with_sampling_priority

Time: ✅ 20.062µs (SLO: <30.000µs 📉 -33.1%) vs baseline: ~same

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +5.6%


✅ with_tags

Time: ✅ 24.967µs (SLO: <40.000µs 📉 -37.6%) vs baseline: +0.2%

Memory: ✅ 36.569MB (SLO: <38.000MB -3.8%) vs baseline: +4.8%


✅ with_tags_invalid

Time: ✅ 26.486µs (SLO: <40.000µs 📉 -33.8%) vs baseline: +0.4%

Memory: ✅ 36.451MB (SLO: <38.000MB -4.1%) vs baseline: +4.6%


✅ with_tags_max_size

Time: ✅ 25.573µs (SLO: <40.000µs 📉 -36.1%) vs baseline: +0.2%

Memory: ✅ 36.412MB (SLO: <38.000MB -4.2%) vs baseline: +4.7%


iastaspectssplit - 12/12

✅ rsplit_aspect

Time: ✅ 159.101µs (SLO: <250.000µs 📉 -36.4%) vs baseline: +4.9%

Memory: ✅ 43.800MB (SLO: <46.000MB -4.8%) vs baseline: +5.0%


✅ rsplit_noaspect

Time: ✅ 154.930µs (SLO: <250.000µs 📉 -38.0%) vs baseline: -2.3%

Memory: ✅ 43.858MB (SLO: <46.000MB -4.7%) vs baseline: +4.8%


✅ split_aspect

Time: ✅ 155.865µs (SLO: <250.000µs 📉 -37.7%) vs baseline: +2.9%

Memory: ✅ 43.685MB (SLO: <46.000MB -5.0%) vs baseline: +4.5%


✅ split_noaspect

Time: ✅ 155.367µs (SLO: <250.000µs 📉 -37.9%) vs baseline: -1.5%

Memory: ✅ 43.874MB (SLO: <46.000MB -4.6%) vs baseline: +5.1%


✅ splitlines_aspect

Time: ✅ 149.925µs (SLO: <250.000µs 📉 -40.0%) vs baseline: -1.8%

Memory: ✅ 43.802MB (SLO: <46.000MB -4.8%) vs baseline: +4.6%


✅ splitlines_noaspect

Time: ✅ 156.424µs (SLO: <250.000µs 📉 -37.4%) vs baseline: +2.3%

Memory: ✅ 43.831MB (SLO: <46.000MB -4.7%) vs baseline: +4.7%


iastpropagation - 8/8

✅ no-propagation

Time: ✅ 48.823µs (SLO: <60.000µs 📉 -18.6%) vs baseline: +0.3%

Memory: ✅ 40.049MB (SLO: <42.000MB -4.6%) vs baseline: +4.9%


✅ propagation_enabled

Time: ✅ 136.697µs (SLO: <190.000µs 📉 -28.1%) vs baseline: -1.0%

Memory: ✅ 40.088MB (SLO: <42.000MB -4.6%) vs baseline: +4.7%


✅ propagation_enabled_100

Time: ✅ 1.585ms (SLO: <2.300ms 📉 -31.1%) vs baseline: +0.1%

Memory: ✅ 40.049MB (SLO: <42.000MB -4.6%) vs baseline: +4.7%


✅ propagation_enabled_1000

Time: ✅ 29.102ms (SLO: <34.550ms 📉 -15.8%) vs baseline: ~same

Memory: ✅ 40.167MB (SLO: <42.000MB -4.4%) vs baseline: +4.6%


otelsdkspan - 24/24

✅ add-event

Time: ✅ 40.837ms (SLO: <42.000ms -2.8%) vs baseline: +0.7%

Memory: ✅ 39.046MB (SLO: <40.750MB -4.2%) vs baseline: +4.6%


✅ add-link

Time: ✅ 36.503ms (SLO: <38.550ms -5.3%) vs baseline: -0.5%

Memory: ✅ 39.105MB (SLO: <40.750MB -4.0%) vs baseline: +4.8%


✅ add-metrics

Time: ✅ 218.770ms (SLO: <232.000ms -5.7%) vs baseline: -0.8%

Memory: ✅ 39.086MB (SLO: <40.750MB -4.1%) vs baseline: +4.9%


✅ add-tags

Time: ✅ 211.541ms (SLO: <221.600ms -4.5%) vs baseline: -2.5%

Memory: ✅ 39.066MB (SLO: <40.750MB -4.1%) vs baseline: +4.5%


✅ get-context

Time: ✅ 29.254ms (SLO: <31.300ms -6.5%) vs baseline: +0.3%

Memory: ✅ 39.066MB (SLO: <40.750MB -4.1%) vs baseline: +4.8%


✅ is-recording

Time: ✅ 29.367ms (SLO: <31.000ms -5.3%) vs baseline: +0.6%

Memory: ✅ 39.125MB (SLO: <40.750MB -4.0%) vs baseline: +4.8%


✅ record-exception

Time: ✅ 63.600ms (SLO: <65.850ms -3.4%) vs baseline: -0.1%

Memory: ✅ 39.105MB (SLO: <40.750MB -4.0%) vs baseline: +4.6%


✅ set-status

Time: ✅ 32.197ms (SLO: <34.150ms -5.7%) vs baseline: +0.9%

Memory: ✅ 39.086MB (SLO: <40.750MB -4.1%) vs baseline: +4.9%


✅ start

Time: ✅ 29.339ms (SLO: <30.150ms -2.7%) vs baseline: +1.4%

Memory: ✅ 39.105MB (SLO: <40.750MB -4.0%) vs baseline: +4.6%


✅ start-finish

Time: ✅ 33.936ms (SLO: <35.350ms -4.0%) vs baseline: -0.2%

Memory: ✅ 39.046MB (SLO: <40.750MB -4.2%) vs baseline: +4.6%


✅ start-finish-telemetry

Time: ✅ 34.144ms (SLO: <35.450ms -3.7%) vs baseline: +0.6%

Memory: ✅ 39.027MB (SLO: <40.750MB -4.2%) vs baseline: +4.5%


✅ update-name

Time: ✅ 31.252ms (SLO: <33.400ms -6.4%) vs baseline: +0.6%

Memory: ✅ 39.125MB (SLO: <40.750MB -4.0%) vs baseline: +5.0%


otelspan - 22/22

✅ add-event

Time: ✅ 38.319ms (SLO: <47.150ms 📉 -18.7%) vs baseline: ~same

Memory: ✅ 41.381MB (SLO: <47.000MB 📉 -12.0%) vs baseline: +4.8%


✅ add-metrics

Time: ✅ 257.417ms (SLO: <344.800ms 📉 -25.3%) vs baseline: ~same

Memory: ✅ 45.917MB (SLO: <47.500MB -3.3%) vs baseline: +4.9%


✅ add-tags

Time: ✅ 307.390ms (SLO: <330.000ms -6.9%) vs baseline: +0.2%

Memory: ✅ 45.835MB (SLO: <47.500MB -3.5%) vs baseline: +4.5%


✅ get-context

Time: ✅ 80.857ms (SLO: <92.350ms 📉 -12.4%) vs baseline: ~same

Memory: ✅ 41.602MB (SLO: <46.500MB 📉 -10.5%) vs baseline: +4.7%


✅ is-recording

Time: ✅ 36.574ms (SLO: <44.500ms 📉 -17.8%) vs baseline: ~same

Memory: ✅ 41.379MB (SLO: <47.500MB 📉 -12.9%) vs baseline: +5.1%


✅ record-exception

Time: ✅ 56.825ms (SLO: <67.650ms 📉 -16.0%) vs baseline: -0.2%

Memory: ✅ 41.874MB (SLO: <47.000MB 📉 -10.9%) vs baseline: +4.9%


✅ set-status

Time: ✅ 43.324ms (SLO: <50.400ms 📉 -14.0%) vs baseline: +0.2%

Memory: ✅ 41.365MB (SLO: <47.000MB 📉 -12.0%) vs baseline: +4.7%


✅ start

Time: ✅ 37.551ms (SLO: <43.450ms 📉 -13.6%) vs baseline: +4.2%

Memory: ✅ 41.389MB (SLO: <47.000MB 📉 -11.9%) vs baseline: +5.0%


✅ start-finish

Time: ✅ 84.433ms (SLO: <90.000ms -6.2%) vs baseline: -0.5%

Memory: ✅ 38.909MB (SLO: <46.500MB 📉 -16.3%) vs baseline: +4.9%


✅ start-finish-telemetry

Time: ✅ 86.377ms (SLO: <91.000ms -5.1%) vs baseline: -0.2%

Memory: ✅ 38.869MB (SLO: <46.500MB 📉 -16.4%) vs baseline: +4.8%


✅ update-name

Time: ✅ 37.523ms (SLO: <45.150ms 📉 -16.9%) vs baseline: -0.4%

Memory: ✅ 41.305MB (SLO: <47.000MB 📉 -12.1%) vs baseline: +4.9%


packagespackageforrootmodulemapping - 4/4

✅ cache_off

Time: ✅ 344.875ms (SLO: <354.300ms -2.7%) vs baseline: ~same

Memory: ✅ 42.237MB (SLO: <46.000MB -8.2%) vs baseline: +4.7%


✅ cache_on

Time: ✅ 0.383µs (SLO: <10.000µs 📉 -96.2%) vs baseline: +0.5%

Memory: ✅ 41.037MB (SLO: <46.000MB 📉 -10.8%) vs baseline: +5.2%


rand - 2/2

✅ rand128bits

Time: ✅ 0.184µs (SLO: <21.000µs 📉 -99.1%) vs baseline: -0.6%


✅ rand64bits

Time: ✅ 0.126µs (SLO: <15.000µs 📉 -99.2%) vs baseline: ~same


ratelimiter - 12/12

✅ defaults

Time: ✅ 2.376µs (SLO: <10.000µs 📉 -76.2%) vs baseline: +0.4%

Memory: ✅ 36.471MB (SLO: <38.000MB -4.0%) vs baseline: +4.8%


✅ high_rate_limit

Time: ✅ 2.452µs (SLO: <10.000µs 📉 -75.5%) vs baseline: +0.9%

Memory: ✅ 36.510MB (SLO: <38.000MB -3.9%) vs baseline: +4.9%


✅ long_window

Time: ✅ 2.372µs (SLO: <10.000µs 📉 -76.3%) vs baseline: +0.9%

Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +5.0%


✅ low_rate_limit

Time: ✅ 2.402µs (SLO: <10.000µs 📉 -76.0%) vs baseline: +1.3%

Memory: ✅ 36.569MB (SLO: <38.000MB -3.8%) vs baseline: +4.8%


✅ no_rate_limit

Time: ✅ 0.831µs (SLO: <10.000µs 📉 -91.7%) vs baseline: ~same

Memory: ✅ 36.667MB (SLO: <38.000MB -3.5%) vs baseline: +5.3%


✅ short_window

Time: ✅ 2.523µs (SLO: <10.000µs 📉 -74.8%) vs baseline: +1.4%

Memory: ✅ 36.569MB (SLO: <38.000MB -3.8%) vs baseline: +4.9%


samplingrules - 8/8

✅ average_match

Time: ✅ 147.242µs (SLO: <290.000µs 📉 -49.2%) vs baseline: -0.4%

Memory: ✅ 36.215MB (SLO: <38.000MB -4.7%) vs baseline: +4.8%


✅ high_match

Time: ✅ 191.016µs (SLO: <480.000µs 📉 -60.2%) vs baseline: -1.2%

Memory: ✅ 36.313MB (SLO: <38.000MB -4.4%) vs baseline: +5.0%


✅ low_match

Time: ✅ 101.010µs (SLO: <120.000µs 📉 -15.8%) vs baseline: +1.4%

Memory: ✅ 701.772MB (SLO: <780.000MB 📉 -10.0%) vs baseline: +4.9%


✅ very_low_match

Time: ✅ 2.876ms (SLO: <8.500ms 📉 -66.2%) vs baseline: +0.3%

Memory: ✅ 78.969MB (SLO: <85.000MB -7.1%) vs baseline: +4.8%


sethttpmeta - 32/32

✅ all-disabled

Time: ✅ 9.852µs (SLO: <20.000µs 📉 -50.7%) vs baseline: -0.5%

Memory: ✅ 37.159MB (SLO: <38.750MB -4.1%) vs baseline: +4.8%


✅ all-enabled

Time: ✅ 38.796µs (SLO: <50.000µs 📉 -22.4%) vs baseline: +1.8%

Memory: ✅ 37.198MB (SLO: <38.750MB -4.0%) vs baseline: +5.1%


✅ collectipvariant_exists

Time: ✅ 38.695µs (SLO: <50.000µs 📉 -22.6%) vs baseline: -0.6%

Memory: ✅ 37.297MB (SLO: <38.750MB -3.8%) vs baseline: +5.1%


✅ no-collectipvariant

Time: ✅ 38.048µs (SLO: <50.000µs 📉 -23.9%) vs baseline: -1.6%

Memory: ✅ 37.257MB (SLO: <38.750MB -3.9%) vs baseline: +4.9%


✅ no-useragentvariant

Time: ✅ 37.033µs (SLO: <50.000µs 📉 -25.9%) vs baseline: +0.2%

Memory: ✅ 37.198MB (SLO: <38.750MB -4.0%) vs baseline: +4.6%


✅ obfuscation-no-query

Time: ✅ 38.426µs (SLO: <50.000µs 📉 -23.1%) vs baseline: -0.6%

Memory: ✅ 37.277MB (SLO: <38.750MB -3.8%) vs baseline: +5.4%


✅ obfuscation-regular-case-explicit-query

Time: ✅ 74.790µs (SLO: <90.000µs 📉 -16.9%) vs baseline: +0.3%

Memory: ✅ 37.473MB (SLO: <38.750MB -3.3%) vs baseline: +4.8%


✅ obfuscation-regular-case-implicit-query

Time: ✅ 75.129µs (SLO: <90.000µs 📉 -16.5%) vs baseline: -0.2%

Memory: ✅ 37.493MB (SLO: <38.750MB -3.2%) vs baseline: +5.0%


✅ obfuscation-send-querystring-disabled

Time: ✅ 153.225µs (SLO: <170.000µs -9.9%) vs baseline: -0.2%

Memory: ✅ 37.493MB (SLO: <38.750MB -3.2%) vs baseline: +4.9%


✅ obfuscation-worst-case-explicit-query

Time: ✅ 147.277µs (SLO: <160.000µs -8.0%) vs baseline: -0.1%

Memory: ✅ 37.532MB (SLO: <38.750MB -3.1%) vs baseline: +4.7%


✅ obfuscation-worst-case-implicit-query

Time: ✅ 153.765µs (SLO: <170.000µs -9.5%) vs baseline: -0.3%

Memory: ✅ 37.513MB (SLO: <38.750MB -3.2%) vs baseline: +4.8%


✅ useragentvariant_exists_1

Time: ✅ 37.810µs (SLO: <50.000µs 📉 -24.4%) vs baseline: +0.2%

Memory: ✅ 37.238MB (SLO: <38.750MB -3.9%) vs baseline: +5.2%


✅ useragentvariant_exists_2

Time: ✅ 38.468µs (SLO: <50.000µs 📉 -23.1%) vs baseline: -0.3%

Memory: ✅ 37.277MB (SLO: <38.750MB -3.8%) vs baseline: +4.7%


✅ useragentvariant_exists_3

Time: ✅ 38.117µs (SLO: <50.000µs 📉 -23.8%) vs baseline: -1.1%

Memory: ✅ 37.159MB (SLO: <38.750MB -4.1%) vs baseline: +4.7%


✅ useragentvariant_not_exists_1

Time: ✅ 37.523µs (SLO: <50.000µs 📉 -25.0%) vs baseline: -0.6%

Memory: ✅ 37.297MB (SLO: <38.750MB -3.8%) vs baseline: +4.9%


✅ useragentvariant_not_exists_2

Time: ✅ 37.604µs (SLO: <50.000µs 📉 -24.8%) vs baseline: -0.2%

Memory: ✅ 37.238MB (SLO: <38.750MB -3.9%) vs baseline: +4.4%


span - 26/26

✅ add-event

Time: ✅ 17.584ms (SLO: <22.500ms 📉 -21.8%) vs baseline: +0.3%

Memory: ✅ 38.644MB (SLO: <53.000MB 📉 -27.1%) vs baseline: +4.8%


✅ add-metrics

Time: ✅ 86.436ms (SLO: <93.500ms -7.6%) vs baseline: ~same

Memory: ✅ 43.051MB (SLO: <53.000MB 📉 -18.8%) vs baseline: +4.9%


✅ add-tags

Time: ✅ 145.209ms (SLO: <155.000ms -6.3%) vs baseline: ~same

Memory: ✅ 43.093MB (SLO: <53.000MB 📉 -18.7%) vs baseline: +5.1%


✅ get-context

Time: ✅ 16.808ms (SLO: <20.500ms 📉 -18.0%) vs baseline: ~same

Memory: ✅ 38.480MB (SLO: <53.000MB 📉 -27.4%) vs baseline: +4.7%


✅ is-recording

Time: ✅ 16.853ms (SLO: <20.500ms 📉 -17.8%) vs baseline: -0.3%

Memory: ✅ 38.421MB (SLO: <53.000MB 📉 -27.5%) vs baseline: +4.6%


✅ record-exception

Time: ✅ 35.715ms (SLO: <41.000ms 📉 -12.9%) vs baseline: ~same

Memory: ✅ 39.075MB (SLO: <53.000MB 📉 -26.3%) vs baseline: +4.9%


✅ set-status

Time: ✅ 18.571ms (SLO: <22.000ms 📉 -15.6%) vs baseline: -0.3%

Memory: ✅ 38.490MB (SLO: <53.000MB 📉 -27.4%) vs baseline: +4.9%


✅ start

Time: ✅ 17.453ms (SLO: <20.500ms 📉 -14.9%) vs baseline: +4.7%

Memory: ✅ 38.630MB (SLO: <53.000MB 📉 -27.1%) vs baseline: +5.1%


✅ start-finish

Time: ✅ 53.857ms (SLO: <56.000ms -3.8%) vs baseline: +0.4%

Memory: ✅ 36.510MB (SLO: <38.000MB -3.9%) vs baseline: +4.4%


✅ start-finish-telemetry

Time: ✅ 54.880ms (SLO: <58.000ms -5.4%) vs baseline: +0.1%

Memory: ✅ 36.431MB (SLO: <38.000MB -4.1%) vs baseline: +4.4%


✅ start-finish-traceid128

Time: ✅ 56.523ms (SLO: <60.000ms -5.8%) vs baseline: +0.9%

Memory: ✅ 36.471MB (SLO: <38.000MB -4.0%) vs baseline: +4.5%


✅ start-traceid128

Time: ✅ 16.788ms (SLO: <22.500ms 📉 -25.4%) vs baseline: ~same

Memory: ✅ 38.485MB (SLO: <53.000MB 📉 -27.4%) vs baseline: +5.1%


✅ update-name

Time: ✅ 17.328ms (SLO: <22.000ms 📉 -21.2%) vs baseline: -0.3%

Memory: ✅ 38.480MB (SLO: <53.000MB 📉 -27.4%) vs baseline: +4.8%


telemetryaddmetric - 30/30

✅ 1-count-metric-1-times

Time: ✅ 2.280µs (SLO: <20.000µs 📉 -88.6%) vs baseline: +7.6%

Memory: ✅ 36.628MB (SLO: <38.000MB -3.6%) vs baseline: +4.9%


✅ 1-count-metrics-100-times

Time: ✅ 152.988µs (SLO: <220.000µs 📉 -30.5%) vs baseline: +0.8%

Memory: ✅ 36.726MB (SLO: <38.000MB -3.4%) vs baseline: +5.1%


✅ 1-distribution-metric-1-times

Time: ✅ 2.384µs (SLO: <20.000µs 📉 -88.1%) vs baseline: -1.3%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +5.1%


✅ 1-distribution-metrics-100-times

Time: ✅ 163.192µs (SLO: <230.000µs 📉 -29.0%) vs baseline: -0.2%

Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +4.7%


✅ 1-gauge-metric-1-times

Time: ✅ 1.965µs (SLO: <20.000µs 📉 -90.2%) vs baseline: -1.4%

Memory: ✅ 36.825MB (SLO: <38.000MB -3.1%) vs baseline: +5.5%


✅ 1-gauge-metrics-100-times

Time: ✅ 135.951µs (SLO: <150.000µs -9.4%) vs baseline: ~same

Memory: ✅ 36.648MB (SLO: <38.000MB -3.6%) vs baseline: +4.6%


✅ 1-rate-metric-1-times

Time: ✅ 2.274µs (SLO: <20.000µs 📉 -88.6%) vs baseline: +1.3%

Memory: ✅ 36.667MB (SLO: <38.000MB -3.5%) vs baseline: +4.8%


✅ 1-rate-metrics-100-times

Time: ✅ 168.445µs (SLO: <250.000µs 📉 -32.6%) vs baseline: +0.4%

Memory: ✅ 36.530MB (SLO: <38.000MB -3.9%) vs baseline: +4.4%


✅ 100-count-metrics-100-times

Time: ✅ 15.410ms (SLO: <22.000ms 📉 -30.0%) vs baseline: -0.2%

Memory: ✅ 36.648MB (SLO: <38.000MB -3.6%) vs baseline: +4.9%


✅ 100-distribution-metrics-100-times

Time: ✅ 1.732ms (SLO: <2.550ms 📉 -32.1%) vs baseline: -0.1%

Memory: ✅ 36.608MB (SLO: <38.000MB -3.7%) vs baseline: +4.4%


✅ 100-gauge-metrics-100-times

Time: ✅ 1.415ms (SLO: <1.550ms -8.7%) vs baseline: -0.7%

Memory: ✅ 36.707MB (SLO: <38.000MB -3.4%) vs baseline: +4.8%


✅ 100-rate-metrics-100-times

Time: ✅ 1.737ms (SLO: <2.550ms 📉 -31.9%) vs baseline: -0.5%

Memory: ✅ 36.766MB (SLO: <38.000MB -3.2%) vs baseline: +5.1%


✅ flush-1-metric

Time: ✅ 3.662µs (SLO: <20.000µs 📉 -81.7%) vs baseline: +0.6%

Memory: ✅ 36.746MB (SLO: <38.000MB -3.3%) vs baseline: +4.7%


✅ flush-100-metrics

Time: ✅ 176.368µs (SLO: <250.000µs 📉 -29.5%) vs baseline: +0.3%

Memory: ✅ 36.648MB (SLO: <38.000MB -3.6%) vs baseline: +5.0%


✅ flush-1000-metrics

Time: ✅ 2.193ms (SLO: <2.500ms 📉 -12.3%) vs baseline: ~same

Memory: ✅ 37.375MB (SLO: <38.750MB -3.5%) vs baseline: +4.8%


tracer - 6/6

✅ large

Time: ✅ 31.192ms (SLO: <32.950ms -5.3%) vs baseline: -0.1%

Memory: ✅ 37.906MB (SLO: <39.250MB -3.4%) vs baseline: +5.7%


✅ medium

Time: ✅ 3.075ms (SLO: <3.200ms -3.9%) vs baseline: -1.0%

Memory: ✅ 36.215MB (SLO: <38.750MB -6.5%) vs baseline: +4.9%


✅ small

Time: ✅ 357.445µs (SLO: <370.000µs -3.4%) vs baseline: +3.0%

Memory: ✅ 36.353MB (SLO: <38.750MB -6.2%) vs baseline: +5.3%

ℹ️ Scenarios Missing SLO Configuration (46 scenarios)

The following scenarios exist in candidate data but have no SLO thresholds configured:

  • coreapiscenario-core_dispatch_listeners
  • coreapiscenario-core_dispatch_no_listeners
  • coreapiscenario-core_dispatch_with_results_listeners
  • coreapiscenario-core_dispatch_with_results_no_listeners
  • djangosimple-baseline
  • errortrackingdjangosimple-baseline
  • errortrackingflasksqli-baseline
  • flasksimple-baseline
  • flasksqli-baseline
  • iast_aspects-re_expand_aspect
  • iast_aspects-re_expand_noaspect
  • iast_aspects-re_findall_aspect
  • iast_aspects-re_findall_noaspect
  • iast_aspects-re_finditer_aspect
  • iast_aspects-re_finditer_noaspect
  • iast_aspects-re_fullmatch_aspect
  • iast_aspects-re_fullmatch_noaspect
  • iast_aspects-re_group_aspect
  • iast_aspects-re_group_noaspect
  • iast_aspects-re_groups_aspect
  • iast_aspects-re_groups_noaspect
  • iast_aspects-re_match_aspect
  • iast_aspects-re_match_noaspect
  • iast_aspects-re_search_aspect
  • iast_aspects-re_search_noaspect
  • iast_aspects-re_sub_aspect
  • iast_aspects-re_sub_noaspect
  • iast_aspects-re_subn_aspect
  • iast_aspects-re_subn_noaspect
  • sethttpmeta-obfuscation-disabled
  • startup-baseline
  • startup-baseline_django
  • startup-baseline_flask
  • startup-ddtrace_run
  • startup-ddtrace_run_appsec
  • startup-ddtrace_run_profiling
  • startup-ddtrace_run_runtime_metrics
  • startup-ddtrace_run_send_span
  • startup-ddtrace_run_telemetry_disabled
  • startup-ddtrace_run_telemetry_enabled
  • startup-import_ddtrace
  • startup-import_ddtrace_auto
  • startup-import_ddtrace_auto_django
  • startup-import_ddtrace_auto_flask
  • startup-import_ddtrace_django
  • startup-import_ddtrace_flask

taegyunkim and others added 3 commits March 30, 2026 17:16
… stale CMake caches

setup.py: Add _purge_stale_cmake_caches() to detect and remove CMake build
directories whose CMakeCache.txt was configured at a different absolute path
(host macOS vs Docker Linux).  Called before libdd_wrapper and FetchContent
cmake builds so switching environments doesn't hard-fail cmake.

scripts/run-tests: Phase 1 now passes -s (--skip-base-install) to riot run.
riot's generate_base_venvs() was unconditionally re-invoking install_dev_pkg()
on every Phase 1 call even when the base venv already had ddtrace installed
(e.g. after riot generate).  The -s flag skips that redundant pip install -e .
while still creating the per-hash prefix directory (test deps) on first use.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Passing -s would skip install_dev_pkg() even on a fresh checkout where
the base venv doesn't have ddtrace installed yet, breaking the cold-start
case. Revert to always running Phase 1 without -s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@datadog-prod-us1-5
Copy link
Copy Markdown

datadog-prod-us1-5 bot commented Mar 30, 2026

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: e6c0f77 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/no-changelog A changelog entry is not required for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant