Skip to content

Migrations

5 September 2026

13 changes:

  • Helpers::fileGetContents() fetched with TLS verification off
  • A clamped rendition was never found again, and rebuilt on every request
  • Two migrations that could fail on real data now decline instead
  • Saving a token through the model stored it in plaintext and unfindable
  • get() takes upscaling per call, so a template can fill its frame
  • An application on the legacy version ledger can say what already ran
  • crop and resample are part of a rendition's identity too
  • Maintenance mode can be raised and cleared from the console
  • migrations.auto: stop migrating on your own without disabling migrate
  • Ask a production database a question without opening a shell on it
  • The public MCP endpoint ships one tool, so it can be told from a broken one
  • The diagnostic tools can answer off the box, behind three separate scopes
  • mcp:token — one command for the credential and the client config

4 September 2026

9 changes:

  • getRelationKind() — the question to ask before a DROP VIEW
  • usage_statistics is left to whoever owns the name
  • geographic_analysis builds whether ip_address is VARCHAR or INET
  • An aggregate that already exists keeps its definition, and says so
  • migrate and migrate:status read this installation's configuration
  • When a continuous aggregate is possible, and when it cannot be
  • A migration whose statements were all rejected no longer reads as one that worked
  • createTable() puts a schema-qualified table in its schema
  • The maintenance page no longer fatals on an entry point without DS

11 August 2026

6 changes:

  • Five rolled-up views were frozen on every database without TimescaleDB
  • A model may give load() whatever parameters it needs
  • Five developer panels had been empty for years, and nothing said why
  • The rate limiter counted the proxy, and counted it badly
  • A human check that prices spam instead of pretending to detect it
  • getInstance() is a factory, and two call sites forgot

10 August 2026

16 changes:

  • pramnos init checks both Docker ports before proposing one
  • init scaffolds a working SPA — Svelte + daisyUI, Vite, Vitest and Docker
  • Files the container writes now belong to you, not to root
  • SPA follow-ups: the dev server, the site root, and the docs generator
  • The FK migration stops assuming the schema of tables it does not own
  • The scaffolded SPA now actually talks to the API
  • create:crud builds the SPA half too
  • A debug bar a SPA can actually use — and a guide for testing the front end
  • Generated CRUD gets real authorisation — and delete gets any at all
  • A SPA project gets an administration screen
  • cache:clear no longer wipes every installation sharing the backend
  • Signing in works, screens have URLs, and the SPA wears the project's colours
  • Permissions answers from whichever store the installation has
  • One permission system, available to every project with users
  • timescale:ensure — repairing hypertables on a database that got TimescaleDB late
  • The GDPR endpoints queried a table that does not exist