Skip to content

Quantum 0.21.0 ​

Added ​

  • projects/helpdesk: tickets with an attachment and e-mail to the support team and the requester — in the browser and in the console.
  • q:file action="send" (FILE-2): a page answers with an uploaded file as a download, and decides who may have it. Uploads are never static files.
  • <ui:input rows="6">, a multi-line field (UI-14). A form whose action takes a file posts multipart and draws a file input with the param's accept.
  • mail: in quantum.config.yaml (MAIL-1); host: log writes messages to the log in development. q:mail name= and onerror="continue" (MAIL-2).
  • quantum check also checks the SQL in q:agent tools.
  • "Why Quantum" page (A6), with its example tested; the docs home no longer promises mobile apps or "40+ components".

Breaking ​

  • q:mail sends through mail: in the config, and is an error without it. It read SMTP_* variables and, unless EMAIL_MOCK=false was set, printed "[MOCK] Email sent" and reported success — no application ever sent mail by default. Use ${SMTP_HOST} etc. in the config (CFG-1).
  • A message the server refuses stops the page or action (MAIL-2); it used to be an unhandled error too, but some recipients refused was reported as sent.
  • The result of q:mail is <name>_result (mail_result by default), not _mail_result.
  • q:param maxSize= is a parse error (the attribute is maxsize), and so is a maxsize that is not a size. q:file action= other than upload, delete or send is a parse error.
  • The upload result no longer has url: it pointed to /uploads/..., which was never served.

Changed ​

  • The repository is in English (EN): SPEC.md (rule IDs unchanged), the tests, the framework code, its messages and comments. Log and error texts that were Portuguese now read in English.
  • Support tiers (SUPPORT_TIERS.md, rewritten for 1.0): the tiers are Core, AI, Experimental and Laboratory. q:file, q:mail and q:transaction move to Core (SPEC rules, tests and an app in CI); q:team moves to Experimental (no rule, no proving app) and now warns once when used. The pytest markers are laboratory and isolated (were laboratorio and isolado).
  • The console's screen widget is #page (was #tela).
  • The wheel no longer ships the old FastAPI admin (quantum_admin/backend, ~2.6 MB with its 600 KB main.py). The library the .q admin uses moved to quantum_admin.core; quantum admin is unchanged. The backend stays in the repository (A4.2).
  • quantum/runtime/web_server.py (2150 lines) is split by concern: web_config (reading the config), web_html (asset extraction, htmx, hot reload), web_errors (welcome and error pages), web_lifecycle (start, banner, PID, signals). QuantumWebServer, create_app, start_server, ConfigError and _validate_config are imported from where they were.

Removed ​

  • quantum/cli/commands (new, dev, build, serve, test, lint, docs): a click CLI that the quantum command never wired, listed in the CLI docs as "future commands". The migration runner it held is now quantum.cli.migrations (quantum migrate is unchanged).

Fixed ​

  • q:transaction failed validation on every run (quantum run: "Invalid isolation level: "): the parser passed the datasource where the node expected the isolation level, and kept the level where nothing read it. An explicit datasource= never reached the executor. An unknown isolationLevel is now a parse error (DB-4).
  • quantum run refused <ui:alert variant="{...}"> (and a bound variant or position on ui:toast/ui:skeleton) as an invalid literal; the page resolves it when it renders (UI-1).
  • q:param maxsize was parsed and never checked: any size was accepted.
  • q:file action="upload" without destination failed with "empty file path"; it saves under paths.uploads.
  • <ui:form submit="..."> with fields of its own drew no button.
  • <ui:table source="{rows}"> without ui:column drew every row empty; it shows one column per field (UI-5).
  • Sending mail looked up the machine's full name on every message (socket.getfqdn): 12 s for the first message on a Windows machine.
  • The test suite's admin database was shared by every pytest-xdist worker, which failed now and then with "table ... already exists".

← 0.20.0 · All versions · 0.22.0 →

MIT Licensed · Built with VitePress