Repository navigation
v0.36.2
Upgrade notes
Security: certifi updated to 2026.10.19 (GHSA-6q48-6c7w-9gw2)
certifi is the Python package that supplies the root certificates the API trusts on many of its outbound HTTPS connections; the others use the operating system's certificate store in the image. The upstream advisory GHSA-6q48-6c7w-9gw2, rated critical, is about one of those roots, emSign ECC Root CA - G3: intermediate certificates that chain to it have compromised private keys and have been revoked. certifi 2026.10.19 no longer contains that root.
- Which images. The API images (
coreandfull) of every release through 0.36.1 ship certifi 2026.7.22. 0.36.2 ships certifi 2026.10.19. The dashboard images and the SDKs do not include certifi. - What used certifi's list. The API checks a server's certificate against certifi's list when it makes these outbound HTTPS connections: calls to AWS services through the AWS SDK, which include sign-in through Amazon Cognito when you enable it; webhook notifications; the LLM proxy's calls to Google Gemini; and, in the
fullimage, integrations with GitHub, Jira and Salesforce and data-warehouse connections. - What used the operating system's list. These outbound connections check the certificate against the operating-system certificate store in the API image instead: calls to Anthropic and OpenAI models (by the LLM proxy, AI experiment design, results interpretation and LLM-as-judge scoring); Slack notifications; email sent through SendGrid; Redis over TLS; and, in the
fullimage, sign-in through OpenID Connect (with GitHub as the provider, its e-mail check uses certifi's list). Through 0.36.1 that store (Debianca-certificates20250419) containedemSign ECC Root CA - G3, and alsoAAA Certificate Services, a root that cross-signed the same compromised intermediates. In 0.36.2 (Debianca-certificates20250419+deb13u1) it contains neither. - Who should upgrade. If your deployment uses any connection in either list, upgrade to 0.36.2. If it signs users in through Amazon Cognito or OpenID Connect, do it first.
- What changes. After the upgrade, a connection to a server whose certificate chains to
emSign ECC Root CA - G3fails verification, whichever list it uses. On the operating system's list, one whose certificate chains only toAAA Certificate Servicesfails as well; certifi's list did not contain that root before either. The other emSign roots are unchanged in both lists. - The fix is to upgrade: pull
core-0.36.2orfull-0.36.2, or rebuild your own image from this release. Nothing in Controlvar's logs would show an interception of this kind.
CDK: dev and demo stacks
CDK: dev and demo now run the API with staging settings. Until this release, a stack deployed with ENVIRONMENT=dev (the default) or ENVIRONMENT=demo gave the API and migration tasks APP_ENV=dev or APP_ENV=demo, which the application runs with development settings: /metrics answered without a token and weak secrets were accepted. They now get APP_ENV=staging, as staging does; staging and prod are unchanged. With staging settings the API also stops allowing pages served from localhost to call it, and a dev or demo stack whose secrets do not meet the staging rules refuses to start on a revision that carries the new value.
cdk deploy of this release does not change an API that is already running: its service moves to a new revision only through a CodeDeploy deployment. To check a stack, read APP_ENV in the revision in service, not in the family's newest revision (which cdk deploy rewrites, so it reads staging at once): TD=$(aws ecs describe-services --cluster experimentation-$ENV --services experimentation-backend-$ENV --query "services[0].taskSets[?status=='PRIMARY'].taskDefinition" --output text), then aws ecs describe-task-definition --task-definition "$TD" --query "taskDefinition.containerDefinitions[?name=='backend'] | [0].environment[?name=='APP_ENV'] | [0].value" --output text. dev or demo means the API in service still runs with development settings.
To fix such a stack, rebuild it from this release ("Destroying an environment" in the CDK guide), or keep it: run cdk deploy, then, from a checkout of this release, IMAGE=$(aws ecs describe-task-definition --task-definition "$TD" --query "taskDefinition.containerDefinitions[?name=='backend'] | [0].image" --output text) and NEW_ARN=$(scripts/register_task_definition.sh experimentation-backend-$ENV "$IMAGE") (it copies the newest revision, changes only the image, and takes a digest only), and deploy $NEW_ARN with Steps 1 and 4 to 6 of "Restart the API on the revision it is serving" in the Rollback Runbook. Do not deploy the newest revision as cdk deploy registers it: its image is the bootstrap placeholder. Replace any secret the start-up refuses; the task's log lists each one.
0.36.2 (2026-10-21)
Bug Fixes
Dependencies
- bump certifi to 2026.10.19 (GHSA-6q48-6c7w-9gw2) (#1309) (c47aeb2)
Documentation
- compose: open the dashboard at localhost and point SDKs at it (#1300) (b46908c)
- self-hosting: the by-hand AWS guide, corrected from an end-to-end run (#1310) (a8e420e)
Images
docker pull ghcr.io/controlvar/controlvar:core-0.36.2 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.36.2 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.36.2 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.36.2 # 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.36.2 \
--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.36.2 \
--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.