Skip to content

0.25.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 23:35
· 826 commits to main since this release

Features

  • cli: the changelog publishes an allowlist, not whatever was not denied (6a49fa53)
  • files: la route d'upload prend les octets en vol (c6f5dbee)
  • bucket: R2 et S3 televersent un flux, prouve sur workerd (8ce40ed6)
  • bucket: S3 televerse un flux dont la taille est inconnue (3c1172d8)
  • server: z.stream() rend les octets au handler, en vol (145d7e97)
  • command: stdout pour ce que produit une commande, le logger pour ce qu'elle raconte [BREAKING] (2c748fdb)
  • files: le bucket vise decide le budget de la requete (fc623115)
  • server: le plafond multipart se decide par requete, et le parseur remplace formData() (aa1405dd)
  • server: alepha/server/multipart, un parseur qui ne retient rien (aee7b577)
  • cli: un nouveau projet ne pose plus de question et naît lint-clean (24ce501c)
  • core: z.custom, l'echappatoire du passthrough type (8586916d)
  • cli: adapter lore, qui ne rend la main que quand l'app sert (89ed7a74)
  • security: l'application declare si elle est multi-tenant [BREAKING] (8c58731e)
  • users: le reset de mot de passe demande un captcha, et l'ancien flux s'en va [BREAKING] (a456d5c1)
  • logger: per-context log buffer, and breadcrumbs on the errors that need them (27246e84)
  • server: /health is part of AlephaServer, not an opt-in module [BREAKING] (de473344)
  • platform: alepha platform auth login|logout (67ef88aa)
  • cli: wire $room apps into the cloudflare build (f5c6ea4c)
  • oauth: device authorization grant (RFC 8628) (6c248482)
  • cli: deploy to Bay with alepha platform up (62a14c8c)
  • cli: emit dist/manifest.json for every build target (80353bdd)
  • websocket: configurable maxPayload on the node ws server (3ca9e032)
  • websocket: authenticate ws upgrades from the session cookie (b89c02e5)
  • websocket: surface the URL query on room connections and serve ws upgrades in vite dev (348029ad)
  • orm: filter a query by a relation's columns (f53f7c18)
  • orm: let a relational read ask for soft-deleted rows (d21733a9)
  • orm: run $relations on Drizzle's relational query builder (99949f09)
  • orm: object-shaped writes, full delegation, $repositories (f0a299b0)
  • orm: complete the $relations feature set (7121765b)
  • orm: $relations proof of concept with a fully inferred include (de3f3fa8)
  • cli: wire D1 baseline-mark reset into alepha platform db baseline mark (46d6127a)
  • cli: add d1MigrationsBaseline for the wrangler bookkeeping path (d514a1ef)
  • orm,cli: add 'alepha db baseline mark' (247d994d)
  • cli: add 'alepha db baseline create' (d89b3419)
  • orm: upgrade drizzle-orm and drizzle-kit to 1.0.0-rc.4 (e4617c46)
  • server: answer 403 for actions pruned by permissions (e5a35ea1)
  • devtools: match the v3 design across every screen (43c712ae)
  • files,bucket: replace $bucket with $storage; one bucket, prefixed containers [BREAKING] (b32fa197)
  • devtools: v1 — dark instrument panel, JSON Schema metadata, jobs [BREAKING] (04bd5596)
  • queue,scheduler: delete $queue, $consumer and $scheduler; $job is the only background primitive [BREAKING] (1107f0c4)
  • cli: one project shape for alepha init, PM detected from invoker [BREAKING] (9b9a23a0)
  • users,email,cli: close registration enumeration, CF email REST, devtools by default (f36f01f7)
  • orm,security,react: portable SQL, $owns, keyed query cache (cca4ef7f)
  • api/parameters: document a parameter, and let apps own a field (179d9cbd)
  • api/parameters: resolve the version in force at a given instant (6f6450cc)
  • websocket: add $room and RoomEngine for stateful WebSocket rooms (6c7ec940)
  • payments-stripe: embedded Connect onboarding support (3dfcc4e1)
  • websocket: Cloudflare alarm() watchdog — recover a ticking room after isolate reset (639c6bef)
  • websocket: host the RoomEngine inside the Cloudflare Durable Object (3fd6aa32)
  • websocket: $room primitive + Node hosting (tick rooms + headless coordinators) (895fa085)
  • websocket: runtime-neutral RoomEngine (state + tick loop + per-recipient send + lifecycle) (5aeadae6)
  • websocket: revive module + Cloudflare Durable Object provider (222fd03e)
  • cli: export AlephaWebSocketDurableObject through the workerd server bundle (9d6985ef)
  • cli: worker entry routes ws upgrades to room DO + exports DO class (851bf2f8)
  • cli: emit Durable Object binding + migration for websocket apps (81f496b4)
  • websocket: Cloudflare Durable Object provider + workerd module (f7ca171b)
  • websocket: AlephaWebSocketDurableObject (hibernatable room object) (52bb4c37)
  • websocket: finish handshake auth + multi-room dev warning (node) (426f8a58)
  • websocket: shared handshake auth resolver + getEndpoint contract (20eec9ee)

Bug Fixes

  • orm,core: give each transaction its own context, not one shared slot (c6274f5b)
  • security: revert the hook reorder — resolvers need the cookies [BREAKING] (29c26068)
  • security: resolve who is calling before the body is read (4d2f64fc)
  • bucket: a refusal keeps its status, and both providers give the same one (43ea7ba9)
  • api/files: a suffix is not an identity, and a default nobody honoured (05dbad3d)
  • server: the message budget bounds reading, and the walk gets closed (3fc89782)
  • server: the sender does not get to pick which field its part lands in (465a409c)
  • server: one reading of "is this multipart", not two [BREAKING] (5c7ef03f)
  • server: un champ fichier optionnel reste du multipart (cfb68951)
  • server: une route qui streame est multipart, elle aussi (3e34c07a)
  • react: la langue résolue par le serveur arrive enfin au client (ebedbacb)
  • core: une contrainte d'ordre de hook qui ne fait rien vaut moins que pas de contrainte (5890952b)
  • react: un $page peut répondre 404, $secure prévient, et @alepha/ui parle français (00cbf437)
  • cli: le CLI est teste tel que npm le livre, et huit bugs tombent avec [BREAKING] (7cd8924e)
  • cli: --hints carries a JSON document, not a 255-char label (358f07a2)
  • orm,security,server: ten defects, each reproduced before it was fixed (7b709588)
  • cli: npm needs npx, not npm run (1e4234ff)
  • cli: the Bay adapter assumed yarn (116d40c2)
  • cli: three fixes that were living only in a vendored copy (623d5ec4)
  • server: only warn about /metrics when it is actually reachable (5f414a56)
  • websocket: expose the upgrade query on cloudflare room connections (81a810fb)
  • oauth: close the three P0s in the authorization server (5df5fd9e)
  • core: resolve substituted services when injecting by name (6d2c9348)
  • websocket: keep the ws Node provider out of the workerd entry graph (53ae02d2)
  • cli: stub import.meta.url in workerd server chunks so module-scope asset URLs survive validation (8284179a)
  • cli: neutralize createRequire(import.meta.url) banners in workerd server chunks (f3ce3583)
  • platform: keep the refresh token, or a Bay login dies in 15 minutes (7d3b757d)
  • cli: honor the app vite config's publicDir in client builds (f701fd29)
  • cli: refuse to pack a database app with no migrations (9e121045)
  • react: survive a Redirection thrown by the very first render's loader (ead9fbb8)
  • bucket,email: let the host place blobs and scratch data outside the bundle (c638828d)
  • orm: let a generated column stay optional on a raw insert (7225a52e)
  • orm: make nested create atomic, and classify relational read errors (82a1cbe1)
  • orm: make SchemaToTableConfig carry column value types (fd8e03b4)
  • orm: match driver errors through drizzle rc.4's cause chain (53de81a6)
  • orm: give downstream un-baselined projects an actionable migrate error (05a88691)
  • cli: archive drizzle-kit v1 migration folders, not just flat .sql (ad92ef49)
  • cli: close the D1 anti-silence guard hole and drop dead configPath (10f9daa6)
  • cli: close the v1-layout blind spot in the DROP TABLE guard + strip (549486a7)
  • cli: teach D1 migration discovery drizzle-kit v1's folder layout (5ddd60ed)
  • cli: archive into a real directory, and check drizzle-kit v1 migrations (27de99de)
  • cli,orm: stop the D1 baseline-mark Postgres guard reading process.env (dbc69cf5)
  • orm: reset NodeSqliteProvider's connection state in close() (052e4428)
  • orm,cli: connect providers before baseline mark; correct D1 error text (481516ba)
  • orm: convert pre-rc.4 snapshots and guard the sqlite insertDefaultValues gap (5c2befed)
  • cli: let an explicit R2_BUCKET_NAME declare object storage (bb1ae42c)
  • cli: apply D1 migrations without wrangler's transaction (ae5484bc)
  • react,orm,cli: the high-value P3s, plus a dead-code sweep (14beebc6)
  • orm: stop table rebuilds from cascading child rows away (da276e3b)
  • server,orm,cli: quieter 4xx logs, bare-Error warning, contract docs (a710ebc7)
  • orm: distinct+joins guard, upsert empty SET, FK message direction (a6444133)
  • websocket: room connections in the registry, tick reentrancy, nits (b287a338)
  • core: array-of-objects decode corruption, and clear five review findings (30c26569)
  • devtools: show server-only atom values, and stop the form icons overlapping (d56e512c)
  • orm,cache: the four Cloudflare-runtime P2s (8c371742)
  • react/form,core: nested initial values, union arrays, schema docs (2b1b09e5)
  • orm: audit pass over every closed finding — one was half-applied (69958c89)
  • react: close every open react P2 (form, router, head, i18n, core) (b2300d27)
  • cli,system,datetime,mcp: seven findings (8c5e6060)
  • orm: five query, schema and migration bugs (37f6f78f)
  • server: nine findings across core, static, proxy and links (b711b7a7)
  • core: five container lifecycle bugs (9485f1d4)
  • queue,topic,retry,batch: seven silent-failure bugs (356ec50e)
  • keys: revocation could be undone by an in-flight validation (b7156601)
  • cli: nine command and build-task bugs (b623d3d4)
  • auth,cookies: five session-lifecycle bugs (b140a1b4)
  • orm: five silent data-correctness bugs (6292b79d)
  • router: backtracking match, wildcard captures, percent-encoding (069678bd)
  • server: sanitize 5xx in /api/_batch + review audit pass (3f42448e)
  • jobs,parameters: retention, sweep containment + refund ordering (CI red) (91c7f1dd)
  • security: 8 security-adjacent P2s across cli, server, crypto and keys (d7f86a1a)
  • websocket: room teardown, connection ids and cross-room frames (batch 6) (c4060482)
  • react: DX bugs in useQuery, anchors and query-only navigation (batch 5) (5914f450)
  • jobs: claim 'cancelled' before aborting the handler (CI race) (1352f016)
  • server: identity-scope HttpClient cache and in-flight dedup (0f9d9553)
  • users: stop leaking admin allowlist from public /realms/config (77eac5f6)
  • orm: scope upsert conflict-update to the caller's tenant (6eb34522)
  • react: handle cleared date/time inputs without crashing (9ab8e58f)
  • command: accept uppercase answers in ask.permission (35a80b26)
  • cli: correct db check migration hint (ef4f0046)
  • core: exit non-zero after an uncaughtException (e7632647)
  • core: return false instead of throwing in isFileLike (60312663)
  • websocket: stop zombie reconnect and off-browser setTimeout crash (cd58f731)
  • server: preserve multiple Set-Cookie headers in proxy (9aae793a)
  • datetime: catch $interval handler errors (b3a86afc)
  • datetime: correct travel() double-count and clearInterval leak (7afb6de2)
  • logger: guard JSON formatter against circular/BigInt data (cbcf3f8e)
  • system: reject signal-killed child processes (001487eb)
  • cache: don't cache undefined handler results (7741f030)
  • cache: don't wipe the container on a zero-match wildcard invalidation (5ea8f6de)
  • server: accept application/json with charset in HttpClient (cc6cdcdf)
  • server: serialize falsy handler return values (9647c548)
  • bucket: reject path traversal via fileId in LocalFileStorageProvider (91d8b2b2)
  • users: require email_verified for OAuth account auto-link (e07c2972)
  • server: reject backslash paths in validateRedirectUri (5ab247be)
  • subscriptions: guard org-less users on /subscriptions/mine/* (2d863f06)
  • cli,websocket: strip forged ws identity header, guard CF cross-room reply, carry websocketPaths in manifest (7cad000a)
  • websocket: harden WebSocketRoom message error handling, test broadcast RPC (f94430bd)
  • websocket: relative import in auth.spec to break websocket->websocket cycle; sync build-generated exports (workerd re-added by build when index.workerd.ts lands in Task 6) (69dec958)
  • websocket: add missing workerd export condition to ./websocket (2db6c77a)