September 6th, 2026

0.14.0 Release: Protected provider keys, guarded tests, faster job reads

No new actions this time. This release closes two ways an account could reach data and services outside its own space, and stops the server from running stored equations when it reads a job.

Security

  • Testing an AI provider no longer exposes the stored API key. The connection test and the model list accepted a provider identifier and an endpoint from the browser, read the stored key for that identifier, and sent it to that endpoint. Neither checked who was asking, so an account could name a provider in another space and an address of its choosing. Both now check access to the space that owns the stored provider, and an identifier that cannot be read answers the same way as one that does not exist.

  • Sending a test message through a delivery interface now requires admin access to the space. Before, any signed-in account could make the install send mail through a mail server, or issue a request to an address, that the account chose.

Reliability

  • Reading a job no longer runs its equations. 0.13.0 closed one of the two routes that did this. A second one remained, because working out whether a calculate step returns a number or text meant executing the equation. The scheduler reads every job when it starts, so one saved equation could hold the server for 36 seconds on every read of that job. Equations now run when a job is saved and when a run reaches the step.

  • The limit on equations now covers cost, not only size. Matrix multiplication, matrix powers, determinants and inverses grow faster than the result they return, so an equation whose every value sat inside the one million cell limit could still occupy the server for tens of seconds. These operations now share a budget of ten million element operations.

Platform

  • Line endings are normalised to LF across the source tree, and enforced from now on. Mixed endings turned small changes into whole-file differences and made review harder than it needed to be.

  • Publishing a release image retries a failed upload inside a time budget that fits, so all three attempts can run.