← All updates

CHANGELOG

v1.0.0-beta.118

Name the records band for what the plan has. 157 changes in all: 22 new, 92 fixes, 1 reverted, 16 docs and 26 behind the scenes.

The Aglyn Team · Sep 2026

Released to production on September 12, 2026 at 00:39 CDT. See every commit in this release on GitHub

New

  • Console: name the records band for what the plan has
  • Security rules: refuse every CRM client write on a plan without the CRM
  • Console: export and erase a workspace's people from Settings, on every plan
  • API: refuse /v1 contacts on a plan without the CRM
  • Console: lock the whole CRM on a plan without it, beside the shell's notice
  • CRM: refuse every crm/* read and write on a plan without the CRM
  • Tooling: check a push in seconds for the classes that most often reached main
  • Media library: pause tenant video uploads behind release_video_uploads
  • CRM: open the CRM on read-only Leads and lock Contacts without the suite
  • CRM: refuse every contact edit on a plan without the CRM suite
  • Video: play a Wistia film behind a click-to-play poster
  • Sites: file a lead from every live form on a plan without the CRM suite
  • Video: own player controls in the lightbox, so Escape closes it from every stop
  • Besigner: a Screen Link can target a content collection's listing page
  • CRM: open the CRM to every workspace and name its flag release_crm
  • Marketing site: the Datasets product deck, with job openings as its sample data
  • Monitoring: dispatch the canary from a GitHub App, not an expiring PAT
  • Media library: let replace swap a PDF, a film or a document, not only an image
  • Monitoring: run the edge sampler in GCP, with no stored credential
  • Video: serve the renditions the producer makes, by asking for them
  • Releases: tag a release that shipped without one
  • Monitoring: wire the outage alerts to a second route off the mailbox

Fixed

  • Tests: the besigner spec drives the row menu and a divergent save
  • Tooling: refuse to serve a worktree whose node_modules links out of it
  • Legal: date the Meta Pixel row by its change-log entry
  • Console: give the Privacy settings route its payload entry
  • Media library: build the DAM search magnifier once, not per render
  • UI components: a help tip follows its content, so a late excerpt cannot push it off screen
  • Sites: a social card's dimensions follow the asset, not the pick
  • Tests: write the private-port emulator config beside the rules it names
  • Besigner: the canvas and Preview reserve a replaced image's box from its asset
  • CRM: answer an ID-token outage 5xx, not 401, from plugin server handlers
  • Media library: count CDN deliveries per caller, and refuse past a measured ceiling
  • Media library: stream CDN deliveries rather than holding each file whole in memory
  • Pricing: re-extract the /pricing frames and reconcile the paid-only CRM rows
  • Sites: file a lead only from a routed form, whatever the plan
  • Tooling: new-worktree copies the tenant's .env, where its Firebase config lives
  • Tests: the emulated dev servers hold no Stripe, Vercel or Resend credential
  • Tests: grant the seeded org release_video_uploads, so the DAM e2e's films land
  • Tests: the page connects to the emulators its server was started with
  • Console: preview draws a replaced film from its asset, not its pick
  • Besigner: the canvas draws a replaced film from its asset, not its pick
  • Datasets: index values.email so updateDataset's lookup can run
  • Legal: hold the brand baseline to the reworded Wistia reason
  • Tooling: exempt the pre-push suite's synthetic ids, and fail a push citing one
  • Legal: word the Wistia inventory reason without the product brand
  • Commerce: write the gated player's abort note in American English
  • Commerce: expire a paid download's link and keep its file private
  • Build checks: count the Wistia note's two company-name mentions in the brand baseline
  • Console: name the links to a collection's listing before it is deleted
  • Media library: a placed image takes its intrinsic size from the replaced asset
  • Console: prune the multi-tab records the Firestore SDK strands in localStorage
  • CI: run Main Gate's guards even when typecheck or lint is red
  • Commerce: expire the gated video's delivery link and keep its file private
  • Billing: name the CRM suite row as /pricing does
  • Console: scan a component's Link property default for where-used links
  • CRM: ask the permission catalog for data.manage, not resolveOrgPermissions' map
  • Console: answer 500, not 401, when a shared helper cannot check a token
  • CI: lint with --quiet and grade the log, so a red lint prints its error
  • Legal: declare the Wistia embed host in the egress inventory
  • Security rules: refuse a lead's delete on a plan without the CRM suite
  • Video: a placed film takes its length, shape and poster from the asset
  • Media library: a published reference renders the stable URL, so a replace reaches it
  • Documentation: name the Assist helper without the product brand in its evidence
  • Documentation: cite the subprocessors page by path, not by Aglyn's hostname
  • Video: let the lightbox film shrink so a short screen keeps its controls
  • Scripts: point the activity guard at the lead conversion writer and run it in CI
  • Security rules: a client may only remove a contact's consent entries, never grant one
  • API: refuse a contact's suite fields over /v1 on a plan without the CRM suite
  • Security rules: a contact is created by the server, never by a client
  • CRM: move every write to a contact's facets behind the CRM routes
  • Console: show Assist readers fixed copy, not the model provider's error text
  • Media library: stop counting a media CDN HEAD as a full-size serve
  • Accounts: log the link-mint throttle as a throttle, not an internal error
  • Console: a folder or SSO 5xx answers fixed copy, never the thrown message
  • Console: answer 401, not 5xx, when any console route gets a refused ID token
  • Sites: write form records only where the page signed, not where the body says
  • Documentation: stop telling customers Aglyn Assist is rolling out when it is live
  • Console: load plugin field types before a console record write validates
  • Sites: load the datasets a page repeats over, not the first fifty the site can see
  • Security rules: the CRM suite's collections ask the plan on create and update
  • CRM: lock the CRM suite's actions on Contacts for a plan without it
  • CRM: refuse the CRM suite's routes to a plan without the suite
  • Sites: render a repeat's first records in editor order, not an id sample
  • Billing: measure dataset warnings against the limit a create is refused at
  • Console: offer only datasets the site can see in the page-editor picker
  • Console: refuse an unstorable media sharing choice, and guard the widening
  • Data: refuse a sharing choice the dataset cannot store instead of widening it
  • Sites: record a dataset step that saved nothing as failed, not saved
  • Workflows: offer every current dataset in the Actions dataset picker
  • Marketing site: say which plan limits refuse and which meter, and who owns datasets
  • Console: say pages past the publish cap catch up within the hour
  • API: describe /v1 write bodies, deletes and creates the way the handlers answer
  • UI components: a locked hub section names its lock to assistive technology
  • Tooling: keep the renditions an earlier run made when --webm adds one
  • UI components: a locked hub section is laid out like every other tab
  • Tests: emulate Storage in the emulated serve scripts, not only Auth and Firestore
  • Video: send the play beacon the collector has been waiting for
  • Tooling: describe the canary's App Check secret without naming the variable
  • Console: declare the Monitoring and Cloud Run hosts the setup scripts call
  • Errors: drop stacks thrown wholly under iabjs:// or extension schemes
  • Console: answer 401, not 500, when the edit-hint mint gets a revoked token
  • Releases: verify every manual deploy target on a promotion, not only the range's
  • Console: declare the Monitoring and Run admin APIs the setup scripts call
  • Monitoring: describe the canary's App Check debug token instead of naming it
  • Marketing site: the Explore grid's slot count follows the copy, not a fixed seven
  • Commerce: send the entitlement hop to a delivery copy, not the master
  • Tooling: build the alert policy names from configuration, and re-read the id ceiling
  • Media library: measure the storage band when a signed replace is minted, not only at finalize
  • Documentation: clear the baselined British spellings from published copy
  • AI agents: resolve a screen link in the Markdown wherever its value is stored
  • Monitoring: keep an unprovisioned address out of the alerting script
  • Documentation: drop the British spellings from the Besigner styling pages
  • CRM: log a create from the org hub to the org, not to the picked site

Reverted

  • CRM: drop the read-only Leads mode built for Free

Documentation

  • Releases: record AGL-2863 in the beta.118 entry
  • Self-hosting: give the browser's three emulator hosts a row in the reference
  • Sites: the stored card pair is the fallback, and what the card costs is counted
  • Documentation: capture the Assist panel help tip, A15's flag having shipped
  • Media library: say exactly which CDN requests the per-caller limit counts
  • CRM: drop the claims that Free keeps the CRM's contacts from code comments
  • CRM: say the CRM starts at Starter and Free has none of it
  • Video: point the paused-upload note at Wistia-hosted video
  • CRM: say Free opens the CRM on read-only Leads and Contacts join the suite
  • Video: place a Wistia video with the Video element
  • CRM: the contacts table's Set stage announces Contact changed stage
  • Billing: say the bandwidth meter counts page views, not what a page weighs
  • CRM: say exactly what Free gets from the CRM
  • Datasets: correct validation, sharing, quota and navigation claims
  • API: describe dataset endpoints, scopes and usage bands as they behave
  • Brand: write down how Aglyn is pronounced, where a reader and Assist both meet it

Behind the scenes

  • Site data: let the CDN response double forget a representation
  • Site data: pin that a plugin catch answering 401 classified the throw
  • Tooling: keep the full-access domains key's name out of the emulated-env self-test
  • Console: transcribe the send-from-your-domain row the page already carries
  • Tests: drive the Free CRM as locked, with the privacy door and a Starter control
  • Console: pin the one paid-only CRM row the pricing page publishes
  • Platform: allowlist the gated-media backfill's first-party apexes
  • CRM: pin the shipped rail's plan split in the plugin, not the console
  • CI: sweep every push to main as one queued unit, not an hourly debounce
  • Console: give the host setup specs the real release-flag registry
  • Tests: drive the Free CRM as read-only Leads with Contacts locked
  • Console: pin /pricing's view-only leads row and the suite row with contacts
  • Console: prove record writes load plugin field types without importing an add-on
  • Console: declare the datasets banner as an indirect quota surface
  • Console: give the email properties spec the scope tokens its picker reads
  • UI components: run the hub rail spec, so check:test-wiring stops failing main
  • Tests: write the DAM spec's preflight media document through putMediaDocument
  • Tests: drive the CRM plan gate on a Free workspace, with a Starter control
  • Tests: fill the contact record's Phone field, not the Call button's tooltip
  • Tests: drive the DAM, the video pipeline and the lightbox end to end
  • Console: expect the American Licenses copy the marketplace renders
  • Console: sweep the /v1 upload door in both storage-gate inventories
  • Console: count the replace route's mint-leg storage gate as the fifth door
  • Console: count replace's sign-time storage gate as the fifth door
  • Console: assert the Licenses copy, and let its absence checks fail again
  • Console: re-inject the false comment opener the stripper spec measures

Share this article

The Aglyn Team

We're building the open web platform. Follow along as we ship — and tell us what you need.

Start building on Aglyn.

Free to start — design your first page and publish in minutes.