Release Notes
Versioned releases of platform artifacts and their changes.
Operator settings applied to the chaincode container are catalogued in Chaincode Environment Variables.
2026-10-22: mars v0.142.0
- supergateway and mcp-inspector charts: Security: the charts run the hardened
luthersystems/supergateway-uvx-git:3.4.3-2in place of the third-partysupercorp/supergateway:uvx(CVE-2026-111943). See Security Notice: eMudhra (emSign) CA Distrust. - supergateway and mcp-inspector charts: Upgrade note: the default image changes repository, and the tag moves from the floating
uvxto the pinned 3.4.3-2. If you overrideimage.tagin these charts, also setimage.repository, or remove both overrides. A tag of the old image does not exist in the new repository
Details: mars v0.142.0 release.
2026-10-22: buildenv v0.1.47
- build-js: azure-cli's own Python now uses certifi 2026.10.19, so scanners no longer report GHSA-6q48-6c7w-9gw2 for its old certifi 2024.7.4. Trust does not change: since v0.1.45 the image removes the emSign roots and AAA Certificate Services from that bundle. See Security Notice: eMudhra (emSign) CA Distrust.
- General: All images are rebuilt on the latest base images and OS packages
Details: buildenv v0.1.47 release.
2026-10-22: connectorhub v0.0.28
- connectorhub: Security: every connector now runs on the hardened supergateway 3.4.3-2 images (CVE-2026-111943). No connector uses
supercorp/supergatewayany more. See Security Notice: eMudhra (emSign) CA Distrust. - connectorhub: Upgrade note: remove the supergateway 3.4.3-2 pins that the security notice gave for v0.0.27, or keep them at 3.4.3-2 or later
Details: connectorhub v0.0.28 release.
2026-10-22: mars v0.141.0
- fabric charts: Security: the chart defaults use the hardened images (CVE-2026-111943). The AWS CLI init containers of every Fabric and shiroclient chart run
luthersystems/awscli:v0.1.46, the peer's Docker sidecar runsluthersystems/dind:v0.1.46, the fabric-cli chart runsluthersystems/fabric-tools:v0.1.46and the snapshot archiver defaults to v0.0.8. See Security Notice: eMudhra (emSign) CA Distrust. - fabric charts: Upgrade note: remove the manual image overrides that the security notice gave for v0.140.0, or keep them at v0.1.46 or later
Details: mars v0.141.0 release.
2026-10-22: mars v0.140.0
-
mars: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. The Go binaries are built with Go 1.26.10 (GO-2026-6809)
-
prometheus: The pushprox chart runs the hardened
luthersystems/pushprox:v0.1.0as a non-root user. Upgrade note: pushprox is deprecated and off by default (k8s_prometheus_pushproxy: false) -
fabric charts: Upgrade note: the chart defaults do not use the hardened images yet. The peer, orderer, CA, CLI and shiroclient charts run the AWS CLI in init containers that copy MSP, TLS, chaincode and config files from S3. Set these values in your inventory:
luther_buildenv_images_version: v0.1.45 # luthersystems/awscli k8s_fabric_peer_dind_version: v0.1.45 # Docker 28.5.2, the same as v0.1.43 k8s_fabric_peer_snapshot_archiver_version: v0.0.8
Details: mars v0.140.0 release.
2026-10-22: buildenv v0.1.46
- General: Fix for images that other repositories build on a Debian or Ubuntu JDK: the hardening step now also blocks the 25 certificates in that JDK's
blocked.certs, which is a link on those systems. The buildenv images themselves do not change. See Security Notice: eMudhra (emSign) CA Distrust.
2026-10-22: fabric-network-builder v0.0.10
- fabric-network-builder: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. This includes pip's certifi bundle
Details: fabric-network-builder v0.0.10 release.
2026-10-22: fabric-snapshot-archiver v0.0.8
- fabric-snapshot-archiver: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. The archiver uses this trust store for its S3 uploads. Built with Go 1.26.10 (GO-2026-6809)
2026-10-22: supergateway images 3.4.3-2
Part of Connector Hub. The images are luthersystems/supergateway-debian, luthersystems/supergateway-npx-git and luthersystems/supergateway-uvx-git.
- supergateway: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. Node.js, npm, npx, uv, httpx and requests read the hardened system bundle
- supergateway: Upgrade note: Connector Hub v0.0.28 and later use 3.4.3-2 by default. The Connector Hub v0.0.27 connector defaults still name 3.4.3-1: upgrade to v0.0.28, or pin the 3.4.3-2 images by digest in your connector configs
2026-10-22: substrate v2.248.0
- substrate: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The
luthersystems/substrate,luthersystems/shiroclientandluthersystems/shirotesterimages block 25 certificates in their trust stores, and are built with Go 1.26.10, which refuses the compromised eMudhra intermediates (GO-2026-6809). See Security Notice: eMudhra (emSign) CA Distrust. - substrate: Upgrade note: this release changes transaction results for some phyla. Upgrade every peer of a channel together. Run
shirotester lintandshirotester preheat-checkon each phylum before you upgrade - substrate: Upgrade note: batch and connector keys move under
luther:. Drain pending batch requests and connector callbacks before you upgrade, and upgrade Connector Hub to v0.0.26 or later at the same time - substrate: Upgrade note: keys under
luther:are reserved for substrate. A phylum read or write of such a key is logged now, and a later release refuses it. Move phylum data underluther:to a prefix of your own.shirotester lintreports literal reserved keys - substrate: Upgrade note: a paginated range counts rows the transaction deleted toward the page size. Continue while the bookmark is not empty; a short page does not mean that the range ended.
SUBSTRATE_LEGACY_RANGE_PAGES=truerestores the old pages - substrate: Upgrade note: behaviour changes in
decimal-powwith a fractional or negative exponent, MXF encode with overlapping private paths (now refused), field-mask entries that start with.(now nested paths) andhandler-bindwith several matching bindings (the most specific runs).shirotester lintreports affectedhandler-bindforms - substrate: Upgrade note: some
utils:andvalidations:exports and router internals are removed.shirotester lintreports each reference and names the replacement - substrate: Security: the router refuses privileged methods (
update,enable,disable,init,run_ctx_migrationsand others) when another chaincode passes the call on. SetCHAINCODE_NAMEto the chaincode definition name on every peer. A phylum checks its own endpoints with(cc:own-request?) - substrate: New
SUBSTRATE_AUTH_CLAIMS_JWKS_SOURCE=ledgerreads the auth token keys from the ledger, so a key rotation is one transaction ($auth_set_jwks, for a creator of the admin MSP) - substrate: Performance: more core functions run in Go (statedb ranges, sidedb, storage indexes, validators and log functions). Results do not change and ELPS step counts go down. Log lines are written in batches with less CPU
- shiroclient: The gateway keeps numbers exact in params, results and error data, also above 2^53, and passes results as the phylum wrote them
- shiroclient: A malformed
Authorizationheader answers 400, and/health_check?service=fabric_peeranswers 503 when the peer check fails - shirotester: New
unit-tests --creator <MSP>gives each test a creator MSP - substrate: Bump ELPS to v1.85.0
2026-10-22: connectorhub v0.0.27
- connectorhub: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. Built with Go 1.26.10 (GO-2026-6809)
2026-10-22: pushprox v0.1.0
- pushprox: Upgrade note: pushprox is deprecated. It belongs to the older buildpack chaincode setup. v0.1.0 is a hardened rebuild for deployments that still run it
- pushprox: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. Built with Go 1.26.10 (GO-2026-6809). The image runs as
nobody
Details: pushprox v0.1.0 release.
2026-10-22: hyphae v1.2.0
One hyphae tag publishes the luthersystems/pdfserv and luthersystems/martin images.
- pdfserv: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. Chrome uses an NSS database that distrusts the 25 certificates. Startup fails when Chrome does not use the database
- martin: Security: the image blocks the same 25 certificates. Upgrade note: martin runs as
nobody(uid 65534) in/opt. Make each report mount writable by uid 65534 - pdfserv, martin: Security: built with Go 1.26.10 (GO-2026-6809, and GO-2026-6599 and GO-2026-6600 in
html/template). Updategolang.org/x/netto v0.60.0
Details: hyphae v1.2.0 release.
2026-10-22: insideout-mcp v0.50.4
- insideout-mcp: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust.
- insideout-mcp: Upgrade note: the image runs as
nobody(uid 65534). Check volume permissions and anyrunAsUsersetting in your deployment - insideout-mcp: No MCP tool or A2A changes
2026-10-22: mars v0.139.1
- mars: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. This includes the Python packages (certifi, botocore), the AWS CLI and the Google Cloud CLI
Details: mars v0.139.1 release.
2026-10-22: Luther Auth v4.8.3
- General: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The
luthersystems/authimage blocks 25 certificates in its trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. It is built with Go 1.26.10, which refuses the compromised eMudhra intermediates (GO-2026-6809). See Security Notice: eMudhra (emSign) CA Distrust.
2026-10-22: sandbox v0.0.2
The release publishes luthersystems/oracle:v0.0.2, the example application image of Luther Enterprise.
- oracle: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image blocks 25 certificates in every trust store: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services. See Security Notice: eMudhra (emSign) CA Distrust. Built with Go 1.26.10 (GO-2026-6809)
- oracle: Security: update gRPC to v1.83.2 and
golang.org/x/netto v0.60.0 - sandbox: Upgrade note: the local network still uses substrate v2.240.0, fabric-network-builder v0.0.9 and martin v1.0.0, which predate the emSign fix. For the fix, set substrate v2.248.0, fabric-network-builder v0.0.10 and martin (hyphae) v1.2.0
- phylum: Fix: the sample phylum loads on ELPS v1.62 and later
Details: sandbox v0.0.2 release.
2026-10-22: buildenv v0.1.45
- General: Security: full fix for the eMudhra (emSign) CA issue (CVE-2026-111943). Every image blocks 25 certificates: 6 emSign roots, 18 eMudhra intermediates and Comodo AAA Certificate Services, which cross-signed them. See Security Notice: eMudhra (emSign) CA Distrust.
- General: The images remove or block these certificates in the OS bundle, Java, Python certifi, Node.js and Chrome/NSS. The build fails if a listed certificate still verifies, on amd64 and arm64
- build-js, build-e2e: Node.js uses the hardened system bundle (
NODE_OPTIONS=--use-openssl-caandSSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt)
2026-10-22: libmxf v0.1.1
- libmxf: Upgrade note: use v0.1.1, not v0.1.0. With v0.1.0,
go getdelivers a broken decoder file, sodecode-gocannot decode - libmxf: Binaries that link
decode-goare about 6 MB smaller - libmxf: Security: the module's toolchain is Go 1.26.10, which refuses the compromised eMudhra intermediates (CVE-2026-111943, GO-2026-6809). A library does not set the Go that builds your program, so build with Go 1.26.10 or later. See Security Notice: eMudhra (emSign) CA Distrust.
Details: libmxf v0.1.1 release.
2026-10-22: connectorhub v0.0.26
- connectorhub: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.0.27. Built with Go 1.26.10 (GO-2026-6809). The Python connectors use certifi 2026.10.19
- connectorhub: Upgrade note: use substrate v2.248.0 or later. The hub reads connector events and callback states under the
luther:prefix - connectorhub: Upgrade note: the config, test and call endpoints require a Luther Auth JWT. Set
CH_AUTH_ISSUERandCH_AUTH_JWKS_URL.GetConfigandCallConnectorneedCH_AUTH_ADMIN_GROUPS.TestConnectionneedsCH_AUTH_AUDIENCEorCH_AUTH_REQUIRED_GROUPS. Without them, these calls return 401 - connectorhub: Upgrade note: an MCP tool is denied unless the connector allows it (
allowed_tools). Each MCP image must come from an allowed registry (CH_IMAGE_REGISTRIES) and be pinned by digest - connectorhub: The hub runs with leader election and moves its block stream to another peer when the primary is down. A malformed request fails alone, not the whole block, and the hub never resends a tool call that is not idempotent
- connectors: New generic remote MCP connector for your own server. DocuSign, ServiceNow and Zoho Books use the vendors' hosted MCP servers. Connector containers run read-only, with no capabilities, deny-by-default egress and no access to cloud metadata
2026-10-22: Luther Auth v4.8.2
- General: Upgrade note: with an OAuth backend enabled, Luther Auth fails to start when
AUTH_OAUTH_VALID_FRONTEND_REDIRECT_URLSis empty. Before, an empty list turned the redirect check off. Set the list before you upgrade - General: Upgrade note: the OAuth code flow to the IdP uses PKCE (S256). During the rolling deploy that turns PKCE on, a login that starts on a new pod and finishes on an old pod fails, and the user must log in again. Set
AUTH_OAUTH_DISABLE_PKCE=trueonly for an IdP that refuses the PKCE parameters. Auth0, Cognito and Azure AD B2C accept them - General: Security: PKCE stops code injection. An attacker who holds a victim's authorization code cannot redeem it through the callback
- General: Security: the callback checks the frontend redirect URL against
AUTH_OAUTH_VALID_FRONTEND_REDIRECT_URLSagain before it redirects, so a forged cookie cannot redirect a session token off the allowlist - General: On SIGINT or SIGTERM the server stops accepting connections and lets requests in progress complete. New setting
AUTH_SHUTDOWN_TIMEOUT(default 20s) bounds the wait. It fits the Kubernetes defaultterminationGracePeriodSecondsof 30s - General: Security: build with Go 1.26.10, whose crypto/x509 refuses the compromised eMudhra intermediate CAs (GO-2026-6809). The image is built on buildenv v0.1.41, which only removes the emSign root CAs from the trust store (CVE-2026-111943). Upgrade to v4.8.3 for the full fix. See Security Notice: eMudhra (emSign) CA Distrust.
- General: Upgrade Go dependencies, including svc v0.19.0, gRPC v1.83.2 and the AWS SDK for Go v2
2026-10-22: blockinspector v0.1.0
- blockinspector: First tagged release. Commands:
range-peer,range-orderer,snapshotandpvtdata-keys. TheledgerGo package reads private data keys from a peer's ledger - blockinspector: Security:
go installbuilds with Go 1.26.10, which refuses the compromised eMudhra intermediates (CVE-2026-111943, GO-2026-6809). Update gRPC to v1.83.2 andgolang.org/x/netto v0.60.0. See Security Notice: eMudhra (emSign) CA Distrust.
Details: blockinspector v0.1.0 release.
2026-10-22: insideout-mcp v0.50.3
- insideout-mcp: Security: built with Go 1.26.10, which refuses the compromised eMudhra intermediates (GO-2026-6809). See Security Notice: eMudhra (emSign) CA Distrust. Use v0.50.4 for the full fix
- insideout-mcp: No MCP tool or A2A changes
2026-10-22: insideout-terraform-presets v0.12.0
- insideout-terraform-presets: Security: the module's toolchain is Go 1.26.10, which refuses the compromised eMudhra intermediates (CVE-2026-111943, GO-2026-6809). A library does not set the Go that builds your program, so build with Go 1.26.10 or later. See Security Notice: eMudhra (emSign) CA Distrust. Also update gRPC to v1.83.2 and
golang.org/x/netto v0.60.0 - composer: Upgrade note: composed stacks pin the AWS provider to
= 6.52.0and the Google providers to= 6.10.0. The default.terraform-versionis 1.9.8 - composer: Upgrade note: the AWS imported-provider credential variables are
bootstrap_roleandaws_external_id.bootstrap_role_arn,external_idand/variables-imported.tfare removed - aws: New components: Bedrock Knowledge Base, Bedrock Agent, GPU, vector stores, SageMaker inference endpoint, Kendra and AgentCore gateway
- gcp: New components: Vertex AI Agent Engine, Vertex AI endpoint, GPU on GKE and Compute Engine, Document AI, Model Armor and VPC Private Services Access
- reverse import: New reverse import SDK and CLI. One run covers many regions, skips AWS-managed resources and reports a partial result when some resources fail
Details: insideout-terraform-presets v0.12.0 release.
2026-10-22: mars v0.139.0
- mars: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.140.0
Details: mars v0.139.0 release.
2026-10-22: supergateway images 3.4.3-1
- supergateway: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use 3.4.3-2
- supergateway: Node.js, npm and npx read the system bundle (
NODE_OPTIONS=--use-openssl-ca). Upgrade note: if your connector setsNODE_OPTIONS, keep--use-openssl-cain it
2026-10-22: libmxf v0.1.0
- libmxf: First tagged release, with the
decode-goanddecode-jsMXF decoders - libmxf: Upgrade note: do not use v0.1.0 with
go get. Use v0.1.1
Details: libmxf v0.1.0 release.
2026-10-21: shiroclient-sdk-go v0.18.0
- shiroclient-sdk-go: Security: the module's toolchain is Go 1.26.10, which refuses the compromised eMudhra intermediates (CVE-2026-111943, GO-2026-6809). A library does not set the Go that builds your program, so build with Go 1.26.10 or later. See Security Notice: eMudhra (emSign) CA Distrust.
- shiroclient-sdk-go: New
update.SetAuthJWKSandupdate.SetAuthAdminMSPcall substrate's$auth_set_jwksand$auth_set_admin_mspmethods - shiroclient-sdk-go: Upgrade note: a new mock client sets the creator MSP to
Org1MSP(mock.DefaultCreator). Usemock.WithCreator("")to keep the creator unset - shiroclient-sdk-go: Security: update
golang.org/x/netto v0.60.0
Details: shiroclient-sdk-go v0.18.0 release.
2026-10-21: svc v0.19.1
- svc: Security: the module's toolchain is Go 1.26.10, which refuses the compromised eMudhra intermediates (CVE-2026-111943, GO-2026-6809). A library does not set the Go that builds your program, so build with Go 1.26.10 or later. See Security Notice: eMudhra (emSign) CA Distrust.
- svc: Security: update
golang.org/x/netto v0.60.0
Details: svc v0.19.1 release.
2026-10-21: lutherauth-sdk-go v0.0.10
- lutherauth-sdk-go: Security: the module's toolchain is Go 1.26.10, which refuses the compromised eMudhra intermediates (CVE-2026-111943, GO-2026-6809). A library does not set the Go that builds your program, so build with Go 1.26.10 or later. See Security Notice: eMudhra (emSign) CA Distrust.
- lutherauth-sdk-go: Fix: the JWKS fetch closes its response body. Fetch errors wrap their cause, so
errors.Isanderrors.Aswork on them
Details: lutherauth-sdk-go v0.0.10 release.
2026-10-21: buildenv v0.1.44
- General: Security: remove the emSign roots from every text CA bundle in the image by content, whatever the file name (for example grpc
roots.pemand gsutilcacerts.txt). This release removes only the roots. Use v0.1.45 or later for the full fix (CVE-2026-111943). See Security Notice: eMudhra (emSign) CA Distrust.
2026-10-21: mars v0.138.0
- mars: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.140.0. The Go binaries are built with Go 1.26.10 (GO-2026-6809)
- fabric charts: The AWS CLI init containers run
luthersystems/awscliin place ofamazon/aws-cli.luther_buildenv_images_versionsets the tag. Upgrade note: each*_aws_cli_versionvariable now holds a buildenv tag. Remove a value that names an AWS CLI version - fabric-peer: The Docker sidecar (Docker chaincode, deprecated) runs
luthersystems/dindwith Docker 28.5.2 in place of Docker 19.03. Upgrade note: Docker 28 upgrades the peer's Docker volume in place. A rollback to Docker 19.03 is not safe - fabric-peer, fabric-orderer: The liveness probe restarts a node only after 3 failed checks (about 30 s). Change a probe with
k8s_fabric_peer_probesork8s_fabric_orderer_probes - fabric-chaincode: External and CCaaS substrate chaincode pods get
CHAINCODE_NAME. With it, substrate refuses privileged requests that another chaincode passes on
Details: mars v0.138.0 release.
2026-10-21: elps v1.85.0
- lisp: New
LEnv.StepEachcharges evaluation steps for a loop and stops at the same point as the equivalentStepcalls - lisp: New embedder helpers:
LEnv.MapSeqCells(the sequence read ofmap),CallStack.SourceSite,elpsutil.FileLoaderfor constant source andelpsutil.DumpErrorStack - elpstest: New helpers measure the step charge of a builtin.
Runnerwrites Lisp error traces withelpsutil.DumpErrorStack
2026-10-21: fabric-snapshot-archiver v0.0.7
- fabric-snapshot-archiver: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.0.8. Built with Go 1.26.10 (GO-2026-6809)
- fabric-snapshot-archiver: S3 archives are stored at
<prefix>/<channel>/<block>, so one bucket prefix serves every channel. A restore also reads the old layout. Upgrade note: upgrade all archivers that share a bucket prefix together
2026-10-21: fabric-network-builder v0.0.9
- fabric-network-builder: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.0.10
- fabric-network-builder: Update cryptography to 50.0.2. With the same flags,
generatewrites the same files and config as before
Details: fabric-network-builder v0.0.9 release.
2026-10-21: buildenv v0.1.43
- dind: Move to Docker 28.5.2. Fabric 2.5 peers build, install and run Go chaincode on it
- dind: Start on a
/var/lib/dockervolume that Docker 19.03 wrote. The entrypoint removes the old build cache metadata that newer Docker refuses - dind: Upgrade the Alpine packages of the base image
- General: Security: this release removes only the emSign roots. Use v0.1.45 or later for the full fix (CVE-2026-111943). See Security Notice: eMudhra (emSign) CA Distrust.
2026-10-21: fabric-snapshot-archiver v0.0.6
- fabric-snapshot-archiver: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.0.8
- fabric-snapshot-archiver: Fix: the binary is
fabric-snapshot-archiveragain - fabric-snapshot-archiver: New
restore --wait-pvtdatawaits for private data reconciliation
2026-10-21: fabric-snapshot-archiver v0.0.5
- fabric-snapshot-archiver: Security: partial fix for the eMudhra (emSign) CA issue (CVE-2026-111943). The image removes the emSign root CAs only. Use v0.0.8
- fabric-snapshot-archiver: Upgrade note: this image ships the binary as
archiver. Use v0.0.6 or later - fabric-snapshot-archiver: New
servecommand starts a gRPC API (port 50051) and an HTTP gateway (port 8080) to start, cancel and report snapshots and restores
2026-10-21: buildenv v0.1.42
- awscli: New image
luthersystems/awscli:amazon/aws-cli2.35.11 with the emSign roots removed - dind: New image
luthersystems/dind:docker:19.03.14-dindwith the emSign roots removed - fabric-tools: New image
luthersystems/fabric-tools:hyperledger/fabric-tools2.5.6 with the emSign roots removed - General: Security: remove the emSign roots from the Red Hat and Amazon Linux trust store (
/etc/pki/ca-trust) too. This release removes only the roots. Use v0.1.45 or later for the full fix (CVE-2026-111943). See Security Notice: eMudhra (emSign) CA Distrust.
2026-10-21: buildenv v0.1.41
- General: Security: remove the four eMudhra emSign root CAs from the system bundle, every Java
cacertskeystore and bundled Pythoncacert.pemfiles (CVE-2026-111943). The build fails if one remains. This release removes only the roots. Use v0.1.45 or later for the full fix. See Security Notice: eMudhra (emSign) CA Distrust. - General: Security: Go 1.26.10. It fixes GO-2026-6809:
crypto/x509refuses the eMudhra intermediates - build-js: Upgrade note: move to Node.js 24.22.1. Node.js 20 is past end of life. Node.js 24.22.1 drops the eMudhra roots from its built-in CA list
- build-godynamic: Security: certifi 2026.10.19 and pip 26.2.2 in the Azure CLI environment (GHSA-6q48-6c7w-9gw2)
- build-api: Security: build buf with klauspost/compress 1.18.7 (CVE-2026-63209)
2026-10-21: elps v1.84.0
- lisp:
Runtimecan hold Lisp values per VM, so an embedder keeps state that each template VM gets its own copy of - elps: Security: build with Go 1.26.10, which fixes GO-2026-6809 in
crypto/x509
2026-10-21: elps v1.83.0
- lisp: Upgrade note: the Go sequence forms
LEnv.Concat,LEnv.MapSeq,LEnv.SliceandLEnv.Ziptake aSeqKindconstant in place of a type specifier symbol, so the compiler checks the type. Passlisp.SeqList,lisp.SeqVector,lisp.SeqString,lisp.SeqBytesorlisp.SeqNilin place oflisp.Symbol(...)orlisp.Nil()
2026-10-20: elps v1.82.0
- lisp: More core builtins have an exported Go form, so Go code can call them directly without a Lisp evaluation
2026-10-20: elps v1.81.2
- lisp: Function name index updates apply at the next lookup, which lowers the cost of binding many functions
- elps: The integrity check in
elpscheckbuilds for frozen packages is cheaper
2026-10-20: elps v1.81.1
- lisp: Functions with one name take their name list from a shared spare block, which cuts allocations when a phylum defines many functions
2026-10-19: buildenv v0.1.40
- build-godynamic: Security: build Docker Compose with containerd 2.2.7 (CVE-2026-95837)
- build-godynamic, nginx-frontend: Security: curl and libcurl 8.23.0 (CVE-2026-92392)
- nginx-frontend: Security: libx11 1.8.14 (CVE-2026-88806)
2026-10-19: buildenv v0.1.39
- General: Rebuild on current base images and packages.
2026-10-19: elps v1.81.0
- lisp: Fix: a builtin that
LEnv.CallBuiltincalls keeps the correct caller frame when the call stack grows - lisp: Function names are found through an index by function ID, which makes name lookup faster
2026-10-19: elps v1.80.0
- lisp: The evaluator does less work for each call form, and template VMs prewarm only the values that most VMs read
- lisp: New Go helpers:
LEnv.CallFunction,LEnv.ApplyFunction,LEnv.MapKeys,Length,IsEmpty,FirstandSecond.elpsutil.Functionseals builtin formals - lisp: Fix: a nil head in a call form goes to
evalbefore its step, andlistcalled from Go with an s-expression returns a data list - elpstest: New
elpstest/oraclepackage compares a Go copy of a builtin with the original
2026-10-17: buildenv v0.1.38
- General: Rebuild on current base images and packages.
2026-10-16: elps v1.79.1
- lisp: Argument type checks in
CellReaderreads are inline, which makes typed builtins faster
2026-10-15: buildenv v0.1.37
- General: Rebuild on current base images and packages.
2026-10-15: elps v1.79.0
- json: New durable sharing query and
LEnv.CheckClosurecheck that a saved value graph and its closures can be restored - json: Fix: a durable array of rank 0 loads as rank 0
- elps: Dependency updates
2026-10-12: buildenv v0.1.36
- General: Rebuild on current base images and packages.
2026-10-10: buildenv v0.1.35
- build-godynamic, build-js: Security: Azure CLI 2.91.0. In build-godynamic it brings cryptography 50.0.2, which fixes CVE-2026-69247, CVE-2026-69248 and CVE-2026-69249
- build-api, build-go, build-go-alpine, build-godynamic, build-java: Security: build the bundled Go tools with golang.org/x/net 0.60.0 (CVE-2026-78663, CVE-2026-78659, CVE-2026-78660, CVE-2026-78669)
2026-10-10: elps v1.78.0
- lisp: Upgrade note:
handler-bindnow runs the most specific matching handler first. Before, it ran the first binding that matched. Run the newhandler-orderlint check to find code that behaves differently - lisp: New
argument-errorcondition, a child oferror. Ahandler-bindonerrorstill catches it - lisp: New
define-conditiondefines your own conditions. Newcondition-is?tests a condition against a type and its ancestors - lisp: New
rethrow :contextanderror-messagewrap an error with context, in the style of Go's%w. To give a wrapped error a different type, raise it explicitly - lint: New
handler-ordercheck warns when ahandler-bindbinding comes after a binding for its own type or an ancestor
Details: elps v1.78.0 release.
2026-10-10: elps v1.77.0
- lisp: Upgrade note: the Go methods
LVal.MapGet,LVal.MapGetLValandLVal.MapGetStringare removed. Uselisp.AsMapand thenlisp.Lookup[T](m, key). A missing key returnsok=falseinstead of an error value - lisp: New Go helpers for builtins in
(value, error)form:FuncE,Func1E,Func2E,Func3E,Text,ArgReaderandCells, withResult,ConditionOf,ResultAsandName - lisp: New map, sequence and array helpers:
MapView,AsMap,Lookup[T],MapOf,SortedMapOf,MapPut,MapLookup,All,Keys,SeqCells,StringList,ArrayParts,SetArrayDataandSetArrayCells - lisp:
LVal.IsErrorandLVal.IsSymbolreturn false for a nil*LVal - elps: Security: build with Go 1.26.9 and
golang.org/x/netv0.60.0, which fix GO-2026-6617 innet/http - docs: API compatibility covers tagged releases only
Details: elps v1.77.0 release.
2026-10-09: buildenv v0.1.34
- build-api, build-go, build-go-alpine, build-godynamic: Security: build gotestsum and golangci-lint with golang.org/x/text 0.41.0 (CVE-2026-56851)
2026-10-09: buildenv v0.1.33
- General: Security: Go 1.26.9. It fixes
html/template(GO-2026-6599, GO-2026-6600) andnet/http(GO-2026-6617) - nginx-frontend: Move the base to nginx 1.30 on Alpine 3.24. Security: this fixes tiff (CVE-2026-4775)
- build-godynamic, nginx-frontend: Security: libexpat 2.9.0 (CVE-2026-102633, CVE-2026-77214)
2026-10-09: elps v1.76.0
- json: New durable codec values (
libjson.DurableCodec[T]) andNewFrozenDurableRegistrylet an embedder save and restore its own native values in a durable dump - regexp: A durable dump saves compiled regexps
- elpsvet: New
elpsdurablenativeanalyzer requires each native payload type to have a durable codec or a transient mark.elpsnativepayloadmoves to the importableelpsvet/nativepayloadpackage - docs: The thread-first macro-step regression is listed as a known issue. See Known issue: thread-first and thread-last refuse macro steps
2026-10-07: substrate v2.247.0
- shiroclient: Upgrade note: writes stop when the license expires. Reads continue until the license grace period ends. Before, writes also continued until the grace period ended
- shiroclient: The gateway restarts while the license metrics server is down. When the license does not allow reads and the server sends no answer (transport error, timeout, 429 or 5xx), the gateway serves reads and writes for 2 hours, then reads only for 7 more days. A renewal or an answer from the server ends the window. Gauges:
luther_license_startup_graceandluther_license_startup_grace_writes - shiroclient: New optional setting
SHIROCLIENT_LICENSE_STATE_DIRnames a writable directory. The gateway stores each renewed license there and uses it at start-up when it is valid longer than the license file. Use a volume that survives a restart - shiroclient: Security: a renewed license that does not decode or verify never replaces a valid installed license, and a failed install leaves the gateway refusing requests, never unlicensed
- shiroclient: At start-up the gateway waits at most 10 s for a renewal, and only when the license expires within 7 days. Demo mode does not wait
- shiroclient: The gateway reads at most 1 MiB of a metrics server answer, and stops a usage report when its context ends
2026-10-07: buildenv v0.1.32
- General: Rebuild on current base images and packages.
2026-10-06: hyphae v1.1.0
One hyphae tag publishes the luthersystems/pdfserv and luthersystems/martin images.
- pdfserv: Upgrade note:
luthersystems/pdfserv:latestnow renders with headless Chrome instead of QtWebKit (wkhtmltopdf). Pinluthersystems/pdfserv:v1.0.0until you check your documents with v1.1.0. To roll back, deploy the prior image tag - pdfserv: The API does not change.
/pdfserv.PDF/Generate,/pdfserv.PDF/HealthCheck, the base64 fields and all render flags stay the same - pdfserv: Layout can change. A4 margins are physical millimetres (server defaults 10/10/20/10 mm). DPI has no effect on layout. Page breaks and table splits can occur in different places than with QtWebKit
- pdfserv: New limits: one active render, 16 queued, 30 s per request including queue time, 3 MiB decoded HTML and 16 MiB PDF. Set the client gRPC receive limit to about 22.4 MB or more for the base64 PDF
- pdfserv: Deploy with
pdfserv/deploy/deployment.yaml: UID 65532, read-only root filesystem, no capabilities and 256 MiB/dev/shm. Request 512 MiB memory and 1 CPU, with limits of 4 GiB and 2 CPU. Readiness on:9603/readyznow checks browser capacity - pdfserv: Security: pdfserv fetches assets only from public HTTP and HTTPS addresses on ports 80 and 443. Add internal ranges to deny with
extra-denied-cidrs - martin: New
run --parallel Noption (default 1) runs up to N per-file invocations at the same time. Output, JSON and JUnit reports and exit status are the same as with--parallel 1. Use it only for files that do not depend on each other's server-side effects - martin: Security: new opt-in
run --deny-private-networksoption refuses connections to loopback, private, CGNAT, link-local (including 169.254.169.254) and other reserved ranges. It also checks redirects and proxies.--deny-cidr CIDRadds ranges. It is off by default - martin: CI tests the image on arm64 and amd64 before each release
Details: hyphae v1.1.0 release.
2026-10-06: substrate v2.246.0
- substrate: Upgrade note: upgrade every peer of a channel together. A range query that reaches its end now makes one more, empty query, so the read set of such a transaction changes
- substrate: Fix: a
thread-firstorthread-laststep whose head is a macro or special operator, such asdefault,when,andoror, works again. See Known issue: thread-first and thread-last refuse macro steps - substrate: A range query continues across pages when a peer limits the rows that one query returns, so the peer's limit cannot hide rows
- substrate: Bump ELPS to v1.75.3
2026-10-06: elps v1.75.3
- lisp: Fix:
thread-firstandthread-lastaccept a step whose head is a macro or special operator, such asdefault,when,andoror. A macro step gets the value as a quoted datum, andnilstaysnil. See Known issue: thread-first and thread-last refuse macro steps - lisp:
evalrecovers from a panic in its own frame
2026-10-05: substrate v2.245.0
- substrate: Upgrade note: this release changes transaction results for some phyla, so upgrade every peer of a channel together. Run
shirotester lintandshirotester preheat-checkon each phylum before you upgrade - substrate: Known issue: a
thread-firstorthread-laststep whose head is a macro or special operator, such asdefault, fails. See Known issue: thread-first and thread-last refuse macro steps - substrate:
utils:set-index-prefixestakes keyword arguments:(utils:set-index-prefixes :bimap b :counter c :page p).shirotester lintreports a positional call - substrate: New opt-in guard
SUBSTRATE_FORBID_CORE_REBIND=truefails the load of a phylum that rebinds a symbol of a core package, such asstatedb:get. The newcore-rebindlint check reports these rebinds in source. Set the guard uniformly across a channel's peers - substrate: The
handlebarspackage uses a deterministic engine with limits on template size, depth, output size and steps. Results match the previous engine except for documented edge cases, and each render costs more ELPS steps.(handlebars:render tpl ctx :strict true)turns on strict mode - substrate: The core storage functions (
statedb:get,statedb:put, thecc:storage-*functions,utils:join-index-colsandvalidations:validate-not-nil) and the router's internals run in Go. Responses, read sets and write sets do not change. ELPS step counts change, so sizeSUBSTRATE_ELPS_MAX_STEPSfrom measurements on this version if you set it. The router ignores a phylum's rebinding of these functions - substrate:
cc:load-chaincodeis removed. Substrate loads phylum archives itself, with limits on archive size - substrate:
cc:bptree-opentakes keyword arguments, such as(cc:bptree-open :prefix "p" :compare my-cmp).cc:storage-metricsreturns a sorted map; read a counter withget - substrate:
cc:sleepis available only in tests. A phylum that calls it at run time fails, andshirotester lintreports each call - substrate:
utils:memoize-wrapkeys its cache by value and type, so1and1.0are separate entries.SUBSTRATE_LEGACY_MEMO_KEYS=truerestores the old key; set it uniformly across a channel's peers - substrate: The optional unique-key limit also counts rich-query rows and paginated range rows
- substrate: New opt-in
SUBSTRATE_VERIFY_AUTH_CLAIMS=trueverifies the auth token signature before the router recordstxIssuerEmail. The keys come fromSUBSTRATE_AUTH_CLAIMS_JWKS, a JWKS document in config - substrate: A cancelled request fails and commits nothing. The new
--request-timeoutsetting (CHAINCODE_REQUEST_TIMEOUT, off by default) ends a request that runs too long; set it above the peer'schaincode.executetimeout - substrate: Each request logs its ELPS step count, the step limit and its storage counters in one
elps stepslog line - substrate: Init logs the warning
init installed no phylumwhen it installs no phylum, and fails on an unexpected response - connector: A connector event's
idempotency_keyreaches the callback's context - shiroclient:
SHIROCLIENT_METRICS_URLoverrides the license metrics endpoint - substrate:
shirotester unit-testsloads a test file's shared helpers once per file instead of once per test - substrate: Security:
cc-fetchurl:fetchurlrefuses metadata, link-local, loopback and private network destinations with a catchable error - substrate: Security: mock mode and the debug REPL load phylum files only from inside the phylum root
- substrate: Security: update the OpenTelemetry trace exporters to v1.46.0 (GO-2026-6505)
- substrate: Private data
put-hashedandget-hashedreject a key that is not a string, and a B+ tree flush writes its nodes in key order - substrate: Bump ELPS to v1.75.2 (via v1.72.0 to v1.75.1) and svc to v0.19.0
2026-10-05: elps v1.75.2
- analysis: A bare file (one without
in-package) is analyzed in the package of the file that loads it, also when load paths are relative
2026-10-05: elps v1.75.1
- json:
json:dump-bytesand the other walks of native Go maps visit entries in key-name order, so the same input gives the same error on every run. Output of a successful encode does not change
2026-10-04: hyphae v1.0.0
- martin: Upgrade note:
luthersystems/martin:latestnow runs collections with a Go engine and an embedded JavaScript sandbox. Node and Newman are not used, and there is no Newman fallback. Pin your previous Martin image tag withMARTIN_VERSIONuntil you finish upgrade tests - martin: Run
martin vetbefore you upgrade. It checks collections,--prefiles and scripts for features that the new engine does not support, and exits 1 when it finds one. It does not send requests or run scripts. A clean result does not replace a test run - martin:
runvalidates all files before it sends a request. An unsupported feature or a load error in any file stops the whole run, also with--bail=false. Setup errors, unsupported features and cancellation exit 1 - martin: Supported in scripts:
pm.test,pm.expect(Chai 4.4.1), scoped variables, response JSON, text and headers, lodash 4, UUID,atobandbtoa, and timers. Supported in HTTP: raw and multipart bodies, uploads, cookies, redirects, gzip, deflate and Brotli - martin: Unsupported script APIs fail the test, also when the script catches the error. These include
pm.sendRequest, request changes, cookies in scripts, asyncpm.test(done)andIntl - martin:
--iterationsdefaults to 0. With more than one file, each file runs once, then the combined collection runs--iterationstimes. With 0, the combined run executes no requests.--batch-run(-r) runs only the combined collection - martin: A run of one file with
--bail=falseexits 0 for test failures, as before. The reports still show the failures - martin: The image base is Alpine 3.24.2, pinned by digest
Details: hyphae v1.0.0 release.
2026-10-04: elps v1.75.0
- json: Durable typed JSON saves value graphs. It keeps shared lists and arrays as views, keeps program literals literal and saves error values and closures (only the names a closure reads)
- lisp: New builtin registry. Builtins are looked up by identity, and new
builtinandbuiltin-namefunctions read the registry. Durable JSON writes a registered builtin as~#builtin - lisp: New
CapturedNamesreturns the names that a lambda's frames bind. Vector capacity is now part of the language - json:
json:dump-*bounds, meters and converts native values once
2026-10-02: buildenv v0.1.31
- build-godynamic: Security: the published OpenVEX document marks CVE-2026-97689 and CVE-2026-97687 as not affecting the image. They are in the urllib3 copy that pip vendors, which fetches only from the configured package index. The Azure CLI uses urllib3 2.8.0
2026-10-02: buildenv v0.1.30
- General: Rebuild on current base images and packages.
2026-10-02: elps v1.74.0
- lisp: Upgrade note:
lisp.ArgDecoderis now a struct, so typed builtins decode arguments without a heap allocation. The constructorsValueArg,TypedArgandStringArgdo not change. Wrap a decoder written as a plain function inlisp.CustomArg - json: New canonical typed JSON in the
jsonpackage.json:canonizeis faster - lisp: New value settings on
Runtime - analysis: The macro expansion cache is keyed by package and carries an expanded
in-packageforward
2026-09-30: buildenv v0.1.29
- General: Rebuild on current base images and packages.
2026-09-30: elps v1.73.0
- time: Upgrade note:
time:sleep,time:utc-nowandtime:time-elapsedare removed, and so are the Go functionslibtime.BuiltinUTCNowandlibtime.BuiltinElapsed. The standard library is now deterministic. The host supplies the time (in substrate,cc:now). Usetime:time-fromwith a host timestamp - lisp: Upgrade note: library builtins run in their own package.
help,test,benchmarkand the test-let forms are now corelispforms.s:deftypeis removed from the schema library - lisp: New Go toolkit for builtins:
BuiltinFunc,LEnv.CallBuiltin,LEnv.CallGlobal,BindBuiltins,ExtendPackage,ArgReader,Func1toFunc4,MapRange,FreeKeywords,elpsutil.Templatefor Go macros,LEnv.ErrorfAtandNewGenSyms - lisp: New
macroexpand-all. Analysis, lint and the LSP share one code walker and scope resolver - lint: New
loop-variable-capture,test-outside-test-fileandremoved-builtinchecks. LSP hover shows the variables that a lambda captures - lisp: Template VMs no longer copy per-package slot storage on every fork
Details: elps v1.73.0 release.
2026-09-29: buildenv v0.1.28
- General: Rebuild on current base images and packages.
2026-09-28: substrate v2.244.0
- substrate: Upgrade note: unit tests now run with the same stack limit as peers, so a test that recursed deeper than a peer allows now fails, as the same code would on a peer
- substrate:
shirotester unit-testsruns much faster: each test starts from a prepared copy of the loaded phylum instead of rebuilding it, and parsed sources are reused between tests. Runshirotester preheat-checkto confirm your phylum can use this fast path - substrate: The
SUBSTRATE_ALLOW_LEGACY_KEYWORD_FORMALSsetting now also applies to unit tests - substrate: New
SUBSTRATE_DISABLE_TEST_TEMPLATE=truesetting forces unit tests back to building a fresh environment for every test
2026-09-28: substrate v2.243.2
- substrate: Release pipeline hardening; no runtime changes. Upgrading from v2.243.0 is optional
2026-09-28: substrate v2.243.1
- substrate: Release pipeline change; no runtime changes. Upgrading from v2.243.0 is optional
2026-09-28: elps v1.72.0
- lisp: Sorted maps accept integer keys. JSON handles an integer key and a string key that collide
- lisp: New
error-stackbuiltin reads the call stack of a handled error. Therethrow-contextlint check covers it - lisp: Upgrade note: the Go type
LQSymboland the constructorQSymbolare removed - schema: Constraint arguments are evaluated once, not twice
- lisp: The load cache computes the key digest once for repeated identical sources (bounded to 16 MiB)
- elpspath: Iterator work over shared documents is charged in steps and checks for cancellation. libjson
GoValueand debugger step-in walks no longer blow up on heavily shared structures
2026-09-27: substrate v2.243.0
- substrate: Upgrade note: rolling upgrades from v2.241.0 or v2.242.0 are supported; peers can run different versions while you upgrade, because read sets, write sets and responses are unchanged. Two exceptions, neither used by a typical phylum: if you have set the optional
SUBSTRATE_ELPS_MAX_STEPSlimit, upgrade every peer together and size the limit from measurements taken on this version (ELPS step counts can differ from v2.241.0 on some request paths); and see the v2.242.0 note on removed symbols - substrate: A newly installed or updated phylum version is prepared in the background as soon as the install succeeds, so the first transactions on the new version no longer pay its load cost. The latest phylum version is kept ready independently of the cache of older versions, and which version "latest" resolves to never depends on what a peer has cached
- substrate: New optional per-transaction limit on the number of distinct ledger keys a transaction touches, off by default. When enabled and exceeded, the transaction fails with JSON-RPC error code
-32003("unique key limit exceeded") and its writes are not committed; phylum install/update and context migrations run under a much larger fixed cap.SUBSTRATE_DISABLE_KEY_LIMIT_OVERRIDE=trueswitches the limit off as an emergency override - substrate: The
removed-router-symbollint warning names v2.242.0 as the release that removed the router symbols it reports
2026-09-27: substrate v2.242.0
- substrate: Upgrade note: rolling upgrades from v2.241.0 are supported; read sets, write sets and responses are unchanged. Two exceptions, neither used by a typical phylum: if you have set the optional
SUBSTRATE_ELPS_MAX_STEPSlimit, upgrade every peer together (ELPS step counts can differ on some request paths); and if your phylum calls an internal router symbol removed in this release, orutils:deduplicate-list/utils:deduplicate-vector, update the phylum before upgrading.shirotester lintreports removed router symbols with theremoved-router-symbolcheck - substrate: Request routing and dispatch now run in Go before any phylum code: each request is validated once, its phylum version resolved, and it runs exactly once in the right VM, with no retry. Batch handling, error responses and request metadata moved from the Lisp router to Go. The
removed-router-symbollint warning now also reports the router symbols this removed, includingrouter:request-schema - substrate:
SUBSTRATE_ELPS_MAX_STEPS=Nnow enforces a per-transaction step budget ofNsteps (in addition tooffandmeasure). A transaction over budget fails with JSON-RPC error code-32001("Step budget exceeded") and is not committed. Phylum install/update requests are charged their full load, so sizeNabove an update of your phylum. Storage builtins charge steps by value size, and set the limit uniformly across every peer - substrate: Bump ELPS to v1.71.0 (via v1.70.0). Shared Lisp test helpers in
*_testhelpers.lispfiles are loaded before each*_test.lispfile in the same directory - substrate: Native
utils:deduplicateandcc:incr-keyfor faster execution (utils:deduplicate-listandutils:deduplicate-vectorwere removed; useutils:deduplicate), and the chaincode sizes its Go memory limit from the container memory limit - substrate: New connector helpers
mk-eventandparse-resp, and connector registration is now preheatable - substrate: Built with Go 1.26.6
2026-09-27: elps v1.71.0
- lisp:
set!resolves package-qualified symbols - elpstest: The test runner loads shared
*_testhelpers.lispfiles before each test file - mcp: The MCP server describes its tool parameters
2026-09-26: substrate v2.241.0
- substrate: ⚠️ Upgrade note carried from v2.239.0:
router:phylum-version-loadedwas removed in v2.239.0. A phylum that still reads it must call(router:loaded-phylum-version)instead.shirotester lintnow reports every remaining reference with the newremoved-router-symbolcheck, naming the replacement, so run it over your phylum before upgrading - substrate: New
SUBSTRATE_ELPS_MAX_STEPS=measuresetting records how many ELPS evaluation steps each transaction takes, as thesubstrate_tx_elps_stepsmetric (by method), anelps_stepslog field and a trace span attribute. It is the first phase of a per-transaction step budget; onlyoff(the default) andmeasureare accepted, and a numeric limit is refused at startup rather than silently ignored. A new CI gate checks that every repository phylum counts identical steps on a cold VM and a template VM, a precondition for enforcing a budget consistently across peers - substrate: Native storage and B+tree builtins that walk an unbounded number of records now charge one step per record or tree node, so the step count reflects their real work
2026-09-26: substrate v2.240.0
- substrate: A request that returns a failure never commits its writes. The new
write-then-failurelint warning flags an endpoint that writes and can then return a failure - substrate: JSON-RPC batch requests, served by shiroclient's new
CallBatchand by the local test plugin'sCallBatchandQueryBatch - substrate: Bump ELPS to v1.69.0 (via v1.65.0–v1.68.0) —
when,unless,whileanddefaultare now built-in special operators, so code using them runs faster, and thestringpackage addshas-prefix?,has-suffix?,contains?,trim-prefixandtrim-suffix. The formatter now indents awhilebody by two spaces;shirotester fmt -llists files formatted the old way andshirotester fmt -wupdates them (whitespace only) - substrate:
utils:trim,triml,trimrandutils:string-trailerare deprecated, with editor warnings naming thestring:replacement (string-trailerdoes not check that the prefix is present;string:trim-prefixdoes) - substrate: Faster native
blend-*,keep-only-field-mask!,deep-equal?andstring-starts-with?inutils, and a hardened compiled-schema cache that skips argument serialization when no schema applies - shiroclient: Opt-in Fabric Gateway client mode, and in-flight requests are drained on SIGTERM/SIGINT instead of being cut off
- substrate: Published phylum templates are shared across servers in one process, and forked VMs are prewarmed with values earlier transactions used
2026-09-26: buildenv v0.1.27
- General: Rebuild on current base images and packages.
2026-09-26: elps v1.70.0
- lisp: Security: fix denial of service from values with heavy sharing (a small value that expands to a very large tree) in
equal?, macro expansion, quasiquote,elpspathvalidation and copies,GoValueconversion and package admission - lisp: One step budget now spans all top-level evaluations. Standard library builtins whose work grows with input size charge steps per KiB
- json:
json:dump-*output is capped atMaxAllocand stops on cancellation.json:syntax-errorstays the error under:string-numbers - lisp: Fix:
equal?compares bytes and reader quotes by value - schema: Fix: string booleans and NaN are refused, and
is-truthyhandles maps and bytes - lisp: Faster argument binding for host functions, slice-backed lexical scopes and fewer allocations per call form
2026-09-25: substrate v2.239.0
- substrate: ⚠️ Action may be required:
router:phylum-version-loadedis removed. Transaction state is no longer kept by rebinding package variables, so use(router:loaded-phylum-version)to read the version a transaction loaded. From v2.241.0,shirotester lintreports remaining references (removed-router-symbol) - substrate: Template publication freezes every package the template holds, so VMs share package tables instead of copying them; a transaction-time write to a frozen package still works and copies only that package for that VM.
SUBSTRATE_DISABLE_FROZEN_PACKAGES=trueturns this off. The newfrozen-package-writelint hint (info severity) flags such writes - substrate:
SUBSTRATE_ALLOW_LEGACY_KEYWORD_FORMALS=truetemporarily restores the old positional binding of keyword-named formals ((defun f (:a a) ...)), which current ELPS refuses. The remedy is&key;elps lintreports affected definitions. Set it uniformly across a channel's peers - substrate: Opt-in Fabric write batching behind
CHAINCODE_WRITE_BATCH, newsubstrate_preheat_template_cache_totalandsubstrate_elps_package_thaw_totalmetrics, and block sizes reported in license usage
2026-09-25: elps v1.69.0
- string: New
has-prefix?,has-suffix?,contains?,trim-prefixandtrim-suffixfunctions - lisp: New
LEnv.ChargeStepslets native builtins charge evaluation steps
2026-09-25: elps v1.68.0
- lisp:
when,unless,whileanddefaultare now special operators, so they cost no macro expansion. A package that defines or imports its own binding of these names keeps using it - docs: The README is an introduction, and the user docs are reorganized
2026-09-25: elps v1.67.0
- elps: Maintenance release; no change to the language or library. Checked (
elpscheck) builds no longer retainRuntimevalues, so they do not leak memory
2026-09-25: elps v1.66.0
- json: JSON loads decode directly to ELPS values, which makes
json:loadfaster - lisp: New typed Go helpers
MapGet,MapSet,GoSliceOfandGoMapOf. Theinterface{}forms ofMapGetandMapSetare deprecated
2026-09-24: buildenv v0.1.26
- build-api, build-go, build-go-alpine, build-godynamic: golangci-lint 2.13.2
2026-09-24: elps v1.65.0
- lisp: New
TemplateWithFrozenPackages: template VMs share frozen package tables and copy a package only on its first write.TemplateWithThawHookobserves these copies - lisp: Template VMs build each binding on first use.
VMWithPrewarmbuilds the values that earlier VMs used.TemplateWithEagerInstantiationrestores the eager build - lisp: New opt-in
lisp.WithLegacyKeywordFormalsrestores the v1.61 positional binding of keyword parameter names. The default error and thelambda-listlint diagnostic point to&key - json: JSON serializer modes are per-VM runtime settings
2026-09-23: substrate v2.238.0
- substrate: Bump ELPS to v1.64.0 (via v1.63.0), and
cc:is-valid-json?caches compiled JSON schemas so repeated validation against the same schema is faster
2026-09-23: elps v1.64.0
- schema: Validator names come from the runtime symbol counter, so they do not depend on process history
- elpsvet: New
elpsbuiltinstateanalyzer reports builtins that write shared receiver, captured or package-level state
2026-09-23: elps v1.63.0
- json: JSON serializer modes are kept per VM, so concurrent environments do not share serialization state
- json: New
json:string-numbers?reads the default string-numbers mode.json:dumpencodes sorted maps without intermediate pair lists - lisp: Function calls read the lambda body directly instead of allocating a new list
2026-09-22: substrate v2.237.0
- substrate: Known issue: from this release to v2.245.0, a
thread-firstorthread-laststep whose head is a macro or special operator, such asdefault, fails. See Known issue: thread-first and thread-last refuse macro steps - substrate: Bump ELPS to v1.62.3 (via v1.62.0–v1.62.2) — allocation cuts throughout the evaluator: a walker allocation fix, a second round of per-call allocation cuts, and lazily created scope maps, direct map key access and a fast path for keyword arguments. Measured against ELPS v1.61.2 (8 interleaved rounds, benchstat): the shirocore suite is 3.3% faster with 7.2% fewer allocations, preheating is 6.2% faster with 10.2% fewer allocations, and
shirotesterruns are 5.4% faster with 9.4% fewer allocations. Builtin formals are now validated once at registration rather than on every call - substrate: shirocore writes its literal
elpspathselectors as v2 positional steps, so they parse nothing at call time —utils:get-field-mask-pathsis 11.8% faster with 8.2% fewer allocations - substrate: Transaction VMs are now built only from validated preheat templates, with isolation and ownership checks enforced, and production template parity and isolation checks run over the repository's phyla on every change, protecting against cross-transaction state leaks
- substrate: The debugger resolves ledger reads from each evaluation's own transaction context
- substrate: Security — update gRPC to the patched v1.83.2 (GHSA-2v4p-qf9q-27wj). Vulnerability scanning now also covers nested Go modules, such as the chaincode's bin-adapter, which previous scans did not reach
2026-09-22: buildenv v0.1.25
- build-api, build-go, build-go-alpine, build-godynamic: Security: build git-lfs, buf and go-swagger with golang.org/x/crypto 0.56.0 (CVE-2026-78662, CVE-2026-56855)
- build-godynamic, build-java: Security: build Docker Compose and the Docker CLI with gRPC-Go 1.83.2 (CVE-2026-84304, CVE-2026-84445)
2026-09-22: elps v1.62.3
- lisp: Faster evaluation: scope maps are created only when needed, map
Keysis direct and keywords have a fast path
2026-09-22: elps v1.62.2
- parser: Fewer allocations for each token
- lisp: Fewer allocations on the evaluator's hot paths. A function bound twice reports its most recently bound name
2026-09-19: elps v1.62.1
- lisp: Builtin formals are validated when the builtin is registered, not on every call
2026-09-19: elps v1.62.0
- lisp: Upgrade note: behavior changes. Integer
powraises on overflow.maxandminpropagate NaN. Malformed lambda lists, keyword formals and invalid package names are errors at definition time. Lisp code cannot write corelisppackage bindings.json:nullencodes asnull.format-stringprints a depth marker instead of raising - lisp: Known issue:
thread-firstandthread-lastrefuse a macro or special operator step in v1.62.0 to v1.75.2. See Known issue: thread-first and thread-last refuse macro steps - lisp: Runtime hardening. A
let*initializer closure no longer sees later bindings. Native calls stop after a request is cancelled. Host panics are contained. Deep and cyclic values render with#<depth-limit>and#<cycle>markers. Error text is bounded - elps: New
elps run --timeoutand--max-stepsflags. Ctrl-C cancels evaluation and flushes output - lint: New
let-recursion,lisp-package-seal,builtin-shadowing,lambda-list,duplicate-bindingandduplicate-keywordchecks - formatter: Long comments and shebang lines stay comments. Oversized tokens, malformed numbers and a UTF-8 BOM are reported.
elps fmtno longer adds a space inside an identifier. The minifier renames a package-level name only when it can prove it is safe
Details: elps v1.62.0 release.
2026-09-13: buildenv v0.1.24
- General: Rebuild on current base images and packages.
2026-09-10: elps v1.61.2
- lint: New
iteration-mutationandcomparator-mutationchecks. Mutation checks treat quote forms and macro templates as data - lsp: Fewer allocations in word lookup. Code actions, rename, document parsing and file reads on save respect the workspace size limit
- lisp: Fix:
copyof a sorted map copies values in key order, and a failed copy fails as a whole
2026-09-09: buildenv v0.1.23
- General: Rebuild on current base images and packages.
2026-09-09: elps v1.61.1
- lisp: Template publication does less work and allocates less. Per-VM instantiation does not change
2026-09-08: elps v1.61.0
- lisp: Upgrade note: for Go embedders,
LEnv.Fork, the shallowLEnv.Copy,Template.Forkand the old fork options are removed. Create a template withlisp.NewTemplateafter initialization, then create each VM withTemplate.NewVM - lisp: Upgrade note: regexp and time native values from the standard library are opaque. Use the library operations and
libtime.Timeorlibtime.Getinstead of a direct assertion to*regexp.Regexportime.Time - lisp: Templates load a program once and create independent VMs. Each VM gets private mutable state, and aliases, cycles and views are preserved
- lisp: New
lisplib.LoadRuntimeLibraryloads the standard library for templates. Each VM gets its own testing registry - lisp: Fewer allocations for maps, sequences, iterators and
string:join
Details: elps v1.61.0 release.
2026-09-02: buildenv v0.1.22
- build-api, build-go, build-go-alpine, build-godynamic: Security: build git-lfs and Docker Compose with golang.org/x/crypto 0.55.0 (CVE-2026-56854)
2026-09-01: substrate v2.236.0
- substrate: A context migration can no longer invoke another registered migration — the nested call now raises at the migration's entry point and names both migrations. Previously the rule was only documented, and a nested migration that hit cache silently made the outer fresh step look cached, so a transaction ran more steps than
max_fresh_steps_per_txallowed - substrate: New
nested-migrationlint check inshirotester lintand the editor extension moves the same failure to authoring time — it flags a migration body that reachesrun-ctx-migrations,run-migration-to-completionor thectx-migrationsregistry, directly or through a helper in the same file. It is structural, so it runs identically with--semantic=falseand no workspace; the runtime guard remains the complete check - substrate: Bump ELPS to v1.58.0 — adds the
with-cleanupspecial operator:(with-cleanup (cleanup...) body...)always runs the cleanup forms, whether the body returned normally or signalled, and returns the last body value without catching the error.shirotester lintgains the matchingwith-cleanup-formscheck (a cleanup list that is empty or a bare symbol releases nothing), andload-scope-contextnow sees insidewith-cleanup, which it previously skipped entirely - substrate: Bump ELPS to v1.59.0 — the
shadowinglint no longer reports a binding whose initialiser narrows the name it shadows, such as(let* ([ctx (default ctx (sorted-map))]), and its severity now follows what is hidden: shadowing a builtin, special operator, macro or function is a warning, shadowing another local stays informational - substrate: Bump ELPS to v1.60.0 —
elpspathgainsparse-path, which converts a v1 string selector into the positional steps the v2?family takes, so a path that arrives as data (a client request, a persisted envelope) is parsed once rather than on every call:(apply ? (cons obj (parse-path sel))). Open-ended slices gain a positional spelling,'(range n)for[n:]. The selector parser is a new single-pass scanner, 67–90% faster on selector strings with fewer allocations and the same grammar and error messages; substrate's own copy of the v1 parser is retired in favour of it. The one grammar change is a strict widening:.["a"]["b"], which the old parser rejected, now parses
2026-09-01: buildenv v0.1.21
- General: Rebuild on current base images and packages.
2026-09-01: elps v1.60.0
- elpspath: New
parse-pathconverts a string path into the positional steps that the v2?functions take:(apply ? (cons obj (parse-path sel))) - elpspath: New open-ended range step
'(range n)for[n:] - elpspath: The selector parser is a new single-pass scanner. It is 67 to 90% faster with the same grammar and error messages.
.["a"]["b"]now parses - elpspath: Fix: path rendering prints a selector that parses again, and open-ended ranges print correctly
2026-08-29: elps v1.59.0
- lint: The
shadowingcheck separates refining a function's own argument from hiding a builtin, which removes false positives
2026-08-27: substrate v2.235.0
- substrate: ⚠️ Action may be required for phyla that use the
testingpackage outside test files. Production environments no longer load thetestingpackage, so a phylum whose production load graph reaches it at load scope now fails to load withunknown package: testing. Three shapes trigger it: a top-level(use-package 'testing), a top-level(test ...)/(test-let ...)registration, and a top-level qualified reference such as(testing:assert-equal ...). The common, safe shape is unaffected — adefunwhose body callsassert-equalstill loads, because symbols in a function body resolve when it is called. The remedy is to move the offending file into the phylum's test-loaded set (a*_test.lispfile), which the test harness loads and production does not - substrate: The failure is not always loud, which is the part worth checking for. Inside
handler-bindorignore-errorsthe load succeeds and silently skips the rest of the recovered body — no error, just missing behavior.shirotester preheat-checkis the reliable detector: run it against your phylum directory or the deployment ZIP before upgrading - substrate: Operators who need more time can set
SUBSTRATE_ALLOW_PHYLUM_TESTING_PACKAGE=trueon the chaincode container to restore the previous behavior while the phylum is migrated. It must be set uniformly across a channel's peers — with it off the affected phylum fails to load and with it on the phylum runs, so peers that disagree disagree about whether the phylum exists at all. Set it the same way wherevershirotester preheat-checkruns, or a phylum can pass the check in CI and still fail to load on the peers; the check prints aNOTEnaming the variable when it runs with the hatch on. See Chaincode Environment Variables - substrate:
shirotester preheat-checkand the runtime's own template-refusal messages now name a line the phylum author can actually edit. A blocking context read reached through a wrapper or a macro previously reported only the position inside the library it bottomed out in — naming a file the phylum does not own, while the phylum's own line never appeared — and because the report de-duplicates on that position, two distinct blockers could merge into a single entry. Reports now readread-position <- reaching-form, and are unchanged for a read written directly at load scope - substrate: Bump ELPS to v1.57.0 — native values carry typed construction and access contracts, and native payloads are checked against the runtime they belong to, closing a class of cross-transaction leak through environments served by forking a per-phylum template
2026-08-27: elps v1.58.0
- lisp: New
with-cleanupspecial form runs cleanup forms on every exit path, including non-local exits. It does not mask aninternal-panic - lint: Functions can carry Go-style deprecation annotations, and lint reports calls to them
- analyze: SARIF rules have documentation, so alert pages are no longer blank
2026-08-26: substrate v2.234.0
- substrate:
blend-pathsnow guarantees its write-through contract, pinned by tests: values at blended paths alias the source document (a write through the blend result at a blended path is visible in the source patch), the result is independent of the destination, and an empty path list returns the destination by identity. Restores behavior phyla depended on that regressed with the elpspath copy fix in v2.229.0 — the symptom was fields generated on the blend result (ids, timestamps) silently missing from the persisted patch after an update - substrate: Leaning on the blend-paths write-through aliasing is deprecated for new code — write generated fields onto the source patch explicitly; the aliasing contract is retained for existing phyla
- substrate: New static vet gate rejects native payloads reaching a preheat template, preventing cross-transaction leaks through template-forked environments
2026-08-26: substrate v2.233.0
- substrate: Preparing a transaction's environment is dramatically cheaper — a warm VM is now produced by forking a per-phylum template snapshot instead of initializing from scratch, and the embedded core library is sealed once and shared by every fork rather than copied per environment. Together with the ELPS bump below, the allocations a single fork costs drop from roughly 37,000 to under 7,000 (−81%), so pools of preheated environments fill faster and hold less memory per VM
- substrate: Bump ELPS to v1.56.0 — array values no longer deep-copy dimensions they built themselves, forking no longer rebuilds per-environment metadata nothing reads, and the vector-building builtins moved onto the copy-free path, cutting two allocations from every constructed vector on the transaction path
- substrate: When a phylum cannot be preheated, the report is now trustworthy —
shirotester preheat-checkand the runtime's own template-refusal message name the innermost phylum source position of each blocking read rather than an internal frame, repeated reads of one capability no longer crowd distinct ones out of the list, and a report that had to truncate says so instead of silently dropping reads - substrate: The
elpspathv1 string-path builtins (get-path,set-path!and friends) are now marked deprecated in hover documentation andshirotester doc, each pointing at its v2 positional-arg equivalent, with a selector-to-step translation table in the package documentation. v1 continues to work — stored data and request payloads still carry v1 path strings — but new phylum code should use the v2 operations, which are several times faster and support dynamic paths naturally
2026-08-26: buildenv v0.1.20
- General: Rebuild on current base images and packages.
2026-08-26: elps v1.57.0
- lisp:
GoValuereturns the bytes of a bytes value instead of a bound method - lisp: Native values have a complete clone protocol, typed accessors and runtime affinity
2026-08-26: elps v1.56.0
- lisp: Fewer allocations when builtins build vectors and arrays, and when template VMs are created
2026-08-25: substrate v2.232.0
- substrate: Context migrations pack by default again — following operator feedback on v2.230.0, a migration now fits as many fresh steps into each transaction as the storage budgets allow (the behavior before v2.230.0), so operators no longer need to know how many steps fit in order to get efficiently packed transactions. The per-transaction step cap is now the opt-in control: pass
shiroclient init --migration-tuning '{"max_fresh_steps_per_tx": N}'(for example1) when the step rather than the budget should decide transaction chunking, such as tests that observe page boundaries. Cached replays remain free, and frontier resume and the exit-code contract are unchanged - substrate: With packing as the default, size
shiroclient init -lto the expected number of budget-sized transactions (typically small); a run tuned down withmax_fresh_steps_per_txneeds-lnear the total step count divided by that setting
2026-08-25: substrate v2.231.0
- substrate: Phylum loading is dramatically cheaper — the parse cache now hands every environment the same immutably sealed program instead of deep-copying it, removing ~44 ms, ~37 MiB and ~447,000 allocations from every cache hit, and the embedded core library is parsed once per process instead of once per environment, cutting warm-VM construction time by ~69% and its allocations by ~80%. Together these make pools of preheated environments substantially faster to fill and cheaper to hold
- substrate: New
shirotester preheat-checkcommand proves whether a phylum fully preheats — it loads the phylum (directory or deployment ZIP) against a probing transaction context and names the exact file and line of any load-scope context read that would silently stall background preheating - substrate: New
load-scope-contextlint check (on by default) catches the same pattern statically — a transaction-context read at phylum load scope, such as reading the clock or ledger state at the top level of a file, is flagged at authoring time inshirotester lintand the editor extension, with the fix pattern named in the diagnostic - substrate: Bump ELPS to v1.54.0 — adds the per-file load cache the parse-cache improvement above is built on, with sealed programs served safely across environments
- substrate: Operators who run a phylum that mutates its own quoted program literals (a pattern the sealed cache now rejects with
modify-literal-error) can setSUBSTRATE_ALLOW_PHYLUM_LITERAL_MUTATION=trueon the chaincode container to restore the previous behavior while the phylum is updated; the setting must be uniform across a channel's peers and announces itself in the process log — see Chaincode Environment Variables for the full list of settings available on the chaincode container
2026-08-25: substrate v2.230.0
- substrate: Context migrations now perform one fresh step per transaction by default — the batch size a migration chooses is its unit of work per transaction, making transaction sizing predictable and the batch size observable from the returned context; pack more steps per transaction for a single run with
shiroclient init --migration-tuning '{"max_fresh_steps_per_tx": N}', no phylum redeploy needed. Cached replays remain free and do not count against the limit - substrate: Restarting a context migration now resumes in constant time — the engine records each migration's frontier and jumps straight to it, instead of re-reading the cached step history one entry at a time; long-running migrations no longer get slower to resume the further they have progressed, and a completed migration answers immediately on re-run
- substrate:
shiroclient initexit codes now distinguish outcomes:0means the migrations completed,3means the iteration budget (-l) ran out with work remaining — progress is committed, re-run to continue, and the remaining context is logged as paste-ready JSON for-m— and1means a real failure, including a new detection for migrations making no progress between iterations. Size-lto the total step count divided by the steps-per-transaction setting - substrate: New
utils:set-index-prefixesbuiltin — the official override point for index key prefixes - substrate: Phylum preheating hardening — each environment initializes from its own copy of the phylum, and abandoned initializations are cancelled instead of running to completion in the background
- substrate: Bump ELPS to v1.53.0 — adopts the sealed-AST series for faster program loading and safer reuse of parsed phylum code across environments
2026-08-25: elps v1.55.0
- elps: Maintenance release; no change to the language or library.
2026-08-25: elps v1.54.0
- lisp: New
Runtime.LoadCachehook caches sealed parse results per file, so an embedder parses a repeated source once
2026-08-24: elps v1.53.0
- json: The JSON encoder allocates less
- lisp:
PackageRegistry.AddPackagehas an admission contract for each class of value
2026-08-24: elps v1.52.0
- lisp: Values are sealed: a program tree cannot change after construction, and values are copied on write
- lisp: A write through a sealed value raises a condition that you can catch
- lisp: New
copybuiltin. Template environments fork cheaply, and environments share builtin formals - lisp: Fewer allocations when functions are defined and packages are imported
Details: elps v1.52.0 release.
2026-08-22: buildenv v0.1.19
- General: Rebuild on current base images and packages.
2026-08-21: substrate v2.229.0
- substrate: The per-transaction key and write-byte metrics, previously last-write-wins gauges, are now histograms —
substrate_tx_keys_accessedandsubstrate_tx_bytes_writtengive true per-endpoint distributions (p95s, threshold alerting via plain bucket queries) instead of whichever transaction finished last; the old gaugessubstrate_tx_keys/substrate_tx_write_bytesstill work but are deprecated - substrate: New
substrate_statedb_ops_total{method,op}andsubstrate_statedb_bytes_total{method,op}counters expose the per-endpoint statedb breakdown — gets, puts, private-data access, range scans, and range pagination — so an endpoint's read/write/private mix is visible over time - substrate: Sampled OpenTelemetry
Handlespans now carry the full statedb breakdown (statedb.*counts and bytes) plusluther.method,luther.req_id, andluther.tx.dirty— a slow trace shows exactly what the transaction touched in state - substrate: Breaking for dashboards pinned to specific
levalues —substrate_tx_sim_durandshirogateway_tx_durtrimmed from 25 to 14 buckets (same 50ms low end, tail extends to ~15s), roughly halving the per-endpoint series cost of the two duration histograms - substrate: ELPS phylum profiler spans now export through the server's own tracer rather than the process-global one — concurrent substrate instances (such as in-memory tests) no longer leak spans into each other's trace exporters
- substrate: elpspath hardening —
set-path/?setcopies no longer share nested containers with the source, and a value that contains itself is refused with a catchable error instead of crashing the chaincode process - substrate: Bump ELPS to v1.50.0 — brings the tracer plumbing and container-aliasing fixes above into the ELPS runtime, with faster transaction evaluation on top
- substrate: The pvtdata sentinel private-data collection now defaults to
"private", with an explicit opt-out for deployments that relied on the previous default - substrate: Clearer error when chaincode source fails to load — the message now names both failed interpretations (not a zip archive, not loadable lisp) instead of reporting only the zip failure
- substrate: Fix
cctime:sleepto declare the same arguments as its implementation - substrate: The benchmark regression gate is now statistically sound (both arms measured interleaved on the same runner) and a daily scheduled govulncheck run watches for vulnerable dependencies — catching performance and security regressions automatically
2026-08-21: elps v1.51.0
- lisp: Each environment gets fresh formals, so a function cannot change another environment's argument list
- elpspath:
?setdocuments and enforces its value contract - lisp: Panics that Lisp code can reach are classified and turned into errors
2026-08-20: buildenv v0.1.18
- build-godynamic: Security: build Docker Compose with moby/go-archive 0.3.3 (CVE-2026-17106)
2026-08-20: buildenv v0.1.17
- General: Rebuild on current base images and packages.
2026-08-20: buildenv v0.1.16
- General: Security: Go 1.26.6, with patched golang.org/x/net, x/mod, x/sys and x/crypto in the bundled Go tools
- build-go, build-godynamic, build-java: Security: build the Docker CLI 29.6.1 from source with Go 1.26.6, so it carries the Go security fixes
- build-godynamic: Security: the published OpenVEX document marks the setuptools and msgpack findings in pip's vendored packages as not affecting the image
2026-08-20: elps v1.50.0
- json: New
:exact-integersoption keeps JSON integers above 2^53 exact on load.json:dumprefuses a native value that it cannot load back - lisp: Fix: macro expansion,
copyand sequence views no longer share or write through into their source. Walks of cyclic values are bounded, so they cannot crash the process - elpspath: Fix:
?del!no longer changes the source of a view, and copies of cyclic values are refused - lsp: The server negotiates
positionEncoding. Rename no longer corrupts non-ASCII identifiers - lint: An unset severity shows as
warning. Diagnostic carets line up in terminal cells - elpsutil: Embedder mistakes return errors instead of panics, and loads restore the caller's package. Embedders can inject the profiler's tracer
2026-08-14: buildenv v0.1.15
- build-godynamic: Security: the published OpenVEX document marks CVE-2026-69248 and CVE-2026-69249 in the Azure CLI's cryptography 48.0.1 as not affecting the image. The Azure CLI does not call the affected X.509 verification API
2026-08-10: elps v1.49.0
- lisp: Evaluator recursion depth is bounded, in addition to call-stack frames
- time:
time:sleepstops when the evaluation context ends and refuses a sleep longer than the time left - parser: Both halves of a package-qualified symbol must be names. A bad string literal raises
invalid-string - lisp: Fixes from fuzz testing, including a
powthat did not terminate,equal?on sorted maps, tail-call budgets and step limits - formatter: A comment in column 0 stays in column 0
- lsp: Fix: a crash in call hierarchy
2026-08-07: buildenv v0.1.14
- General: Rebuild on current base images and packages.
2026-08-05: substrate v2.228.1
- substrate: Restore the npm trusted-publishing auth in the release pipeline so the
@luthersystems/shirotesternpm package publishes again for v2.228.x — no runtime changes over v2.228.0
2026-08-05: substrate v2.228.0
- substrate: Fix duplicate results from
statedbunion range queries — an unbounded range (end="") instatedb:range-page-union/range-page-bytes-unionwas misclassified as disjoint from every other range, silently emitting duplicate keys; unbounded ends now count as overlapping and results are deduplicated - substrate: Context migrations now run under per-transaction budgets (max keys, write bytes, and iterations per transaction, deletes counted) with a resumable pause at the cache frontier — large-dataset migrations no longer risk blowing Fabric transaction limits mid-run
- substrate:
statedb:range-page*builtins are now legal in writing transactions — the page size is enforced client-side over a plain range iterator, since Fabric restricts shim-level pagination to read-only transactions - substrate: New out-of-band migration tuning — pass
--migration-tuning '{"batch_size": 2000}'toshiroclient initand read values in phylum viautils:migration-tuning; retune a paused migration between runs without redeploying the phylum or invalidating the migration's idempotency cache - substrate: Unpaginated range queries now stream keys lazily instead of collecting the whole key range into memory up front — constant memory at any range size, closing an out-of-memory class for full-keyspace scans; paginated range builtins now reject a page size <= 0 with a clear error, and a new range-pagination metric exposes page-fetch behavior to operators
- substrate: The in-memory emulator now serves ranges from a true cursor (no more full-range materialization per page during tests), with mock/real range parity proven by one shared corpus and the full migration lifecycle exercised end-to-end on the sample network on every change
2026-08-05: buildenv v0.1.13
- build-godynamic: Security: the published OpenVEX document marks CVE-2026-69247 in the Azure CLI's cryptography 48.0.1 as not affecting the image. The Azure CLI does not decrypt PKCS#7 or S/MIME data
2026-08-04: substrate v2.227.0
- substrate: Security — bump
google.golang.org/grpcto v1.83.0 (fixes GHSA-hrxh-6v49-42gf) along with OpenTelemetry transitive dependencies - substrate: Security — refresh build and runtime base images to
buildenv v0.1.12, picking up a year of Debian/Alpine base-image CVE fixes (expat and grpc HIGHs among others) - substrate: Bump svc to v0.16.0 — completes the migration off the deprecated aws-sdk-go v1 to aws-sdk-go-v2 across S3 document storage, SES mail, and request archiving
- substrate: Bump shiroclient-sdk-go to v0.14.1 with the matching grpc security updates
- substrate: Known-vulnerability scanning (govulncheck) and Go-module Dependabot now run on every change, catching vulnerable-dependency regressions of the above class automatically
2026-08-04: Luther Auth v4.8.1
- General: Security: rebuild on buildenv v0.1.12 base images, with fixes for Debian and Alpine CVEs, and update gRPC to v1.83.0 (GHSA-hrxh-6v49-42gf) and golang-jwt v4 to v4.5.2
- General: The magic link KMS cookie client uses the AWS SDK for Go v2. It makes the same KMS calls with the same IAM permissions, and existing cookies decrypt as before. The deprecated AWS SDK for Go v1 is no longer a dependency
- General: Bump svc to v0.16.0 and upgrade Go dependencies
2026-08-04: elps v1.48.2
- mcp: Fix: the MCP server no longer races at shutdown
- elps: Dependency updates, including
golang.org/x/cryptov0.52.0 andgolang.org/x/netv0.55.0
2026-07-31: buildenv v0.1.12
- General: Rebuild on current base images and packages.
2026-07-25: buildenv v0.1.11
- build-godynamic: Security: build Docker Compose with gRPC-Go 1.82.1 (GHSA-hrxh-6v49-42gf)
2026-07-16: Luther Auth v4.8.0
- General: New optional setting
AUTH_JWT_SIGN_KEY_PREVIOUS(same PEM format as the signing key) rotates the JWT signing key without an outage. The JWKS endpoint serves the public keys of the current and the previous key. New tokens are signed with the current key only - General: Startup fails when
AUTH_JWT_SIGN_KEY_PREVIOUSdoes not parse, or when it is set and JWKS is off. Startup logs the key ID of each loaded key, never key material
2026-07-12: buildenv v0.1.10
- General: Rebuild on current base images and packages.
2026-07-02: buildenv v0.1.9
- General: Rebuild on current base images and packages.
2026-07-01: buildenv v0.1.8
- General: Rebuild on current base images and packages.
2026-06-30: buildenv v0.1.7
- build-go, build-godynamic, build-java, build-js, build-swaggercodegen, build-e2e: Upgrade note: the default user is the non-root user
build. Withdocker run, pass-uto choose a user. A Dockerfile that buildsFROMone of these images and needs root must setUSER root - build-java, build-js, build-swaggercodegen: Upgrade the OS packages at build time to take the latest security fixes
- build-go, build-godynamic: Docker CLI 29.6.1
2026-06-30: buildenv v0.1.6
- General: Rebuild on current base images and packages.
2026-06-23: substrate v2.226.0
- substrate: Phylum preheat/init timeout is now configurable (default unchanged at 6s) — set it with the
--preheat-timeoutchaincode flag, theshiro.WithPreheatTimeoutserver option, or the shiroclient SDK'smock.WithPreheatTimeout(sdk-go v0.14.0) for in-memory tests. Prevents spurious "phylum init timeout" errors when many environments initialize in parallel under heavy CPU load; the baseline preheater always keeps the built-in default, so a small value can't stall all traffic - substrate: Add a guide for automated context migrations
2026-06-23: buildenv v0.1.5
- build-api, build-go-alpine: Upgrade note: the default user is the non-root user
build. Withdocker run, pass-uto choose a user. A Dockerfile that buildsFROMone of these images and needs root must setUSER root, for example to write a root-owned cache mount at/go/pkg/mod - General: Every published image carries an SBOM and SLSA provenance attestation for each platform
2026-06-23: buildenv v0.1.4
- General: Alpine 3.24
- build-go-alpine, build-godynamic: Security: jq 1.8.2 (CVE-2026-32316, CVE-2026-40164)
- build-api, build-go, build-go-alpine, build-godynamic: Security: build the bundled Go tools with patched golang.org/x/sys (CVE-2026-39824) and quic-go (CVE-2026-40898).
gotestsum --versionreports(devel) - build-go, build-godynamic: Docker CLI 29.6.0. build-godynamic adds Docker Compose 5.2.0
- build-godynamic, build-js: Azure CLI 2.87.0 and AWS CLI 2.35.11
2026-06-23: buildenv v0.1.3
- General: Security: Go 1.26.4 (CVE-2026-42499, CVE-2026-39836, CVE-2026-39820, CVE-2026-33814, CVE-2026-33811, CVE-2026-42504)
- build-api: Security: upgrade the Debian packages at build time, and build golangci-lint from source with the image's Go
- General: git-lfs 3.7.1
2026-06-19: buildenv v0.1.2
- build-e2e: Add the full font set of the pdfserv image, so local PDF renders match the pdfserv service
2026-06-19: buildenv v0.1.1
- build-e2e: New image
luthersystems/build-e2e(Ubuntu). It holds the tools to build and run Luther platform end-to-end tests without Docker-in-Docker: Go, Node.js 20, newman, martin, shirotester, pdfserv, substratehcp and wkhtmltopdf - build-e2e: Add an SSH client, so
go mod downloadcan fetch private modules
2026-05-24: buildenv v0.1.0
- build-go, build-godynamic, build-java, build-js: Upgrade note: the images no longer hold the embedded
make staticbuild flow. The entrypoint istini --. Build runtime images with a multi-stage Dockerfile that copies from the builder image - General: AWS CLI 2.34.53
2026-05-14: substrate v2.225.2
- substrate: Phylum panics raised during background preheat initialization are now recovered and surfaced as errors instead of taking down the chaincode process
2026-05-14: substrate v2.225.1
- substrate: Bump ELPS to v1.48.1 — defensive nil-guards in error rendering eliminate a class of secondary crashes when formatting unusual error values
2026-05-14: substrate v2.225.0
- substrate: Recovered phylum panics now include a
Go stack trace (panic origin):section in the error output, pinpointing the exact line that triggered the panic - substrate: Fix structured logging on the first request to a freshly preheated phylum — error stacks emitted during preheat-interrupt handling now flow through the configured logger instead of stderr
- substrate: Bump ELPS to v1.48.0 — adds a singleton-mutation guard and the Go panic-stack capture feeding the above
2026-05-14: elps v1.48.1
- lisp: Error rendering does not panic on a malformed error value. Well-formed errors render the same. A log line reports each time a guard fires
2026-05-13: elps v1.48.0
- lisp: Fix: macro expansion no longer corrupts the shared
trueandfalsevalues for the whole process - lisp: A recovered Go panic includes its stack. Schema validators no longer log
GetFunName BUG:lines - lisp: New
FunInPackage,MacroInPackageandSpecialOpInPackageconstructors bind a Go function to a package
2026-05-06: substrate v2.224.0
- substrate: Fix a phylum preheat data race that could cause an intermittent SIGSEGV under Go 1.26's new map implementation on first request to a newly loaded phylum
- substrate: Race-detector builds now run on every change, preventing regressions of the above class of bug
2026-05-05: elps v1.47.2
- elps: Fix: ELPS builds on Windows again, including
go install github.com/luthersystems/elps@latest
2026-04-24: substrate v2.223.0
- substrate: Per-request debug logging now correctly promotes phylum
cc:debugfcalls to Info level when a sampled OpenTelemetry parent span is present on the transaction - substrate: Fix OpenTelemetry trace propagation in in-memory / emulate-CC mode — spans now surface from transactions issued through
make mem-upand sandbox-style test flows - substrate: Refresh OpenTelemetry tracing documentation — covers the sampled-parent requirement, per-binary OTLP endpoint configuration, and the log-volume tradeoff when using per-request debug logging
2026-04-20: substrate v2.222.0
- substrate: Upgrade builds and CI to Go 1.26 via
buildenv v0.0.97 - substrate: Fix chaincode Docker build defaults and
functionaltesterstaticcheck findings for Go 1.26 release validation
2026-04-20: buildenv v0.0.98
- General: Security: Go 1.26.2 and Alpine 3.23
- build-go-alpine: Security: build golangci-lint from source with the image's Go
2026-04-20: buildenv v0.0.97
- General: Go 1.26.1, golangci-lint 2.11.4, buf 1.68.2 and go-swagger 0.33.2
- General: Security: upgrade the OS packages at build time in every image, including service-base-alpine and nginx-frontend
2026-04-15: substrate v2.221.0
- substrate: Distribute
shirotestervia npm (npx @luthersystems/shirotester) — zero-setup MCP server and CLI access for editors and AI coding tools - substrate: Fix VS Code extension version injection so
shirotester versionreports the release version instead ofsubstrate-SNAPSHOT - substrate: SNAPSHOT tags now produce unique marketplace versions, removing VS Code extension publish collisions
- substrate: Security — bump lodash to 4.18.1 (prototype pollution and code injection fixes)
2026-04-09: substrate v2.220.0
- substrate: Bump ELPS to v1.47.1 with LSP metadata enrichment — richer diagnostic related-information, hover ranges, completion details, workspace symbol context
- substrate: Normalize file paths for symlink-safe duplicate-definition checks
2026-04-09: elps v1.47.1
- lsp: Richer symbol metadata and normalized file paths in the language server
2026-04-03: substrate v2.219.0
- substrate: Bump ELPS to v1.47.0 with macro expansion and analyzer fixes — workspace-defined macros expand at analysis time, MCP diagnostics perform cross-file symbol resolution
- substrate: Eliminate false positives for bare
elseincond, quoted-symbol lambdaset, and files withoutin-package(inherit from workspaceDefaultPackage)
2026-04-03: elps v1.47.0
- analysis: Static analysis expands user macros, so symbols that macro templates introduce resolve correctly
- analysis: Workspace macros load in the same order as the runtime
load - lint: Fix: false positives for
condelse clauses,set,macroletand thread forms - mcp: MCP diagnostics resolve symbols across files
2026-04-01: substrate v2.218.0
- substrate: Bump ELPS to v1.46.2 with quasiquote template reference tracking — cross-file references from quasiquote templates no longer flagged as unused
- substrate: Go-to-definition and completion now work for non-exported qualified symbols (
pkg:internal-fn)
2026-04-01: elps v1.46.2
- lint: Fix: symbols in quasiquote templates count as references, and qualified symbols resolve against all definitions of a package
2026-03-31: elps v1.46.1
- elps: Maintenance release; no change to the language or library.
2026-03-28: substrate v2.217.0
- substrate: Bump ELPS to v1.46.0 with major LSP improvements — cross-file use-package resolution, load-tree package inference for bare files, cross-file unused-function detection
- substrate: Hover docs for
unquote,unquote-splicing,condition,&rest,&optional,&key,else - substrate: Unused variables and functions render with faded text (DiagnosticTag.Unnecessary); undefined symbols inside user-defined macro bodies lowered to warning severity
- substrate: Suppress parameter-shadows-builtin/special-op warnings for common parameter names (
expr,car,map)
2026-03-28: elps v1.46.0
- analysis: A bare file gets its package from the
main.lispload tree.use-packageresolves across files - lint: Diagnostics have end positions, so editors go to the correct range. Unused functions are found across files. Shadowing warnings for parameters that shadow builtins are gone
- lsp: Hover shows documentation for language keywords
2026-03-27: substrate v2.216.0
- substrate: Skip
build/,_*directories, andshirocore.lispduring workspace scanning — resolves "Workspace file limit reached" warning on large phylums - substrate: Add
--excludeand--max-filesflags toshirotester lspfor custom workspace scan configuration
2026-03-27: elps v1.45.0
- lint: New
--includeflag limits analysis to listed directories. Workspace scans skipbuildand directories that start with_
2026-03-26: substrate v2.215.0
- substrate: Link VS Code extension version to substrate release tags (single source of truth for versions)
- substrate: Publish SNAPSHOT tags as VS Code marketplace pre-release extensions
2026-03-25: substrate v2.214.0
- substrate: Release the Substrate VS Code extension — syntax highlighting for ELPS with substrate-specific forms (
defendpoint,route-success,route-failure), LSP viashirotester lsp, DAP debugger viashirotester debug, zero-dependency install with bundledshirotesterbinary - substrate: Add
shirotester fmtcommand for formatting ELPS source files - substrate: Bump ELPS to v1.44.0 with preserve-params minifier — LSP now shows human-readable parameter names instead of minified identifiers
2026-03-25: elps v1.44.1
- vscode: The extension highlights the
#^shorthand likelambda
2026-03-25: elps v1.44.0
- minifier: New
--preserve-paramsflag keeps parameter names - vscode: F5 starts a debug session without a
launch.json - parser: Quote, function reference and unbound forms take the location of their prefix token, which fixes inlay hint positions
2026-03-25: elps v1.43.0
- vscode: Platform-specific extension packages include the
elpsbinary
2026-03-24: substrate v2.213.0
- substrate: Add
pvtdata_health_checkendpoint for private data reconciliation monitoring after snapshot restore - substrate: Add
pvtdata_set_health_check_sentinelendpoint for legacy chain sentinel configuration - substrate: Auto-write default sentinel to
"private"PDC on phylum init/update - substrate: Add
docs/shirocore-endpoints.md— comprehensive reference for all shirocore built-in endpoints - substrate: Bump
google.golang.org/grpcto v1.79.3 (critical CVE fix)
2026-03-24: elps v1.42.0
- vscode: The VS Code extension, published as
LutherSystems.elps-lang, adds a language server client, a TextMate grammar and language configuration - lsp: The language server loads the standard library and shows hover docs for special operators and imported symbols. Fix: the nolint code action uses the correct check name
2026-03-21: substrate v2.212.0
- substrate: Pin elps to v1.41.0 with MCP server improvements
- substrate: Add shirotester MCP tools:
eval,test,doc,format,lint,help - substrate: Wire
WithEnvFactoryinto shirotester MCP for isolated shiro environments - substrate: Fix 24 MCP server issues (path resolution, pagination, severity filtering, structured errors)
2026-03-21: substrate v2.211.0
- substrate: Bump ELPS to v1.40.0 with full LSP parity and
duplicate-definitionanalyzer - substrate: Add
shirotester analyzecommand with substrate-aware performance analysis (PERF001-004) - substrate: Embed ELPS MCP server in shirotester (
shirotester mcp) - substrate: Shirocore migration phases 8-9: remove ELPS wrappers, eliminate LVal overhead
- substrate: Bump Go to 1.25 across all CI workflows and build images
- substrate: Replace
prepare-shirocore.shwith Go tool using elps minifier API
2026-03-21: elps v1.41.0
- mcp: The MCP server adds
format,lint,doc,testandevaltools with structured errors
2026-03-21: elps v1.40.0
- lint: New
duplicate-definitioncheck. The LSP reports duplicate definitions across files - lsp: Workspace indexing is more robust: file and document size limits, deterministic resolution and diagnostics that match the document version
- lint:
Excludesapplies to workspace scans
2026-03-20: buildenv v0.0.96
- General: Go 1.25.8 and Alpine 3.22
- build-go, build-godynamic, build-java, build-js: Fix
make staticimage builds inside the containers. They usedocker buildagain, because the containers do not have the buildx plugin
2026-03-18: substrate v2.210.0
- substrate: Add
shirotester analyzecommand with SARIF, Mermaid, and baseline output formats - substrate: Roll out shirotester analyze CI for automated analysis on PRs
- substrate: Add DAP debugger support with
shirotester debugcommand - substrate: Upgrade ELPS to v1.39.0 with full LSP + DAP integration
- substrate: Migrate deprecated ELPS eval calls to context-aware variants
- substrate: Add ELPS runtime documentation for 500+ symbols with CI gate
2026-03-17: elps v1.39.0
- mcp: New
elps mcpcommand starts an MCP (Model Context Protocol) server for ELPS tools such as search, symbols and diagnostics
Details: elps v1.39.0 release.
2026-03-13: elps v1.38.0
- minifier: Fix: minification keeps package-qualified, exported and macro-generated symbols correct, and respects package boundaries
- minifier: Embedders can register custom definition forms for analysis and minification
2026-03-13: elps v1.37.0
- analyze: Suppress a single rule in performance analysis. A cycle suppression on any member applies to the cycle
2026-03-13: elps v1.36.0
- minifier: New
elps minifycommand renames identifiers with scope awareness and writes a symbol map - analyze:
elps analyzetakes file excludes
2026-03-12: elps v1.35.0
- analyze: Performance analysis writes SARIF v2.1.0 and Mermaid output
2026-03-10: elps v1.34.0
- analyze: Performance analysis detects N+1 patterns, where a call inside a loop multiplies cost
2026-03-10: elps v1.33.0
- analyze: New
elps analyzecommand finds performance problems from the call graph (rules PERF001 to PERF004)
2026-03-03: elps v1.32.0
- elps: New
elps doc --jsonflag writes machine-readable documentation - lsp: New selection range, linked editing, document highlight, inlay hints and watched-file support. Go to definition on a builtin opens a virtual document
- debugger: Debugger launch configuration is more robust and can skip builtins when stepping
2026-03-01: elps v1.31.0
- lsp: References, call hierarchy and rename work across files
2026-02-27: elps v1.30.0
- lsp: New code actions, folding ranges, semantic tokens, call hierarchy and workspace symbol search
- debugger: Change a variable's value while paused
2026-02-27: elps v1.29.1
- lsp: Fix: hover for some Go builtins, signature help for user functions and a crash in workspace indexing
2026-02-27: elps v1.29.0
- elps: New tree-sitter grammar for ELPS, with Go bindings
- lsp: Fix: hover and completion for package-qualified symbols
2026-02-27: elps v1.28.0
- debugger: The debug server has a built-in
/helpcommand
2026-02-27: elps v1.27.0
- lsp: Fix: hover, completion, diagnostics and duplicate results. Workspace scans include the root directory when the path is
.
2026-02-26: elps v1.26.0
- lsp: New
elps lspcommand starts a Language Server Protocol server with diagnostics, hover, definition, references, completion, symbols, signature help and formatting - parser: The parser recovers from errors, so the LSP can analyze incomplete code
- debugger: Embedders can add slash commands to the debug console
Details: elps v1.26.0 release.
2026-02-26: elps v1.25.0
- lisp: Evaluation takes a Go
context.Contextand supports a step limit, so a host can cancel or bound a run - debugger: Variables page through large values and filter sorted maps by regex. Step-into works at the expression level
2026-02-26: elps v1.24.1
- debugger: Fix: bare expressions in the debug REPL evaluate in the paused scope. A new debugging guide is available with
elps doc --debug-guide
2026-02-26: elps v1.24.0
- debugger: New interactive debug REPL in the terminal
2026-02-26: elps v1.23.1
- debugger: The debug console completes names and shows their docstrings
2026-02-26: elps v1.23.0
- debugger: New line stepping, smart step-into targets, step-into for macro expansions and evaluation of more than one expression
- debugger: Embedders can add custom variable scopes
- debugger: Fix: the debugger respects the client's
stopOnEntrysetting, and file loads use the correct file name
2026-02-25: elps v1.22.0
- debugger: Lists, maps, arrays and native values expand in the variables pane. Embedders can format native values
- debugger: New hit count breakpoints, log points, watch expressions and function breakpoints. The VS Code extension can attach over TCP
- debugger: Fix: step-out from a function in tail position, and a deadlock when evaluating while paused
- lisp: Fix: a data race in
Package.Exports
2026-02-24: elps v1.22.1
- debugger: New
SetSourceLibrarymethod on the debugger engine for embedders
2026-02-23: elps v1.21.0
- debugger: New
elps debugcommand starts a Debug Adapter Protocol (DAP) debugger over TCP or stdio. It works with VS Code, Neovim, Zed, JetBrains, Helix and Emacs - debugger: Line, conditional and exception breakpoints, step into, over and out, variable inspection and evaluation while paused
- debugger: The debugger adds no overhead when it is not attached
Details: elps v1.21.0 release.
2026-02-16: elps v1.20.0
- elps: Upgrade note:
elps runandelps replconfineload-fileto the working directory by default. Absolute paths and..are refused. Use--root-dirto set a different root - lisp: Security: parser depth and macro expansion depth are limited, and allocation limits are enforced, so bad input cannot overflow the stack
- lisp: Go panics become errors. Upgrade note: the Go function
ErrorAssociatereturns*LVal - lisp: Fix: sorted map copy and equality, and a symlink race in source loading
2026-02-13: elps v1.19.2
- lisp: Macros defined with
defmacrocarry docstrings. A documentation guide is available
2026-02-12: substrate v2.209.0
- substrate: Upgrade svc to v0.15.0
- substrate: Upgrade elps to v1.19.2 with inline macro docstrings
- substrate: Add ELPS runtime documentation for 477 symbols across 34 packages
2026-02-12: substrate v2.208.0
- substrate: Expose OpenTelemetry tracing spans in mock mode (substratehcp plugin)
- substrate: Enable per-request debug logging when tracing is active
- substrate: Add @trace annotations to router JSON-RPC deserialization functions
- substrate: Add elpspath v2 with positional-arg path operations
- substrate: Fix def-migration-ctx idempotency and add recursive execution
- substrate: Upgrade elps to v1.19.1 with semantic lint integration
- substrate: Add ELPS runtime docs for elpspath package and all builtins
2026-02-12: elps v1.19.1
- lisp: Fix: standard library package loaders restore the previous package
2026-02-12: elps v1.19.0
- lisp:
format-stringis rewritten as a single-pass scanner. It supports positional parameters and fixes formatting bugs - lint: New
--fail-onflag sets the severity that gives a non-zero exit code. Fix: false positives fornolintwith semantic checks
2026-02-12: elps v1.18.0
- lint: Fix: false positives for
handler-bindcondition types and for local bindings that shadow a function - elps: Embedders can reuse the
lintanddoccommands in their own CLI
2026-02-12: elps v1.17.2
- lint: Fix:
exportbeforedefun, and the(expr ...)prefix lambda, are recognized
2026-02-12: elps v1.17.1
- elps: Maintenance release; no change to the language or library.
2026-02-11: elps v1.17.0
- lint: New semantic checks with cross-file workspace analysis:
undefined-symbol,unused-variable,unused-function,shadowinganduser-arity. Use--workspace=.to turn them on - lint: New
unused-nolintcheck reports stale suppression comments - lint: Embedders pass their package registry, so lint sees Go-provided symbols. Embedders can check for missing documentation
- parser: Tokens have end positions, diagnostics have severity and parse errors are structured, as a base for editor support
Details: elps v1.17.0 release.
2026-02-09: elps v1.16.14
- elps: The REPL has persistent history, tab completion, formatted error output and
--json,--batchand--evalflags - lisp: Security: file access can be confined to a root directory,
string:repeatandmake-sequencebound allocations and the call stack has a default depth limit - lisp: Fix:
exportwith a list argument,insert-indexwith a negative index,handler-bindcleanup anduse-packagewith more than one argument - lint: New
unnecessary-progncheck and--excludeflag forlintandfmt - lisp: Faster symbol resolution and fewer allocations for
nil,trueandfalse
2026-02-08: elps v1.16.13
- lisp: New
rethrowbuiltin re-raises an error inhandler-bindand keeps its stack trace
2026-02-08: elps v1.16.12
- lisp: All builtins, operators, macros and standard library functions have docstrings. New
defconstmacro.elps doc -llists packages - lisp: Errors render as annotated source snippets with column numbers, and the parser reports mismatched brackets
- lint: New
cond-missing-elseandquote-callchecks. Each diagnostic has a hint and anolintsuggestion - lisp: Fix: macro expansion source locations, and user-registered builtins replaced by language copies
2026-02-07: elps v1.16.11
- lint: New
elps lintcommand runs static analysis on ELPS source. Suppress a finding with; nolint - formatter:
elps fmt -llists files that need formatting and exits non-zero
2026-02-07: elps v1.16.10
- formatter: New
elps fmtcommand formats ELPS source
2026-01-21: substrate v2.207.0
- substrate: Fix union range pagination duplicate keys
- substrate: Fix memory leak in shirotester isolation mode
- substrate: Update golang.org/x/crypto to v0.47.0 to fix security vulnerabilities
2025-11-18: substrate v2.206.0
- substrate: Add union range pagination functions
- substrate: Replace elps ymd-between-dates with constant-time Go implementation
2025-11-18: buildenv v0.0.95
- build-go, build-godynamic, build-java, build-js:
make staticbuilds images withdocker buildx build
2025-11-18: buildenv v0.0.94
- build-go, build-godynamic, build-java, build-js: Docker CLI 27.3.1, which supports Docker API 1.44 and later
2025-10-07: buildenv v0.0.93
- General: Go 1.25.1, golangci-lint 2.5.0, gotestsum 1.13.0, buf 1.57.2, go-swagger 0.33.0, Azure CLI 2.77.0 and Node.js 20.19.3
- build-api: New
PROTO_PATHandSWAGGER_VALIDATION_PATHvariables set where the build finds.protoand.swagger.jsonfiles. Swagger validation runs only when swagger files exist
2025-07-24: substrate v2.205.15
- connectorhub: Add MCP connectors
2025-07-14: substrate v2.205.14
- connectorhub: Fix connector casing
- connectorhub: Add test CLI command
2025-07-03: elps v1.16.9
- elpstest: The test runner has a setup hook and a close method. Benchmarks do not count setup time
- lisp: Fix: a panic in error handling
2025-06-24: substrate v2.205.13
- substrate: Add general mock settings
- connectorhub: Add Luther connectors
2025-06-23: substrate v2.205.12
- connectorhub: Fix connectorhub protos and add rich connector annotations
- connectorhub: Add new and remaining connector annotations, enums, categories, icons, and logos; update connector keys, config, and category order; ensure consistency in naming and file conventions
- connectorhub: Fix typos, indentation logic, and comments; update README
- substrate: Attempt to fix shirotester unit-test race, memory leak, isolation, and shared mode
2025-05-02: buildenv v0.0.92
- General: Go 1.24.2
2025-05-02: buildenv v0.0.91
- General: Go 1.24.1, golangci-lint 2.0.2, gotestsum 1.12.1, buf 1.50.1, Azure CLI 2.70.0, AWS CLI 2.25.5 and Node.js 20.19.1
2025-04-29: substrate v2.205.10
- substrate: Do not create profiler when no trace
- connectorhub: Add unimplemented connectors
2025-03-31: substrate v2.205.9
- substrate: Add dynamic elps filtering option
- connectorhub: Add ability to test connector connection
2025-03-21: substrate v2.205.8
- substrate: Upgrade
x/netdependencies - substrate: Add range query pagination
- migrations: Add ctx migration support
2025-02-26: buildenv v0.0.90
- General: Go 1.23.6, Alpine 3.21, golangci-lint 1.63.4, gotestsum 1.12.0, buf 1.48.0, go-swagger 0.31.0, Azure CLI 2.67.0 and AWS CLI 2.22.28
- build-js: Node.js 20.18.3
2025-02-14: substrate v2.205.7
- substrate: Disable write polling by default
- connectorhub: Add connector lib
2024-11-21: buildenv v0.0.89
- General: Go 1.23.3, buf 1.47.2, Azure CLI 2.66.0 and AWS CLI 2.21.3
2024-10-31: substrate v2.205.6
- shiroclient: Expose commit block number and max sim block number to SDK
2024-11-26: Luther Auth v4.7.6
- General: Support Auth0
- General: Upgrade go dependencies
- General: Fix open redirect vulnerability by introducing
AUTH_OAUTH_VALID_FRONTEND_REDIRECT_URLSandAUTH_OAUTH_VALID_CALLBACK_URLSenvironment variables - General: Support
frontend_redirect_urlparameter in/v1/auth/oauth_login
2024-10-29: substrate v2.205.5
- substrate: fix target peers
2024-10-23: substrate v2.205.4
- substrate: improve build pipeline
2024-10-22: substrate v2.205.3
- substrate: upgrade go dependencies
- shiroclient: expose target peers on cli
2024-09-06: substrate v3.0.0
- substrate: Cut from a side branch off v2.205.2, not from the main release line — the shim upgrade and build changes below were also carried into v2.205.3, while the key-limit work is exclusive to this tag and was not carried into later v2 releases
- substrate: Upgrade the Hyperledger Fabric Go chaincode shim, cleanly separating the substrate and shiroclient packages and resolving a proto namespace collision
- substrate: Key metrics refactored to add a per-transaction key limit with a dedicated key-limit error; the limit is disabled for migrations
- substrate: Docker Compose is no longer required for local builds; buildenv and Fabric images bumped
2024-08-01: substrate v2.205.2
- substrate: Improve block cache logging, and recording of trace requests
2024-07-29: buildenv v0.0.88
- nginx-frontend: Use the base image's default entrypoint
2024-07-27: buildenv v0.0.87
- nginx-frontend: Use the latest nginx base image
2024-07-26: buildenv v0.0.86
- nginx-frontend: Publish the image for amd64 and arm64
2024-07-24: substrate v2.205.1
- shiroclient: Add missing block cache optimization
- substrate: Add initial profile guided optimization (PGO) to substrate
2024-07-23: buildenv v0.0.85
- General: Go 1.22.5, golangci-lint 1.59.1, buf 1.35.0, Azure CLI 2.62.0 and AWS CLI 2.17.10
- General: Remove the
build-goextraimage. Use build-go or build-godynamic
2024-07-15: substrate v2.205.0
- shiroclient, substrate: Add prometheus metrics to expose substrate version
- shiroclient, substrate: Support arm64 architecture
2024-06-21: substrate v2.204.4
- shiroclient: Fix dependent transaction waiting off-by-one bug when checking peer block height
2024-06-10: substrate v2.204.3
- shiroclient: Add support for WithoutTargetPeers
2024-06-10: substrate v2.204.2
- substrate: Fix sideDB statedb:purge fail over when fabric 2.5 channel config not enabled
2024-06-04: substrate v2.204.1
- shiroclient: Fix license init logic
2024-06-04: substrate v2.204.0
- shiroclient: break out prometheus timing metrics by endpoint
- substrate: add simulation time prometheus metric by endpoint (
substrate_tx_sim_dur) - substrate: add key count prometheus metrics by endpoint (
substrate_tx_keys)
2024-05-16: substrate v2.203.0
- shiroclient: add demo mode for easy
sandboxsetup
2024-05-13: substrate v2.202.0
- shiroclient: fix panic when block cache disabled
2024-04-18: substrate v2.201.0
- substrate: lazy load elps packages
- shiroclient: fix mem leak in metrics
- shiroclient: add block puller
- shiroclient: Add license digest cache
- shirocore: remove VBC
2024-03-29: buildenv v0.0.84
- General: Go 1.22.1, golangci-lint 1.57.2, buf 1.30.0, Azure CLI 2.58.0 and AWS CLI 2.15.31
2024-03-29: elps v1.16.8
- lisp: Struct layouts are optimized to use less memory
2024-03-29: elps v1.16.7
- elps: Build with Go 1.22
2024-03-26: substrate v2.200.0
- fabric-network-builder: Add external domain, SANS support
- shircore: update protobuf to v1.33.0
2024-03-05: substrate v2.199.0
- shiroclient: Fix blockcache dep tx waiting
- shiroclient: Add shiroclient-gw opt to disable write polling by default
- shiroclient: Add WithTargetEndpoints to select peers for endorsement
2024-03-03: substrate v2.198.0
- substrate: improve
elpsvm pre-heater for faster tx procesing - shiroclient: use peer discovery on commit fallback
- plugin: support
CSPRNGin local tests
2024-02-24: buildenv v0.0.83
- build-godynamic: Fix the Azure CLI install
2024-02-15: substrate v2.197.1
- substrate: bump deps
- shiroclient: use
otelhttphttp server for gateway
2024-02-14: buildenv v0.0.82
- General: Go 1.21.7, Alpine 3.19, golangci-lint 1.56.1, buf 1.29.0, Azure CLI 2.57.0 and AWS CLI 2.15.19
2024-02-12: substrate v2.197.0
- substrate: add ratelimiter
- shiroclient: fix span tree
- substrate: add profile tracing to
defendpoint - substrate: improve tracing support
2024-02-10: elps v1.16.6
- profiler: Trace spans include anonymous functions and better source locations, with shorter span names
2024-02-05: substrate v2.196.0
- shiroclient: fix race condition on commitment
- substrate: make preheat workers configurable, revert preheat cache size change
- substrate: add
elps doctrace filters - substrate: add better context threading
- substrate: improve tracing support
2024-01-31: elps v1.16.5
- profiler: New span labeler sets custom names for trace spans
2024-01-09: substrate v2.195.0
- substrate: upgrade
elpsto 1.64.4 - shiroclient: add max retries option
- externalcc: fix
chaincode-as-a-service
2024-01-04: substrate v2.194.0
- substrate: Improve tracing support (move from opencensus to otel)
- substrate: Bump pre-heater default size
- substrate: Internal refactor of library paths
- substrate: Update dependencies
- shiroclient: Improve chaincache logic
2024-01-03: elps v1.16.4
- profiler: New skip filter excludes functions from profiles. Fix: a panic in the profiler
2023-12-18: elps v1.16.3
- lisp: Environments write to the configured stderr. The REPL can be tested from Go
- elps: Dependency updates
2023-12-11: buildenv v0.0.81
- build-go, build-godynamic:
make staticbuilds no longer need VCS information to read the module path
2023-12-06: buildenv v0.0.80
- build-go, build-godynamic:
make staticbuilds Go binaries without CGO
2023-12-04: substrate v2.193.0
- shiroclient: Add shiroclient block and transaction (chaincache) cache to reduce waiting times
- shiroclient: Improve shiroclient retry logic
- shiroclient: Add support for DependentBlock
- shiroclient: Improve context canceled handling
- shiroclient: Support WithPhylumVersion
2023-12-01: buildenv v0.0.79
- General: Go 1.21.4, Alpine 3.18, golangci-lint 1.55.2, gotestsum 1.11.0, buf 1.28.1, go-swagger 0.30.5, Azure CLI 2.54.0 and AWS CLI 2.14.5
- General: Git accepts mounted repositories that another user owns
- General: Remove the Bitbucket private module settings
2023-11-15: buildenv v0.0.77
- General: Fix the Git URL rewrite rules for private GitHub modules
2023-11-13: substrate v2.192.3
- shiroclient: optimize wait logic to avoid redundant waits
2023-10-31: substrate v2.192.2
- buildpack: support HLF2.5 binaries
2023-10-27: substrate v2.192.1
- shiroclient: reduce default commit timeout to 3s
- shiroclient: improve context canceled logging
2023-10-25: substrate v2.192.0-fabric2.2
- substrate: Fabric 2.2 build of v2.192.0 — adds the Fabric 2.2.13 artifacts for networks still on the 2.2 line
2023-10-23: substrate v2.192.0
- shiroclient: fix retry backoff
2023-09-18: buildenv v0.0.76
- General: Extend private GitHub module access for Go builds
2023-09-05: substrate v2.191.0
- shiroclient: make client connection keep alive (platewarmer) optional (client.plate-warmer = false)
- substrate: support purge of private data on HLF2.5
- externalcc: add pprof endpoint
2023-08-14: substrate v2.190.1
- shiroclient: do not error log OK errors
- shiroclient: reduce verbosity of INFO messages
2023-07-31: buildenv v0.0.75
- build-js: Node.js 20.5.0
2023-07-26: substrate v2.190.0
- shiroclient: improve context canceled error handling
- shiroclient: improve error logging
2023-07-26: buildenv v0.0.74
- build-go-alpine: Add an SSH client, so Go can fetch private modules over SSH
2023-07-25: buildenv v0.0.73
- build-go-alpine: Support private GitHub modules for Go builds
2023-07-19: substrate v2.189.0
- private library: add support for skipEncodeTx optimization
2023-07-19: buildenv v0.0.72
- General: Extend private GitHub module access for Go builds
2023-07-18: substrate v2.188.0
- upgrade: elps to 1.16.2
2023-07-17: elps v1.16.2
- profiler: New OpenTelemetry tracing provider
- elps: Build with Go 1.20
2023-07-13: substrate v2.187.0
- update: tar artifact permissions
2023-07-13: substrate v2.186.0
- upgrade: golang to 1.20.4
- upgrade: buildenv to v0.0.67
2023-07-13: substrate v2.186.0-fabric2
- substrate: Fabric 2.x build of v2.186.0, with the same changes
2023-07-11: buildenv v0.0.71
- General: Improve support for private GH repos
2023-07-10: buildenv v0.0.70
- General: Add support for luther github repos
2023-06-08: buildenv v0.0.69
- General: Support private github repos
2023-06-08: buildenv v0.0.68
- General: Bump awscli to 2.11.26 and deps
- General: Update github host keys
2023-05-18: buildenv v0.0.67
- General: Use new bitbucket host keys
2023-05-05: substrate 185.0-fabric2
- fabric network builder: Update dependencies
2023-05-05: substrate 184.0-fabric2
- All services: Use golang 1.20
2023-05-03: buildenv v0.0.66
- Java: Use alpine 3.16
2023-05-02: buildenv v0.0.65
- CI: Fix dockerhub multi-arch publish
2023-05-02: buildenv v0.0.64
- CI: Fix CI publish
2023-05-01: buildenv v0.0.63
- CI: Fix CI on github
2023-05-01: buildenv v0.0.62
- General: Move to github
- Golang: Update go to 1.20.3, alpine to 3.17
2023-04-28: elps v1.16.1
- elps: Build with Go 1.20.3 and update
golang.org/x/textto v0.3.8
2023-04-27: buildenv v0.0.61
- API: Upgrade
bufto 1.17.0
2023-03-27: substrate 2.183.0-fabric2
- shiroclient gateway: Improve peer selection prioritization
- shiroclient gateway metrics: Avoid panic on missing license file
2023-03-03: buildenv v0.0.60
- Godynamic: Fix awscli versions
- Golang: Update go to 1.20.1, golangci-lint to 1.51.2, awscli to 2.11.0
2022-12-01: substrate 2.182.0-fabric2
- shiroclient gateway: Improve logging and tx retry logic
2022-11-02: substrate 2.181.0-fabric2
- shirotester: Fix
mxfsnapshot RNG re-use
2022-10-20: substrate 2.180.0-fabric2
- shirocore: Add
base32library (encode/decode)
2022-10-20: substrate 2.179.0-fabric2
- shiroclient metrics: Improve retry for license metrics collection
2022-09-02: buildenv v0.0.59
- Golang: Upgrade golangci-lint
2022-08-20: substrate 2.178.0-fabric2
- push proxy: Make pushproxy docker image public on dockerhub
2022-08-16: substrate 2.177.0-fabric2
- substrate: Support audience (
aud) array JWTs
2022-08-08: substrate 2.176.0-fabric2
- shiroclient gateway metrics: Improve license metrics collection
2022-08-04: buildenv v0.0.58
- Golang: Support
GO_BUILD_EXTRA_FLAGS
2022-07-26: substrate 2.175.0-fabric2
- shiroclient: Add genesis block hash as tag on metrics; identifies environment together with license digest (already present as tag), which identifies which customer/client is sending metrics.
2022-07-20: substrate 2.174.0-fabric2
- shiroclient: Add metrics reporting block height and server status
2022-07-08: substrate 2.173.0-fabric2
- shirocore: remove performance improvement cache that was added in substrate 2.172.0-fabric2 release due to new bug introduced reading only the first toset when iterating a tomulset
2022-06-22: elps v1.16.0
- elps: Maintenance release; no change to the language or library.
2022-06-21: buildenv v0.0.57
- Golang: Use golangci-lint for static checks
2022-06-09: substrate 2.172.0-fabric2
- shirocore: performance bug fix concerning storage-toset-next-iters & storage-toset-next-iter-fill-page duplicate iteration
- golang: bump golang to 1.16.15
2022-06-06: buildenv v0.0.56
- Golang: Update go to 1.18.3
2022-06-06: buildenv v0.0.55
- godynamic: fix aws-cli install
- js: add better support for
aws helpcommand
2022-06-03: buildenv v0.0.54
- godynamic: fix azure-cli install
- js: include python for
node-gypsupport
2022-05-26: buildenv v0.0.53
- go-static: use alpine, remove TINI vars
2022-05-26: buildenv v0.0.52
- internal: CI/CD release improvements
2022-05-25: buildenv v0.0.51
- internal: major changes to facilitate migration to github and circle CI
- multi-architecture: add multi-arch builds for amd64 and arm64
- api: remove
prototool, addbuf - go: add
staticchecktool - go: add
jqtool - all: fetch certificates from official
ca-certificatespackage - all: fetch time zone data from official
tzdatapackages - debian: do not include suggested packages by default
- go-extra: use ubuntu 20.04
- static go builds: include build tags for time zone data
2022-04-28: buildenv v0.0.50
- godynamic: upgrade azcli to 2.35.0
2022-04-25: elps v1.15.0
- elps: New
elps doccommand and REPLhelppackage show docstrings for functions and packages - elps: Build with Go 1.17 and update dependencies
2022-04-01: substrate v2.171.0-fabric2 Release
- substrate: fix buildpack for external chaincode
2022-03-31: substrate v2.170.0-fabric2 Release
- buildenv: bump to 0.0.49
- hyphae: use public github for libhandlebars
- shiroclient: add dependent TX ID logging
- shiroclient: bump shiroclient-sdk-go to
ac2085246995
2022-03-23: buildenv v0.0.49
- alpine: bump alpine to 3.15
- golang: bump golang to 1.16.14
2022-03-17: buildenv v0.0.48
- alpine: remove old patches to fix security updates which are superfluous
2022-03-11: substrate v2.169.0-fabric2 Release
- shiroclient: improve retry logic for handling transaction commit timeouts
- substrate: fix bug in
decimal-add-money - substrate: remove
set-nowfunction from utils - libmxf: release 0.0.4 mxf npm package with decryption bugfix
2022-02-25: buildenv v0.0.47
- godynamic: add curl
2022-01-26: substrate v2.168.0-fabric2 Release
- shirocore: add list support in
elpspath - shiroclient: improve verbose mode (-v)
2022-01-10: substrate v2.167.0-fabric2 Release
- fabric network builder: Compatibility changes for use in containerized setups
- mxf: add public npm package for decoding mxf encrypted data off-chain
- substrate: minor bug fixes
2021-12-10: buildenv v0.0.46
- api: remove api swagger bindata generation
- godynamic: fix azure cli build
2021-11-18: substrate v2.166.0-fabric2 Release
- shirocore: add
mxf-private-exportfunction - substrate: push
luthersystems/buildpackto dockerhub for external chaincode initialization
2021-11-12: substrate v2.165.0-fabric 2 Release
- substrate: fix chaincode tar build issue introduced in v2.164.0-fabric2
2021-11-08: substrate v2.164.0-fabric2 Release
- hyphae: add to-int helper to libhandlebars to convert types to int.
- substrate: add external chaincode builds (dockerhub: luthersystems/substrate).
2021-10-15: substrate v2.163.0-fabric2 Release
- shirocore: Allow
cc:creatorininitendpoint in mock mode - shirocore: Fix
find-posandfind-pos-cmpbug to correctly return-1when the index is not found.
2021-09-23: substrate v2.162.0-fabric2 Release
- substrate: Add env variable SUBSTRATE_LOG_LEVEL to change log level
2021-09-14: buildenv v0.0.45
- go-alpine: use static binary dependencies
2021-09-13: buildenv v0.0.44
- service-base-alpine: update artifacts
- alpine: apply security updates
- go-alpine: remove
GOPRIVATEconfig
2021-08-23: buildenv v0.0.43
- go-alpine: add go-alpine image
2021-07-27: buildenv v0.0.42
- go: Change user and owner of built artifacts using environment variables
2021-07-21: elps v1.14.1
- json: JSON encoding escapes the HTML-unsafe characters
&,<and>
2021-07-19: substrate v2.160.0-fabric2 Release
- hyphae: Add
to-strhelper to libhandlebars - hyphae: Add
GetPipeHTTPtos3package to retrieve stream of bytes. - hyphae: Add cookie retrieval interface for magic links
2021-07-01: buildenv v0.0.41
- godynamic: Use alpine 3.13 as a stable base.
2021-06-23: substrate v2.159.0-fabric2 Release
- elps: Upgrade to v1.14.0.
- fabric network builder: Add
cert_expiressubcommand to list expiration dates of certificates - fabric network builder: Add mutli-step certificate generation process for improved customizaiton (make generate-template, make generate-assets).
- buildenv: Upgrade to v0.0.40.
2021-06-16: buildenv v0.0.40
- api, go, godynamic, goextra: Cleanup build tags into common configuration.
- api: Allow including protos in custom directories.
2021-06-09: elps v1.14.0
- json: Use custom json encoder for improved performance.
- json: Reduce allocations during map serialization.
- types: Add ability to write user-defined data types.
- types: Update
libschemato support user-defined data types. - macros: Fix bugs related to macro expansion.
2021-06-09: buildenv v0.0.39
- api. go, godynamic, goextra: Properly parameterize go versions.
- api: Fix typo in make targets and add missing make targets.
2021-05-26: buildenv v0.0.38
- all: Continue to push images to ECR for backwards compatibility.
2021-05-25: buildenv v0.0.37
- api, go, godynamic, goextra, java, js, swaggercodegen: Use tini for signal handling in the default image entrypoint.
- api. go, godynamic, goextra: Upgrade to go1.16.4.
2021-05-14: substrate v2.158.0-fabric2 Release
- fabric network builder: Add
fnb-extendcommand to generate certs for new orgs. - fabric network builder: Use version 2.2.0 of fabric cryptogen (names private keys
priv_skamong other changes). - fabric network builder: Use client authentication (mutual TLS).
- shirocore: Fix
set-exception-wrappedto properly wrap exception messages and re-throw them. - shiroclient gateway: Add additional log lines to help debugging.
- shiroclient gateway: Retry tx simulation on chaincode 500 error, for increased resilience.
- shiroclient gateway: Move shiroclient-sdk-go to github.
2021-03-30: substrate v2.157.0-fabric2 Release
- shiroclient gateway: Improve reliability of event service connectivity.
- shiroclient: Throw phylum errors during chaincode-to-chaincode (invoke-phylum) failures.
2021-03-16: substrate v2.156.0-fabric2 Release
- shiroclient: Fix bug in internal minifer for elps symbols.
- mock substrate: Improve support for parallel go tests.
2021-03-05: substrate v2.155.0-fabric2 Release
- shiroclient gateway: Improve metrics logging during tx commit.
- shirocore: Fix bug in
tx-pre-hooksexecution, which sets up shirocore env before application code runs.
2021-03-04: substrate v2.154.0-fabric2 Release
- mock substrate: Fix mock-specific methods.
- shirocore: Fix symbol references in
def-migration-up - fabric network builder: Fix nchoose2 sample networks and Makefiles.
2021-03-01: substrate v2.153.0-fabric2 Release
- elps: Upgrade to v1.13.1
2021-02-25: elps v1.13.1 Release
- elpstest: Fix timing for $load benchmark.
2021-02-19: substrate v2.152.0-fabric2 Release
- shirocore: Fix bug in
ymddate validations
2021-02-19: substrate v2.151.0-fabric2 Release
- shirocore: Pre-load (pre-warm) phyla to improve load times
2021-02-17: substrate v2.150.0-fabric2 Release
- mock substrate: Fix concurrency bug in plugin.
2021-02-11: substrate v2.149.0-fabric2 Release
- mock substrate: Refactor internal libraries to better support hashicorp plugin.
2021-02-09: substrate v2.148.0-fabric2 Release
- mock substrate: Add healthcheck to Hashicorp plugin.
2021-02-08: substrate v2.147.0-fabric2 Release
- fabric network builder: Fix nchoose2 network generation.
2021-02-05: substrate v2.146.0-fabric2 Release
- fabric network builder: Add support for nchoose2 vanity names.
2021-02-08: buildenv v0.0.36 Release
- all: Add public docker make targets.
2021-02-03: substrate v2.145.0-fabric2 Release
- shirocore: Add jaeger support for request tracing.
- buildenv: Upgrade to v0.0.34.
2021-01-29: buildenv v0.0.35 Release
- godynamic: Add azure cli.
- js: Add azure cli.