Changed
- Linux artifacts now support glibc 2.28 and newer: wheels, the
@xbbg/core-linux-x64native addon, and thexbbg-mcplinux-amd64 binary build inside the manylinux_2_28 (AlmaLinux 8) container instead of on bareubuntu-latest, so they run on RHEL/Alma/Rocky 8, Debian 10+, Ubuntu 20.04+, and Amazon Linux 2023. Linux wheels are taggedmanylinux_2_28_x86_64(enforced viaauditwheel repair --plat), and the newscripts/check-glibc-max.shguard fails CI and release builds if any Linux binary references newer GLIBC symbol versions. lookback_daysonactive_cdxis now a minimum, not the whole window: the activity window always reaches back to the resolved series' first accrual date, so "this series has traded" can only flip false to true as the date advances.
Removed
- BREAKING --
**kwargsonxbbg.ext.acdx_ticker/aactive_cdx: these forwarded Bloomberg request keywords to internal metadata lookups and never affected the returned ticker; passing them is now aTypeError.
Fixed
- CDX series resolution is now as-of the requested date, and monotone:
cdx_ticker/active_cdx,Engine.cdxTicker()/Engine.activeCdx(), and the underlyingxbbg-recipesentry points resolve the series whose BloombergCDS_FIRST_ACCRUAL_START_DATEis the latest one on or before the reference date, walking the accrual ladder in batched reference-data requests. Previously they readROLLING_SERIESoff the generic ticker -- a point-in-time field that reports today's series whatever date was asked for -- and stepped back at most one series, so every historical date collapsed onto the current series or its predecessor (cdx_ticker('CDX IG CDSI GEN 5Y Corp', '2020-06-01')returned S45; it now returns S34).active_cdxadditionally chose between the two candidates by whichever had the laterPX_LASTprint, which flipped the answer back to the older series on any day the newer one had not yet printed. Series, and version within a series, are now non-decreasing as the date advances. - CDX roll dates are read, not assumed: the semi-annual cadence only sizes the candidate window; the series is decided by comparing against the accrual dates Bloomberg returns. Business-day-adjusted rolls therefore resolve exactly -- CDX.NA.IG.45 first accrues 2025-09-22, so 2025-09-21 resolves to S44.
- CDX version is resolved per series: the
Vntoken is the version Bloomberg reports for the resolved series (CDX.NA.HY.32 resolves to V14, HY.40 to V4), instead of the current series' version stamped onto every answer. Version is scoped to a series and resets at each roll, so it is non-decreasing within a series but not across one. - BREAKING -- failed CDX resolution raises:
xbbg.ext.cdx_ticker/active_cdxno longer swallow Bloomberg errors, missing metadata, or unparseable series numbers into an empty-string ticker. They now delegate to the samexbbg-recipesresolver as@xbbg/core, so the Python and JavaScript surfaces cannot drift apart, and raiseValueError(non-generic ticker, date before the index's first series) orRuntimeError(missing or inconsistent Bloomberg metadata) instead. Callers that tested for""must catch instead. - Clean session shutdown no longer logs
SessionConnectionDown/SessionTerminatedas WARN/ERROR (#346): tearing an engine down -- including the implicit teardown at interpreter exit after a one-shot call such asblp.bdh()-- makes the Bloomberg SDK emit both events for every pooled session. The request path already recognized a requested shutdown and logged at INFO, but the subscription path did not, so any script that simply ran a request printed a spuriousSessionTerminated -- SDK gave up reconnecting; closing subscriptionsat ERROR on exit, withactive_subs=0and an empty reason. Subscription workers now publish the shutdown flag before asking the SDK to stop and classify each lifecycle event (shutdown_in_progressat INFO versusconnection_down_without_shutdown/termination_without_shutdownat the original WARN/ERROR), so genuine mid-session failures keep their severity. import xbbgno longer leaksSyntaxWarnings from Bloomberg'sblpapiwheel (#346): importing xbbg runs SDK discovery, which imports theblpapiPython package because the pip wheel ships the shared library and is probed ahead of a Terminal DAPI install. Bloomberg'sresolutionlist.pyandtopiclist.pycontain invalid escape sequences in their docstrings, so Python 3.12+ printedSyntaxWarning: invalid escape sequence '\s'on first import for anyone with the wheel installed -- from an import the caller never asked for. Discovery now performs that import withSyntaxWarningfiltered, leaving the user's own warning filters untouched.
Full Changelog: v1.4.5...v1.4.6