Skip to content

Releases: alepha-dev/alepha

0.27.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 19:11

Features

  • cli: replace Biome with oxlint and oxfmt (7a0d7c85)
  • api/users: show when a session was last used, not just when it started (a12f9c7f)
  • ui: draw mermaid flowchart fences as themed diagrams (5d416321)
  • orm: bound D1 queries and support the Sessions API (3522e858)
  • ui: let AlephaTable take static data (bc02a7c5)
  • ui: let AppShell style its scrolling main (3bcb86f1)
  • ui: give AlephaTable a page-size picker and a sortable-column affordance (d029589d)
  • ui: give Badge a tint variant and a tone axis (8fe26380)
  • ui: bring the epics list and the questline dialog onto the quests table's shape (761424b9)
  • devtools: run Try It as the session, and keep logs across a restart (a9c7e923)
  • ui/admin: park the built-in nav in a 1000+ band, add a dashboard at /admin (70160b7c)
  • react/head: let a meta tag carry a media query (dcb7dcf5)
  • react/router: answer browser navigations with HTML error pages (5e12817e)
  • cli: add dev.port, bind it strictly, and fix dev with CSS modules (c497b37c)
  • cli: flag secrets pushed before the last env edit, and say a deploy is needed (079940b0)
  • platform: write placeholder blobs on db export (6f3c1d39)
  • platform: honour secret: false when pushing Cloudflare bindings (18efd6dd)
  • react: give every page its own canonical URL, og:url and twitter:url (267eae33)

Bug Fixes

  • api/workflows: publish a step's AbortController before the row says running (febcafe7)
  • orm: sqlite could not introspect its own case-insensitive index (448bf6a3)
  • ui: account cards were shaved by their own scroll column (bc89c8d5)
  • ui: the settings rail's active entry matched nothing (93455af8)
  • ui: settings cards had drifted into four different edges (1b6af5f5)
  • cli: report database command failures without a stack trace (ac7d1424)
  • cli: a stray word on a leaf command was silently ignored (f1735bd8)
  • react: static assets were cached for 3.6 seconds, not an hour (5b178010)
  • ui: settings cards drew a doubled edge next to the form card (5aa7dbf6)
  • orm: sqlite schema push was silently applying nothing (02fa1661)
  • cli: stop the linter from rewriting the project's dependencies (47ac5c75)
  • devtools: render structured values as JSON, not [object Object] (fe1c8108)
  • react: stop rebuilding accumulators inside loops (8b3b9f3c)
  • websocket: decode fragmented frames instead of stringifying the list (94b63d4f)
  • react: keep parameterized pages out of sitemap.xml (a26b464f)
  • cli: make a freshly scaffolded project work under yarn and pnpm (842de36c)
  • core: read an empty env string as an absent structured value (1e84a7af)
  • platform: let the deploy name the artifact it packs (7c534a1c)
  • ui: give tooltips a classic open delay (802d97ea)
  • ui: return a stable singleton from useToast (fdb2b2a1)
  • orm,mcp: make a failed relational read diagnosable (18d70991)
  • react/router: restore scroll on back instead of jumping to the top (b95e4e12)
  • react/form: replace the literal NUL byte in useFormQuerySync with \u0000 (c7e0902c)
  • cli: frame the init wizard's questions and trim its sign-off (ac52fd6f)
  • react: show the auth slide in GettingStarted again (0daa9e51)
  • cli: honour an absolute path in alepha init (47f88c9e)
  • api/users: refuse a realm that needs codes it cannot send (74f67e98)
  • parameters: skip the ready preload under multi-tenancy (c8ce8209)
  • orm: stop paginate leaking an unhandled rejection when count scoping throws (aac3ef2f)

0.26.0

Choose a tag to compare

@github-actions github-actions released this 16 Aug 23:29

Features

  • ui: mount the account area, and fix what the back office exposed (88340abf)
  • payments: make sweep cadences configurable, default to */15 (1fa582e1)
  • ui,api: finish AutoForm's settings-card layout, and fix what adopting it exposed (356bbd0c)
  • cli: wire create-alepha to ask.choice/ask.confirm, drop dead Asker injection (302d3023)
  • command: add ask.multiChoice and the selection parser to Asker (88646ed8)

Bug Fixes

  • cli: rewrite workerd chunks through the AST, not a regex (dc6047d7)
  • ui: stop Segmented's thumb sitting one border-width off its segment (33d2b206)
  • devtools: stop an unrepresentable atom schema breaking the whole UI [BREAKING] (3c81eaba)
  • cli: make pnpm scaffolds hoist the bundled toolchain (19ef91bb)
  • ui: make the account area work inside a clipped app shell (ee539e99)
  • core,orm,cli: close the five defects a 0.25.2 release rehearsal turned up (a5d3c636)
  • orm: refuse to boot in production when entities have no migrations (3fb97ae7)
  • cli: generate a baseline migration for ORM presets at init (4cf4a445)
  • cli,react,server,ui: close the gaps a two-preset init audit turned up (6e09a2f7)

0.25.2

Choose a tag to compare

@github-actions github-actions released this 15 Aug 14:11

Features

  • core,server: read env vars from aliases, and SERVER_PORT from PORT (fe81013a)
  • api/workflows,ui: context propagation, repeat steps, cancelByKey, startEach, WorkflowTestKit (64ac6685)
  • ui: share one header-actions cluster, and give the account area a header (00b2a536)
  • cli: add --preset=saas to init (065ef43c)
  • api/workflows,ui,api/payments: resurrect the durable workflow engine, dogfooded end to end [BREAKING] (3eb1f942)
  • ui,api/users: add the account module, a user-facing counterpart to admin [BREAKING] (28bba646)
  • system: attach files to a folio and export it as a zip [BREAKING] (c2462e72)
  • ui/admin,api: name users on admin pages instead of bare UUIDs (00855755)
  • ui: address projects by slug at the URL root [BREAKING] (8222c09e)
  • analytics,ui: fold analytics into alepha/api/analytics with an admin explorer [BREAKING] (2436b61b)
  • ui/admin: "Add API key" toolbar action with one-time token reveal (718e0bb4)
  • ui/admin: open three host-page seams on the admin shell (ed797a08)
  • orm,crypto: default primary key is an app-generated UUIDv7 [BREAKING] (e241b37d)
  • ui: give every table filter select a leading icon (47986a2b)
  • system: provider parity, structured shell results, memory-default tests [BREAKING] (405f20af)
  • ui/admin: add adminPage() helper, migrate shop onto it (173ed2fe)
  • mcp: close out the module review — templates, streaming, stdio [BREAKING] (3ebcb93e)
  • ui/admin: add AdminRouter mounting the whole /admin surface (1c188417)
  • ui: add AdminLayout shell for AdminRouter (6730e02b)
  • ui/admin: add AdminRouter boot-time options atom (26cc4802)
  • ui/admin: add default export to admin-payments component (42fd23c2)
  • ui: a dropdown menu sizes to its content, not to its trigger (fc631ede)
  • platform: auto-provision Cloudflare Analytics Engine through platform up (3dbb3b96)
  • ui: one select for every list, and the count only gates the search (65baeac5)
  • ui: weld AlephaTable's pagination row into the table panel (eeb02a84)
  • analytics: the hourly rollup and prune sweep (2647e45b)
  • analytics: the Analytics Engine provider and the workerd entry (0b62aa7c)
  • analytics: the $analytics primitive and its module (a3fc9bef)
  • analytics: relational provider with raw and rolled tiers (4435d8e8)
  • analytics: derive raw and rolled tables from a dataset descriptor (53d92e14)
  • analytics: the provider seam, query types and the memory provider (e1b68681)
  • analytics: hour and day bucket arithmetic (e9db15ea)
  • analytics: package scaffold and the Analytics Engine slot map (31c3cb2a)
  • orm: upsertMany, and vitals stop losing samples to a read-modify-write (f3673f1a)
  • react/router: a guarded page defaults to CSR, and guards refuse the same way on both sides (11d7c601)

Bug Fixes

  • system: drop node:path from MemoryFileSystemProvider (e1a496e3)
  • api/workflows: never complete a workflow while a step is still running (9b77cea4)
  • orm: emit domain events after the outermost transaction commits (4090a7d7)
  • ui/table: tooltip on the column picker, and chrome that reads in light mode (bbd12bd9)
  • ui: make light-mode interaction states surface-relative (8385499a)
  • ui/auth: let password reset satisfy the captcha it is gated on (90ac2498)
  • core: harden the kernel — parseEnv escaping, DI failure paths, env truthiness [BREAKING] (c8b7f558)
  • datetime,scheduler: keep cron ticks anchored and clamp 32-bit timers (14bee4e5)
  • ui/admin: point AdminRouter's doc at adminPage instead of duplicating it (da8e1a16)
  • ui: close six review findings on AdminRouter (a8d0f002)
  • ui/admin: the user form demanded fields the realm never collects (76e503ac)
  • ui/admin: rename admin-router-options to .tsx, revert exports hack (84a1dbae)
  • ui/admin: type AdminRouter's action gate instead of stringly-naming it (43b0b43d)
  • ui/admin: gate nav entries on action names, not permission alone (53990594)
  • core: stop reporting a boot duration workerd cannot measure (1c602359)
  • files: bound the public-file edge cache at a week, not a year (728c4b31)
  • cookies: the browser and the server disagreed on every shared cookie name (db5d10c2)
  • react/router: apply the SSR payload before the first start hook (807e0d4b)
  • analytics: GROUP BY takes a column name, not the expression (f16d8750)
  • analytics: count() takes no arguments on Analytics Engine (f922de31)
  • analytics: declare the prune-floor table on every runtime, not just workerd (19402864)
  • analytics: look the binding up by its own name, and expose the dataset at runtime (b85fe8db)
  • analytics: rename the read token and quote the dataset name in FROM (31577f73)
  • analytics: scope the prune-floor table to WaeAnalyticsProvider only (f9fedea1)
  • analytics: give WaeAnalyticsProvider a durable prune floor (dfaa30c0)
  • analytics: numeric dimensions on WAE, drop count aggregate, close validation gaps (0245b5c0)
  • ui: a collapsed sidebar's nav group is a dropdown, not a dead button (c035c1a9)
  • analytics: rollup() had the identical raw-name splice as readOne, and the conformance suite's single-word fixture let both ship (97aa548f)
  • analytics: resolve dimension/measure names to real columns in OrmAnalyticsProvider.readOne (ea9d75bc)
  • analytics: merge Analytics Engine and cold on the read side (df50d060)
  • analytics: warn on unwired retention, reject cold<hot, isolate sweep failures (5f290e65)
  • analytics: forward Analytics Engine rows into cold before folding them (333afb2b)
  • analytics: make WaeAnalyticsProvider DI-constructible so it can be auto-selected (264987d1)
  • analytics: replace a stray NUL byte with a space in FakeAnalyticsEngine (7d78e569)
  • analytics: validate the dataset name in $analytics, pin registration ordering (cdf4e0d4)
  • analytics: eager dataset registration, reserve day/hour dimension names (d442dda6)
  • analytics: reserve time_bucket instead of bucket, guard column collisions (83a3a202)
  • analytics: drop min/max, fix prune's tier scope, sharpen conformance suite (a403a4e9)
  • analytics: escape composite grouping keys, cover count/min/max, fix JSDoc style (5bc7a5e4)
  • analytics: type imports, tsconfig, error messages, and measures cap test (15a47935)
  • ui: a clearable Control keeps its clear label in full contrast (44bff3dc)
  • react/router: stop importing a CSR page's component on the server (ffa6521f)
  • security: $secure checks permissions in the browser, and a denied page stops rendering (04f9e864)

0.25.1

Choose a tag to compare

@github-actions github-actions released this 07 Aug 14:02

Features

  • cli: secrets ride the deploy, so an app never boots without them (dfbcd5ac)
  • cli: deploy to Bay over ssh instead of an admin panel (03ab985f)
  • cli: add host to the platform environment config (3001a040)
  • system: pipe stdin into argv shell commands (9c6262f1)
  • protobuf: publish @alepha/protobuf (72e238da)
  • protobuf: restore @alepha/protobuf, on zod (c59711f1)
  • cli: tell the agent about the devtools API (c9230e7a)
  • cli: platform push, and --tag on up and deploy (57aa558a)
  • mqtt,ui: publish @alepha/mqtt and @alepha/ui to npm (a871f0de)
  • cli: LoreAdapter deploys a tag, and reuses a pinned one rather than rebuilding it (cfb01bd4)
  • cli: ship a static site the framework did not render, and let Lore deploy one (4ccc08ca)
  • bucket: Bay hands apps a bucket, and owns APP_NAME (bd30b2ec)

Bug Fixes

  • ui: a searchable select could be set, but never cleared (ac624fe1)
  • cli: an answered prompt kept stdin open, so the command never exited (92ee7abe)
  • oauth: the refresh_token grant authenticated nobody (8e688b55)
  • api/users: the login lockout was disabled on Workers, and fail-open besides (2655ec3c)
  • cli: Bay could not take a secret from CI, where there is no .env file (f7cd6ca0)
  • cli: BayAdapter pushed no secrets at all, and said nothing about it (3f13f434)
  • cli: four review follow-ups from the outpost-purge / sigil-apps plan (e45e2fa0)
  • cli: make the Bay pre-flight actually reach the control socket (2dcce305)
  • cli: fix control-socket misdiagnosis, add --control-socket support (e8a4f4cb)
  • ui: make the shadcn sync actually write files, and refresh the primitives (afdd0cb6)
  • api: stop racing the wall clock in the parameter TTL test (e93de2ef)
  • cli: stop reporting a domain the deploy did not choose (280d8a5c)
  • server: drop the body on null-body statuses, and centre the error page (d8c6f2af)
  • cli,command: a mistyped subcommand exited 0, and openapi refused to run without $swagger (34f72a12)

0.25.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 23:35

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 ...
Read more

0.24.0

Choose a tag to compare

@github-actions github-actions released this 15 Jul 08:53

Features

  • core,react,server,devtools: $atom feature pack (fd60624e)
  • core,devtools: add atom reset/watch, serverOnly guard, mutation log (3df5f09b)
  • core,react: add $computed primitive + useComputed hook (a6e6ff33)
  • core,server: add persist adapters for $atom (cookie, localStorage, sessionStorage) (43802902)
  • react: add useSelector hook + shallowEqual utility (20be7cc4)
  • bucket: scope file storage keys by tenant when one is active (e67ca3a1)
  • cli: gate sub-process output on log level (>= DEBUG) (e6fe66a6)
  • ui: rebuild ControlSelect combobox on Base UI with multi-select pills (215231cf)
  • api/notifications: org-scope the admin notification list (73a0fd8c)
  • audits: implement audit retention policy with scheduled cleanup (55bc57fb)
  • ui: extract TurnstileWidget — reusable Turnstile captcha component (9dda983c)
  • ui: translatable parameter labels in the admin parameters editor (a77f3fcc)
  • users: MySessionController — self-service session management (be9af87c)
  • payments: connected-account refunds + checkout email pre-fill (f46498f5)
  • payments: connected-accounts webhook support (4968e01d)
  • api/notifications: lang-aware notifications — request-language capture + translations resolution (+ fr security emails) (50212d3c)
  • security: $issuer access tokens compose name from first/last + mint given_name/family_name (8b7b5f3a)
  • payments: redesign the dev mock checkout page as a hosted-checkout-style card (5c6baa1f)
  • auth: first/last name in registration + OIDC profile claims in id_token (1db9a343)
  • logger: add CliFormatterProvider for compact CLI output format, remove prettyprint [BREAKING] (14f261cf)
  • ui/auth: rename post-auth redirect query param r → redirect (e5f16fcb)
  • cli/cloudflare: derive the wildcard Worker-route zone from the domain (a003e3be)
  • oauth: trusted (first-party) clients skip the consent screen (4015403e)
  • security: ephemeral EdDSA key fallback in setSigningKey (dev/test, empty privateKey) (2b60324e)
  • oauth: id_token issuance + openid-configuration + /oauth/jwks + confidential token auth (Plan 0 Task 6) (cb163eef)
  • oauth: authorize prompt=none (login_required + silent SSO) + nonce round-trip (Plan 0 Task 5) (325be5f7)
  • oauth: confidential client secret + bounded wildcard redirect (Plan 0 Tasks 3+4) (9bbe5f93)
  • security: realm/issuer 'signing' config -> asymmetric tokens + JWKS (5f0c3372)
  • security: JwtProvider asymmetric signing + getJwks (HS256 default kept) (8777c007)

Bug Fixes

  • docs,test: migrate guide examples t→z, de-flake crud updatedAt test (d8bf1ce2)
  • core,server,devtools: close cross-feature $atom review findings (77d411fc)
  • devtools: close serverOnly leak in atom log + metadata routes (39a8bb89)
  • core,devtools: close task-5 atom review findings (adbcc406)
  • core,react: close task-4 $computed review findings (581e2d3d)
  • core,server: close task-3 atom-persistence review findings (ea61f555)
  • core,react,devtools: address review findings on atom validation (task 2) (8e68e1d4)
  • core,react,devtools: enforce atom schema validation on writes + hydration decode (dedfae5e)
  • security,api,ui: close Phase 0 hotfixes + payments/jobs/ui remediation (6af79d19)
  • react: correct useStore reactivity, error-boundary reset, action supersession, hash-strip (0c89bf94)
  • cli: scope Cloudflare waitUntil per invocation, add queue DLQ, guard destructive migrations (00f63e8d)
  • orm: keep paginate's next-page sentinel when size comes from query.limit (d772cc6e)
  • scheduler: treat lock contention as a dedup skip, not an error (89131817)
  • core: allow scoped injection after start() (7e5f9a5a)
  • api/users: scope admin actions to the caller's realm (869c6d67)
  • api/verifications: stop returning the verification code over HTTP (17081a47)
  • devtools: never mount devtools endpoints in production (e652bd3c)
  • lock: generate the lock id per invocation, not per composition (3b98fd69)
  • redis/bun: return the SET reply so lock protocol works under Bun (6c185d9e)
  • cli/db: check all providers for migration drift, not just the first (b14f20a4)
  • crypto: fail closed on default APP_SECRET in production (c3cf7c45)
  • api/parameters: emit parameter schema as JSON Schema, not raw ZodObject (b9dccf45)
  • orm/sqlite: map array-of-enum columns to JSON (5933dff6)
  • orm: stop SchemaValidator cache from growing unboundedly (faf2e65e)
  • ui/segmented: match Button height pixel-for-pixel per size token (3b59b701)
  • oauth: re-mint id_token on the refresh_token grant (038f286f)
  • sigil: enforce excludedPaths on the petition button; fix profile avatar crop (2042f98c)
  • ui: AutoForm i18nPrefix — skip description when the dict key is missing (bed242ca)
  • parameters: serverless cache revalidation TTL (cross-isolate staleness) (7054d52e)
  • payments: capture checkout-session webhooks on connected accounts (3832f5eb)
  • payments-stripe: create Connect v2 accounts via account token (FR/PSD2) (0fbf5377)
  • ui/app-shell: fill-mode sidebar anchors to the wrapper, not the viewport (765f9600)
  • orm: or/and where keys AND-combine with sibling conditions instead of short-circuiting (ed8b1dbd)
  • ui/auth: login + reset links propagate ?redirect= alongside realm (91085cc0)
  • react/form: useForm keeps submit/lifecycle callbacks fresh across renders (5e428a50)
  • server/auth: /_auth/userinfo returns the request's RESOLVED user, not a raw-token re-derivation (ea8a7884)
  • ui: ControlSelect combobox trigger surface matches native SelectTrigger (bg-transparent, not bg-background) (e97a6013)
  • parameters: org-scope the parameters table + provider caches (multi-tenant isolation) [BREAKING] (44cf49c7)
  • api/oauth: hand login page return URL as redirect, not redirect_uri (a9011515)
  • ci: repair green pipeline — oauth migration, playground e2e, table refresh (74a67368)
  • auth: OIDC discovery is always lazy (never a boot dependency for a relying party) (2ae2bcc9)

0.23.0

Choose a tag to compare

@github-actions github-actions released this 06 Jun 16:44

Features

  • sitemap: runtime $sitemap primitive + static-route prerendering (05dbebe8)
  • mcp: resolve + forward-to-quest blights from the Lore MCP (e3e56053)
  • quests: set quest dependencies from the UI (9885315f)
  • quests: make the quest description optional (36a96eaa)
  • cli/i18n: resolve lazily-imported per-language dictionary files (ec3e40d7)
  • mcp: link quests to petitions from the Lore MCP (f3f9b9b0)
  • sigil: capture host-page context on petition submissions (7c7d2bde)
  • mcp: view petition attachments inline via the Lore MCP (0ff00fa8)
  • ui: federated provider buttons link to the auth broker (2e569bc1)
  • auth: $realm identities.federated wiring + realm-config exposure (8c486d33)
  • auth: $authFederationClient (verify assertion -> link -> session) (0741de42)
  • auth: $authFederationBroker (OIDC broker emitting signed assertion) (a4924d6c)
  • auth: on-demand Apple ES256 client-secret signer (e1256d73)
  • auth: federation assertion sign/verify (EdDSA) (f5af450a)
  • react/router: URL path-prefix i18n routing for SEO (216037e7)
  • payments-stripe: add setup-mode checkout + inline subscription price_data (445ba268)
  • sigil: close the petition popup on submit + thank-you on the button (b726814f)
  • sigil: center the petition popup on the current monitor (868d0be3)
  • react/i18n: autodetect language from Accept-Language header (f7ce001b)
  • sigil: integrate SIGIL_ID into environment configuration (287a90cc)
  • sigil: assemble AlephaSigil module (d79105e0)
  • sigil: feedback button + annotated petition dialog (3c0b2d85)
  • sigil: port ScreenshotEditor + styles (dba6caf8)
  • sigil: browser telemetry bootstrap (99150293)
  • sigil: web-vitals collector (f1d8fff6)
  • sigil: telemetry batching queue (ff210865)
  • sigil: forward server:onError to blights (8f3ab026)
  • sigil: petition proxy forwards optional reporterEmail (a5aa7238)
  • sigil: proxy controller (ingest + petition) (6c4b9007)
  • stripe: update to Accounts v2 API for connected account creation (8f8df71f)
  • sigil: SigilForwardProvider with activation rule (66e458d2)
  • sigil: shared ingest/petition/vitals schemas (081c7b22)
  • sigil: env schema (b8a17e68)
  • react: export RootComponentsProvider (12496a91)
  • react: render rootComponents slot in ReactPageProvider.root (acce0f2e)
  • react: add RootComponentsProvider slot (b01aa7c9)

Bug Fixes

  • payments-stripe: edge-safe webhook signature verification (acdc0c29)
  • ui: AlephaTable treats fetch as a latest-wins data source (38b4aba9)
  • blights: stop the inbox infinite render loop at its source (6c43b11f)
  • quest: remove spurious scrollbar on the quest view (5e563edf)
  • home: render the campaign 'updated' time client-only (React #418) (58ee31a1)
  • petitions: Cancel on the request form no longer 403s into the error page (554b4a57)
  • i18n: exempt dynamic language.* keys from the unused-key check (7770f34b)
  • ui: forward the ?r= redirect from register to the sign-in link (2e504874)
  • platform: R2 teardown deletes buckets reliably on down (efc67af7)
  • sigil: resolve + forward in-process for Lore's own sigil (70e043c3)
  • sigil: serve petition redirect at root /sigil/request, not /api (b8008911)
  • react/form: submit buttons no longer stick in loading state (f7f8ddb3)
  • cli: emit send_email binding in prebuilt/manifest cloudflare deploys (045e09fb)
  • react: avoid react/router self-import in RootComponentsProvider test (build circular dep) (39253d71)

0.22.0

Choose a tag to compare

@github-actions github-actions released this 31 May 12:12

Features

  • react/i18n: add (alias ) for reactive key translation (2d08a203)
  • jobs: default sweepCron to every 15 minutes (c8ac0afc)
  • cli: global --verbose flag (debug + pretty plain logs) (55a6074c)
  • platform: auto-detect worker secrets from the build manifest (2f334bba)
  • platform: secrets.keys allowlist — deliver worker secrets from process.env (cf150624)
  • platform: alepha platform db export + group migrate under db (3008cfde)
  • bucket: add list() to FileStorageProvider and $bucket (fdef603b)
  • platform: multi-tenant deploys via tenancy + --tenant (54b253b1)
  • cli/build: accept 'cf' as alias for '--target cloudflare' (1f1995fa)
  • payments-stripe: store Stripe customer cache in SQL via DatabaseCacheProvider (dd7f3ceb)
  • audits: add SessionAudits to alepha configuration (b6879c68)
  • jobs: cron jobs keep their last successful run by default (ae16d223)
  • admin-ui/jobs: open executions drawer on row click + fix priority schema (9c63cca1)
  • admin-ui/parameters: confirm factory reset with a diff preview (c9d6da5a)
  • admin-ui/audits: link Resource column to its admin page (2a746f11)
  • users/sessions: record + show login country (4c1d3f0b)
  • admin-ui/audits: source the Action filter from getAuditActions (666c0763)
  • admin-ui/audits: link Actor column to the user detail page (6ed4bb6e)
  • background: alepha/background module — defer() for fire-and-forget work (5c37e8ed)
  • ui/auth: brand icons, OTP reset code, conditional login autofocus (13f63791)
  • email/cloudflare: support display-name sender in EMAIL_FROM (3cc69538)
  • ui: data-driven nav registry — $page.nav, NavShell, Spotlight (52d83c96)
  • admin: global action-error toast, useQuery/useAction ports, permission gating (9bfa0efe)
  • ui: brand-icon set, select leading icon, brighter dark destructive (4fb64ab9)
  • react: implement useQueryParams format/push, fix useQuery initial loading (22d9cd43)
  • admin/parameters: history accordion, scheduling, live creator join, audit (be6faeb1)
  • admin: parameter history cards + file creator join (9f6fc617)
  • admin/files: upload action, uploader column, bucket filter, image preview (2bb3f6ec)
  • ui: AutoForm card mode + admin parameters editor (cf56286e)
  • admin: parameters editor + lore.campaign.limits (38922e38)
  • admin/users: AdminUserDetail page + clickable email column (84a2e07a)
  • security: admin setUserPassword + uniqueness + auto-unverify (6bb57178)
  • ui/control-select: hide search for short lists + per-option disabled (ddacca67)
  • ui/alepha-table: merge filter toolbar and table seamlessly (63954b1f)
  • admin: embed slim user on session rows + EN/FR translations (4355ae60)
  • security: track users.lastLoginAt + surface in admin (2a895060)
  • ui/alepha-table: inline action icons, tooltips, refresh spin (cbad8f0f)
  • orm: findById/getById accept with, allow readonly on tuples (b18daaee)
  • admin: split user table columns + sidebar brand row (c349087f)
  • cli/init: default to my-app/ when run in a non-project dir (8d8124e6)
  • cli/vendor: add 'vendor link' for live dev against a local checkout (abc5053b)
  • admin: role picker + status filter + sticky-body table layout (58721a1c)
  • ui: polish admin-users + AlephaTable floating bar (da05b2a5)
  • ui/alepha-table: sticky thead + Linear-style floating bulk bar + Settings icon for table actions (540f45ba)
  • ui: migrate shadcn stack to base-nova (Base UI primitives) (0168735a)
  • ui/alepha-table: built-in toolbar with filters, column picker, refresh/reset, persistence (cee49c69)
  • ui/alepha-table: add defaultSort + onSortChange for sort persistence (f0ad564f)
  • container: make rocket-worker → CF Container → example-ssr e2e green (d09d5ca4)
  • rocket-worker: example CF Worker fronting Rocket via $container (d8f19cd8)
  • build,platform,bin: manifest captures envConfig — drop alepha.config.ts from artifact (6184203d)
  • build,platform,rocket: manifest-driven prebuilt deploys (5815d03f)
  • cli,rocket: alepha pack command + workspace slugify + extract-by-name (1c8b19c5)
  • build/docker: skip RUN npm install when dist/package.json has no deps (77420472)

Bug Fixes

  • bucket: read upload body once and clean up the file upload chain (957d4db8)
  • command: parseEnv JSON-decodes double-quoted values (symmetric with stringify writers) (dd8abb5f)
  • platform: push per-deploy .env..local keys, not just declared env (36037311)
  • core: dump() must force-instantiate the graph before reading env (b8bdd6f6)
  • bucket: export S3FileStorageProvider from the workerd entrypoint (e3b3a8f0)
  • env: expose PUBLIC_URL at runtime on Cloudflare for absolute email links (491e39d7)
  • subscription: update gracePeriodSweep cron time to 3 AM (1ceaefe1)
  • ui/dropdown-menu: size action menus to content, not trigger width (4423a538)
  • audits: failed login records Failed; add distinct-actions endpoint (4522d611)
  • react: useAction — release the concurrency guard on unmount (0385b616)
  • cli/cloudflare: don't set send_email destination_address from EMAIL_FROM (182bc369)
  • email/cloudflare: use 'email' key in from object, not 'address' (322320a7)
  • vite: improve SSR module invalidation for workspace-linked sources (79442917)
  • ui/command: only highlight the active CommandItem (46e23a88)
  • cli/vendor: resolve link source via node:path, not via shell (dab2236a)
  • ui: use Base UI Checkbox indeterminate prop in AlephaTable (1a9af18d)
  • api/jobs: register sweep+trim crons in constructor, not in onStart (ac5a2dc4)
  • email/cloudflare: gate EmailProvider substitution on isServerless() (c919c905)
  • email/cloudflare: make EMAIL_FROM env optional, re-check in send() (433409c8)
  • cli/cloudflare: look up CloudflareEmailProvider by name string (a9831388)
  • email/cloudflare: boot inert off-Workers instead of throwing (7fe44067)

0.21.2

Choose a tag to compare

@github-actions github-actions released this 26 May 22:28

Features

  • rocket: support down op + add end-to-end smoke test (a17e67d9)
  • rocket: parse alepha platform --json output instead of regex (2ab87f77)
  • platform: emit JSON on --json for up/down/migrate (fb3abc61)
  • rocket: DeployRunner spawns alepha platform --prebuilt (4618cdc1)
  • build,platform: --prebuilt skips bundle, keeps deploy-config gen (f2e3584c)
  • rocket: wire S3 artifact fetch + Docker target with global tools (be087dff)
  • containers: add $container primitive for typed RPC to ephemeral containers (f8f6756d)
  • apps/rocket: Docker image scaffold for the Rocket runner (c6b5c1df)
  • @alepha/rocket: scaffold remote alepha platform runner lib (7e6999a8)
  • platform: graduate alepha/platform out of alepha/cli/platform (7a5e62cb)
  • cli/platform: default PUBLIC_URL to https://<production.domain> when unset (c9509399)
  • email/cloudflare: add CloudflareEmailProvider using Workers binding (1becab6a)
  • ui/alepha-table: add defaultSort + onSortChange for sort persistence (46b671d1)
  • api/files: add /public/files/:id route and avoid duplicate DB lookup on stream (2a23568b)
  • react/form: add useFormQuerySync — two-way bind useForm to URL query params (eadacddc)
  • ui: add ContextMenu component (Radix wrapper, matches DropdownMenu shape) (8bac85bf)
  • ui: useToast returns a lib-agnostic Toast interface (96e84222)
  • ui: polish Segmented styling and add playground demo (baac276b)

Bug Fixes

  • rocket: unblock e2e — schema log/error caps + better failure output (5a9b0b50)
  • react/form: setInitialValues emits form:change for cleared keys (310c98a0)
  • react/form: useFormQuerySync preserves initial form values on first mount (f853e5a3)
  • react/form: useFormQuerySync preserves initial form values when URL is empty (2be05b8a)
  • react/form: treat null/undefined input as unset in FormModel.getValueFromInput (5a3a49c4)
  • react/router: popstate re-renders on query-only URL changes (e236d824)
  • ui: make markdown links visibly distinct from body text (006cc5d5)
  • orm: include table name in Repository PK-not-found error (0a4497aa)
  • verifications: scope verification cooldown to a purpose bucket (12afd379)

0.21.1

Choose a tag to compare

@github-actions github-actions released this 22 May 00:37

Features

  • react/router: redirect to login on a denied page guard (5cc742ce)

Bug Fixes

  • ui-registry: remove the AlephaTable toolbar refresh button (04107657)
  • cli: auth layout no longer double-wraps the full-page auth blocks (d7fbfb29)
  • server: never leak 5xx error internals to the client in production (dc1e00cb)
  • cli: scaffold admin emails into .env, not hard-coded source (2c72dd5e)
  • core: detect production in the browser via import.meta.env.PROD (b902a586)
  • react/router: enforce $page use middleware on client navigation (45745e40)
  • cli: run embedded drizzle-kit with global exec (regression) (b074ea24)