Skip to content

v0.38.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 15:14
ef21aa8

0.38.0 (2026-10-29)

Features

  • dashboard: a revenue metric reads as revenue per user, with its difference and interval (#1406) (4421a06)
  • results: a revenue metric is analysed as its mean per assigned user (#1400) (7024eeb)
  • sdk: the JavaScript and Python SDKs report errors to safety monitoring (#1364) (6f827f9)
  • sdk: version 0.2.0 of the JavaScript and Python SDKs (#1421) (fc5c6b2)

Bug Fixes

  • ci: the docs journeys raise one alarm issue when the report cannot decide (#1395) (fd78a90)
  • ci: the docs-journeys report retries every read and names what fails (#1382) (5b42f12)
  • dashboard: better and worse follow lower_is_better; the form sets it (#1393) (d535bef)
  • demo: assign each experiment where it is used; keep off-list clicks off the sort bandit (#1403) (dd15c90)
  • demo: simulators keep the StreamPulse lift, date nothing ahead, and match the app (#1398) (a23b0fc)
  • demo: the rollout story waits for the safety monitor's rollback (#1404) (cd9eddf)
  • installer: uninstall counts the cache's automatic backup with what AWS is still clearing (#1399) (83c2095)
  • sdk: an event tracked without a key is still sent after the SDK's cache expires (#1358) (940fdf1)
  • stats: a mean arm whose values are all equal gets a result, not result_invalid (#1387) (00c498a)
  • stats: the winner and recommendation follow a metric's lower_is_better (#1383) (a6cced6)
  • tracking: a paused or completed experiment answers control with a reason, not 404 (#1362) (0caf581)
  • tracking: events for a paused or completed experiment count in no arm (#1359) (a50c469)

Dependencies

Documentation

  • api: name CUPED's variance divisor and state the history rule exactly (#1420) (9bfcc47)
  • api: the Bayesian example's numbers follow its posteriors (#1409) (341e7cf)
  • demo: StreamPulse targets devices through the web SDK; native SDKs send no attributes yet (#1371) (daa687e)
  • guide: say no guardrail verdict is produced; Breakdowns of a revenue metric (#1414) (4596352)
  • guides: guided examples, every step walked nightly by a journey (#1417) (05f5794)
  • guides: guided examples: Buy now arms, the reload rule, CUPED (#1430) (56a3f5d)
  • sdk: no SDK page says a paused or completed experiment answers 404 (#1370) (34ae5d1)
  • sdk: the provider and edge pages say where a track without a key goes (#1431) (1f8b41c)

Images

docker pull ghcr.io/controlvar/controlvar:core-0.38.0      # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.38.0      # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.38.0  # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.38.0  # dashboard, full profile

API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.

Verifying

Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:

cosign verify ghcr.io/controlvar/controlvar:core-0.38.0 \
  --certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.38.0 \
  --certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com

The same SBOMs are attached below.