## DataDog/dd-trace-py — v4.15.0rc1…v4.15.0rc2

_198+ commits._

### Features
- **feat(llmobs): emit gen_ai.* attributes on APM spans (#20083)** (c8f94a2)
- **feat(anyio): propagate context through worker threads (#20023)** (3909863)
- **feat(kafka): link consume spans to producer traces instead of continuing them (#18667)** (11b7da8)
- **feat(llmobs): capture model stop reason for openai and anthropic (#19752)** (2e61edb)
- **feat(openfeature): bound evaluation context reported with flag evaluations (#19881)** (a88f5c2)
- **feat(ci_visibility): dynamic atr retries (#20028)** (528d7b5)
- **feat: add non-lazy uWSGI support (#20021)** (220a803)

### Fixes
- **fix(symdb): preserve first fork uploader (#20320)** (c9882ff)
- **fix(llmobs): keep standalone product traces when APM tracing is disabled (#20253)** (a032027)
- **fix(mysql): trace connections created with Connect (#20288)** (d63ffa0)
- **fix(aiguard): classify AI Guard evaluation failures in error telemetry (#20256)** (58626c1)
- **fix(ci_visibility): preserve pytest-xdist session correlation (#20302)** (73b4454)
- **fix(profiling): respect frame limits during native stack collection (#19073)** (9379ddd)
- **perf(internal): short-circuit undecorated() on a self-match (#20055)** (33e9b69)
- **fix(ci_visibility): do not enter the coverage context when coverage is off (#20293)** (005bad5)
- **fix(telemetry): drop inherited worker after fork (#20066)** (49be0e1)
- **fix(tracing): set the tracer runtime id on the native TraceExporter (#20181)** (ce8abbb)
- **fix(config): treat empty OpenTelemetry variables as unset (#20236)** (a186847)
- **fix(asm): inspect the URL argument webbrowser.open actually takes (#20140)** (289c120)
- **fix(ci_visibility): filter ddtrace logs at closed stream handlers during pytest teardown (#20101)** (52d8ef1)
- **fix(llmobs): retry event uploads on server errors (#19970)** (9ab948c)
- **fix(rq): support worker hierarchy in rq 2.7+ (#20104)** (ae463e0)
- **fix(crastracking): strip bootstrap dir for ct receiver (#20084)** (56dcf88)
- **fix(mcp): skip patching when `mcp` is not the MCP SDK (#20134)** (a5ae19c)
- **fix(agentless): fix agentless crashtracking intake endpoints (#20115)** (fa99fc3)
- **fix(ci_visibility): guard coverage rearm (#20112)** (93fed02)

### Tests
- **test(openfeature): wait for agentless config (#20322)** (7f41944)
- **test: eliminate extra services fork race (#20289)** (66e855f)
- **test(tracing): control jitter rate limiter test clock (#20242)** (7e95113)
- **test(profiling): tolerate prior live samples (#20276)** (6c34a16)
- **test: deflake priority sampling tests (#20280)** (8384e5a)
- **test(langgraph): stabilize send span matching (#20284)** (285f746)
- **test(ray): wait for partial flushes (#20250)** (d91fba7)
- **test(langchain): avoid span ordering flake (#20234)** (b990ce3)
- **test(appsec): shard appsec_integrations_stripe to stop nightly job timeouts (#20243)** (047f10b)
- **test(pymongo): isolate async patch phases (#20244)** (18bc8a6)
- **test(tracing): isolate platform mock from writer config override (#20205)** (da1eb2d)
- **test(llmobs): fix periodic eval metric test (#20216)** (edadb30)
- **test(appsec): scope the RASP downstream URL to the test's core context (#20187)** (bcad4c8)
- **test: fix agent probe flake in deadlock test (#20173)** (9cc4b1f)
- **test(profiling): lock MEM-domain GA default and opt-out (#20077)** (d11b4af)
- **test: harden `azure_functions` test fixtures (#20113)** (905bdf7)
- **test(profiling): unflake `memalloc` test (#20096)** (586f8c6)
- **test(ci_visibility): follow-up from previous pr (#20117)** (3207e76)
- **test(sampling): unflake unsupported char tests (#20097)** (e550ee5)
- **test(aiokafka): unflake `test_data_streams_pathway_stats` (#20103)** (934c640)
- **test(tracer): unflake gc monitor tests (#20116)** (c0ca6ae)
- **test: tolerate operator otel warning on `stderr` (#20110)** (3697ec7)

### Chore
- **chore(appsec): upgrade libddwaf to 2.1.0 (#20331)** (9e682d4)
- **chore: add script that generates and formats release notes (#20031)** (e01b29f)
- **chore(integrations): backfill database and search manifests (#20145)** (25e6f05)
- **refactor: move coverage_lines to eliminate some layering violations (#19756)** (3e1b2be)
- **chore(codeowners): guild + idm ownership of contrib (#20330)** (dc86cbf)
- **refactor(profiling): simplify native configuration API (#20309)** (76445fc)
- **chore(profiling): remove unused heap reset (#20312)** (c986c62)
- **chore(subprocess): remove Pin (#20191)** (b48057f)
- **refactor(internal): modernise type hints (#20321)** (2782b3d)
- **chore(fastapi): remove Pin (#20171)** (e4405e6)
- **refactor(appsec): migrate the urllib3 RASP hooks to WrappingContext (#20228)** (53c187b)
- **refactor(datastreams): modernise botocore types (#20277)** (f006b59)
- **chore(azure-servicebus): remove Pin (#20200)** (c95f529)
- **chore(jinja2): remove Pin (#20195)** (ea97660)
- **refactor(internal): modernise config type hints (#20283)** (a333475)
- **refactor(propagation): modernise DBM type hints (#20263)** (989161b)
- **refactor(internal): inline `AttrDict` type hints (#20275)** (d24e9a3)
- **chore: update systests (#20296)** (aac8201)
- **refactor(internal): modernise wrapper type hints (#20278)** (2b5a25a)
- **ci(profiling): mint GitLab GH_TOKEN in the same script as gh (#20301)** (48060c5)
- **chore(pymemcache): test Python 3.15 compatibility (#20266)** (8466c29)
- **chore(falcon): migrate falcon to events API (#20261)** (0b1f86d)
- **chore(algoliasearch): remove Pin (#20165)** (f7a8483)
- **chore(kafka): remove Pin (#20218)** (a73b146)
- **chore(aiomysql): remove Pin (#20188)** (2f33c73)
- **chore(starlette): remove Pin (#20179)** (58ade39)
- **refactor(native): eagerly import modules (#20286)** (49d3598)
- **chore(tracing): move span relationships to SpanData (#20049)** (6532200)
- **refactor(sqlite3): modernise type hints (#20264)** (b4d8960)
- **ci: retry transient codeql build failures (#20297)** (a8d37fe)
- **ci(tornado): shard test environments (#20292)** (739849b)
- **ci(windows): isolate `cargo build` artifacts (#20248)** (83f633b)
- **chore(grpc): modernise async server type hints (#20258)** (8b24c4c)
- **ci(pymongo): prevent disabled tracer test flakiness (#20285)** (4ed4d39)
- **chore(graphql): remove Pin (#20192)** (4802425)
- **chore(aiobotocore): remove Pin (#20163)** (b896097)
- **chore(consul): remove Pin (#20169)** (cae6050)
- **refactor(propagation): modernise wsgi type hints (#20255)** (21b43e5)
- **chore(avro): remove Pin (#20167)** (e32ff76)
- **chore(aiohttp-jinja2): remove Pin (#20164)** (ede953c)
- **chore(asyncio): remove Pin (#20166)** (87fe36a)
- **chore(protobuf): remove Pin (#20194)** (b04d642)
- **chore(mako): remove Pin (#20172)** (51d57ff)
- **chore(requests): remove Pin (#20178)** (2ea4199)
- **chore(pynamodb): remove Pin (#20175)** (9523bf9)
- **refactor(asyncpg): inline fixture type hints (#20254)** (8df3fb0)
- **ci: retry `system-tests` setup (#20259)** (e10210f)
- **ci: unfreeze IDM (#20262)** (0539693)
- **ci: only combine coverage when multiple data files exist (#20247)** (f64669c)
- **build(appsec): support building without a bundled libddwaf (#20160)** (5e4f353)
- **ci(opentelemetry): shard test environments (#20233)** (98957ea)
- **chore(tests): restore set_raise on config to avoid it leaking into other tests (#20047)** (d24697f)
- **ci(profiling): block profiling PRs on failing prof-correctness checks for py-315 migration (#19207)** (b8e3928)
- **chore: convert existing AIDEV anchors to plain comments (#20143)** (9f39d0d)
- **refactor(tests): simplify suitespec test tooling (#20159)** (1ce4a64)
- **chore: update dogpile-cache latest version to 1.5.0 (#19227)** (f42b854)
- **ci(tests): run suites when their definition changes (#20037)** (1a6351b)
- **ci(tests): manage test locks from suitespec (#20158)** (7cd19f9)
- **chore(ci): skip 3.15 dependency-wheel download until python image is mirrored (#20157)** (4629e44)
- **ci(hooks): run pre-commit hooks inside git worktrees (#19945)** (1e6f0fe)
- **chore(iast): include Python headers before standard headers (#20186)** (786d01b)
- **ci(benchmarks): add pytest plugin overhead microbenchmark (#20227)** (fbb2974)
- **chore: reducing overhead of version.py (#20065)** (53d8f20)
- **ci: skip automatic retries on main for flaky-infra test jobs (#20215)** (ed9adec)
- **ci: stop lock races in registry venv setup (#20174)** (8e80a8b)
- **chore: update sqlalchemy latest version to 2.0.52 (#20156)** (8476425)
- **chore: update mlflow latest version to 3.16.0 (#20214)** (3519c6d)
- **chore(profiling): include Python headers directly before other headers (#20185)** (4b843db)
- **chore(profiling): remove unused pytest-cpp build and test plumbing (#20136)** (03d23af)
- **ci(benchmarks): enforce code ownership within microbenchmark SLOs (#20080)** (358b327)
- **ci: remove @DataDog/apm-python from frozen teams (#20184)** (a86550e)
- **chore(profiling-315): add CPython 3.15 native profiling build path (#19269)** (5ed7f05)
- **chore(codeowners): all test file has at least one real owner. (#20182)** (6be754e)
- **chore(tests): prevent GC monitor leaks in tests (#20168)** (63fc7f5)
- **chore(integrations): backfill HTTP client and cloud manifests (#20044)** (21fded5)
- **ci: retry riot wait step on transient pip network failures (#20132)** (bbd06cf)
- **ci: add per-team code freeze enforcement (#20138)** (2479022)
- **chore(appsec): break IAST context import cycle (#20120)** (b07eb0f)
- **chore(tests): run all remaning test suites with uv (profiling, debugger, core) (#20034)** (626cf8f)
- **ci: define uv snapshot ddtest templates (#20139)** (9361271)
- **ci: trigger Changelog check on PR title/body edits (#20090)** (c86e2c5)
- **chore(ci): enable Python 3.15 support for dramatiq (#19909)** (9076a2f)
- **chore(tests): run AI Guard and LLMObs with uv (#20098)** (a672a68)
- **ci: update system-tests (#20137)** (7604bd3)
- **chore(llmobs): remove evaluator import cycle (#20122)** (3f36032)
- **refactor(native): extract SPAN_LINK_FLAGS_PRESENT constant (#19929)** (b142d78)
- **ci(appsec): remove dead urllib/webbrowser suitespec suites (#20078)** (2443a9c)
- **chore: update urllib3 latest version to 2.7.0 (#19912)** (d5d94e9)
- **ci(contrib): increase parallelism (#20123)** (840aa2c)
- **ci(profiling): fix fuzz linker error (#20107)** (ea7b2aa)
- **chore: update avro latest version to 1.12.2 (#20035)** (6bc8ea2)
- **chore: update mako latest version to 1.4.1 (#19948)** (ba48e4b)
- **ci: correct merge order for nightly env (#20118)** (0168935)
- **refactor(asm): remove RASP wrapper frames from customer tracebacks (#19989)** (65a7c1d)
- **ci: support for dogfooding build in nightly pipeline (#20126)** (31dfbe3)
- **ci: copy missing pytorch test helper (#20127)** (0d24c09)
- **chore(integrations): backfill http server manifests (#20042)** (097d5be)
- **ci: bump pip retries and timeout for ci installs (#20106)** (ca07a09)
- **ci: detect and remove duplicate/dead suites (#20074)** (f7e3901)
- **chore(tests): run security suites with uv (#20063)** (f87bd63)
- **chore(tests): run CI Visibility with uv (#20036)** (44e16c7)
- **chore(tests): declare contrib environments in suitespec (#20012)** (30c454c)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/DataDog/dd-trace-py?utm_source=github-action)._