v1.0.0-beta.223
Released to production on October 5, 2026 at 13:30 CDT. See every commit in this release on GitHub
The tree cut as v1.0.0-beta.222 never reached production, so its changes ship here.
New
- Data: an unfinished import can be resumed or discarded; list import ledgers expire
- Data: every import and export button and the hub show only what the person may do
- Data: imports suggest and create referenced records; Data page names its dataset
- Data: a resource sets its own default handling and matching; the review shows it
- CRM: no CRM import or export on Free but the contacts and leads files
- Sites: import and export submissions, bookings, redirects, events, do-not-contact
- CRM: privacy settings export every contact and lead through the export dialog
- CRM: leads, deals and tasks import and export; deals and tasks stop duplicating
- Email: email topics travel in workspace packages, and what uses them follows
- Commerce: gift cards import by issuing each card, confirmed by its total
- Data: workspace packages and one Import & export hub with history and undo
- Sites: a package import renders forms and emails side by side, data as a table
- CRM: contacts and companies import and export every field; other CRMs' files map
- Commerce: products, orders, promotions, gift cards and categories import and export
- Email: list members and suppressions import/export with matching, consent, choices
- Data: datasets import and export with field choice, matching and conflict choices
- Sites: a package import shows each item's diff and asks how to handle it
- Data: an import resolves lookup columns to records, and asks about the rest
- Sites: pick what a site package carries, and see what is new or changed first
- Data: export lets you choose the fields, remembers your choice, and arrives whole
- Console: import and export open from any plugin and run against the transfer routes
- Transfer ui: every import shows each match, conflict and warning and lets you pick
- Data: imports run as resumable jobs with a dry run, a ledger and a 7-day undo
- Plugins: a plugin declares what it can import and export
- Data: one import/export core every surface will plug into
- AI: assistance in the CRM sends the whole record only once the release flag is on
- CRM: a deleted contact is nobody's reports-to; merge preview shows it
- CRM: deals carry Salesforce's Opportunity Contact Roles
- AI: drafted automations set a task's priority and a logged call's direction
- AI: assistance in the CRM reads the whole record, under an open-ended disclosure
- CRM: leads carry Salesforce's standard Lead fields, and converting hands them on
- CRM: every Aglyn door and sequence fills in its own built-in lead source
- CRM: tasks get Salesforce's status, priority, type, subject; calls get a direction
- CRM: deals carry Salesforce's Opportunity fields; new pipelines get its stages
- CRM: contacts carry Salesforce's standard Contact fields
- CRM: companies carry Salesforce's Account fields
- CRM: lead status is an editable picklist; leads keep the meaning
- CRM: filter, report and share leads by Inbound/Outbound; filter contacts by source
- CRM: every picklist ships Salesforce's standard values and takes the org's own
- Sites: a new site is born with a real home page, header, footer, theme and SEO (AGL-3497) (#1201)
- Billing: private images served through the CDN count toward bandwidth
- Sites: a new site is born with a real home page, header, footer, theme and SEO
- Media library: every upload optimized, and old media converges lazily
- Bookings: a service may state its price as a label and book with no charge
- SEO: every site icon size and the web app manifest derive from one upload
- Bookings: a service may state its price as a label and book with no charge
- Bookings: a service may ask the booker for a phone and the job address
- Data: offer to make a record template a page again when it stops serving
- AI: a plan may bind one page to a dataset as its record template
- Data: set up record pages in Page Properties and preview them on the canvas
- Outreach: an Opens column, and opens judged by where the fetch came from (AGL-3488) (#1196)
- Billing: video, audio and file downloads count 1.6x toward bandwidth
- Data: save a record template, and give a dataset its page addresses
- Data: a record write, a template publish and a lockdown drop record pages
- Data: record pages are linked by {{item.url}} and listed in sitemap and llms.txt
- Data: a dataset record is served at /{base}/{address} from one template page
- Pricing: every plan covers full-use cost + 30% after card fees
- Media library: the library states storage used against the org-wide band
- Organizations: staff take no seat, owner handoff invite, staff ask to upgrade
- Plugins: every plugin that keeps a person erases its share, the CRM first and last
- Screens: page groups, and nothing above a live page takes it off the site
- Plugins: a plugin asks the plugin that keeps people for the person
- Abuse: a link's path can be looked up in Web Risk, behind a switch left off
- Plugins: a door asks the plugin that credits outcomes; it holds the campaign joins
- Plugins: a plugin declares the artifact types it keeps, and an installer asks it
- Console: the production canary raises an operator alert on a failed deploy
- Operations: a five-minute render monitor fetches uncached pages from the console
- Marketing site: a campaign visit rollup is readable by campaign scope only
- Forms: a submission alert opens it and names its campaign
- Tooling: a dry-run backfill files form leads under their form's campaigns
Fixed
- CI: the promotion cadence check counts when production was quiet for days
- CRM: an org owner can delete a lead a site holds
- Data: every import and export asks its feature's plan and flag, like its own pages
- Plugins: bookings, events and forms transfers lazy-load no library; lint green
- Data: exported CSV cells can't run as spreadsheet formulas
- Tooling: a JSON key written twice fails the build instead of vanishing
- Data: main is green again after workspace packages
- Data: anyone who can read a dataset can export it again
- Sites: a site package import's undo snapshots expire a day after undo closes
- Data: stale import jobs expire, a half-done undo finishes, presets name the ID once
- Data: the transfer layer says where a dataset record's integrity fields are derived
- Data: the transfer core is reached by its own path and names no brand literal
- Tooling: the stale-spec-literals check pairs a short string's own quotes
- Sites: site search falls back to the browser when no app router is mounted
- Notifications: the site door announces the workspace it makes, and every new site (AGL-3491) (#1199)
- Console: confirming three dialogs acts instead of reading as cancel
- Forms: each card on a form's page saves what it shows, from its own header
- Sites: the self-hosted font route states its lockdown exemption
- Sites: the self-hosted font route states its lockdown exemption
- Media library: a library file's Storage URL is served through the CDN
- Sites: site search navigates with the client router instead of reloading
- SEO: check each page as it publishes, and name keywords past five
- Commerce: paid video and downloads served off the CDN count toward bandwidth
- Console: any plan may name the one language its site is in
- Media library: a serve is counted before its request ends, and a lost count is logged
- Bookings: the slot listing is a page of whole days, and the widget shows all of them
- Data: list values stored as lists, and a repeat with no rows publishes nothing
- Plugins: erasers registered at boot are the ones the erasure runs
- SEO: an image marked decorative is not missing a description
- Data: record pages carry their own {{item.url}}, and the setup reads at a glance
- Billing: the quota banner states storage on org pages too
- Forms: a placed form renders the saved form's own label, message and styling
- Billing: the staff discount guardrail rates the org as it bills
- Notifications: the site door announces the workspace it makes, and every new site
- Media library: any member may read the storage band, and a read-only lock allows it
- Billing: one storage alert, against the workspace's pooled band
- Billing: a coupon under full-use cost is a warning, judged on the charges it reaches
- Bookings: the per-service availability reads get their composite index
- Billing: the storage cap card states the allowance as the workspace's
- Billing: storage is metered and warned on as the workspace's one band
- Besigner: every save converts typed binding names to id tokens
- Besigner: layout chrome draws site variables as the page does
- Organizations: the upgrade-proposal card carries a help link, as help coverage requires
- Billing: video and files served from origin count against the bandwidth band
- Screens: publishing the placeholder home page makes it the owner's
- Workflows: the run bands are held to the workspace's runs, not one site's
- Billing: the full-use cost names stored data as the platform model does
- Billing: quotes and discounts are rated against what a plan costs at full use
- Besigner: the empty-document slot names the document it stands for
- Console: the theme section lists what you have changed below the editor
- Billing: the upgrade proposal email falls back to the configured brand name
- Console: the interaction builder offers no step only an automation holds
- Billing: price at nam5, in decimal GB, and a /v1 request as a function
- Abuse: a Web Risk lookup that cannot reach the store reads unknown, not notFound
- API: the /v1 root lists each resource once, and datasets only with the data plugin
- Data: concurrent dataset-schema installs cannot cross the org's dataset cap
- Console: the production build turns off Turbopack's build cache to fit 8 GB
- Tooling: the client-site seed names its fixed ids through key functions
- Sites: a page render awaits no network call without a real deadline
- Sites: a page never waits on a theme font stylesheet past its deadline
- Marketing site: the campaign touch and creditor read the campaign model from the plugin
- Abuse: one fraud row per charge; a late Stripe signal joins it
- Themes: every button color has a legible hover in both schemes
- Documentation: the advertising consent sentence is back in the assist index
- Marketing site: the campaign page opens on what it caused, then who it reached
- Marketing site: the page touch shares the campaign-touch entry; no new device key
- Workflows: a lead's task and activity are named by a platform-minted id
- CRM: the lead door names its campaigns field when it writes one
- Workflows: a stored filter no event can satisfy is a Skipped run with its reason
Performance
- Media library: published images size themselves from the composed tree, no re-save
- Media library: images say how big they render, and published URLs are versioned
- Sites: a theme's Google fonts are served by the site, not linked
- Sites: a published page ships its node map as a tree that states each id once
- UI components: an entries block loads its search box only when search is on
Changed
- Marketing site: a campaign's model is marketing's; the send math stays shared
- Forms: the door's own words leave the core forms model
- Forms: a flooded door's notices are the forms plugin's declaration
- Workflows: the automation vocabulary moves to its plugin, behind step seams
- Plugins: send names, the kill switch and site record counts come from owners
- CRM: a captured person, their owner and their company are the CRM's
- Data: the dataset model is the data plugin's own
- Plugins: the CRM runs the automation steps that write its records
- Forms: the form door is the forms plugin's route, keeping its own visitor gates
- Inbox: the Inbox reads form submissions through the forms plugin's records
- Outreach: a sequence reads its people through the record system's seams
- Plugins: a plugin offers its automation recipes through a recipe seam
- AI: the quota banner's AI credit warning is the AI plugin's band declaration
- Plugins: a plugin declares the entity kinds a Besigner picker lists
- Data: the dataset automation steps run in the data plugin
- Plugins: commerce and forms serve their resources under a site on /v1
- Data: a dataset schema's install, publish and update are the data plugin's
- Plugins: the record system moves a delivered message's timeline entry
- CRM: a record's next activity and a task's reminder are the CRM's model
- Plugins: an alert words a conversion description through the credit seam
Documentation
- CRM: the deals board, reports and contact record show today's stages and fields
- Data: import and export docs show the wizard, the field picker and the new buttons
- Data: the docs capture plan shoots the import wizard and the export dialog
- Forms: a card's Save stays grayed out, in American spelling
- CRM: custom fields names every picklist the CRM keeps
- Media library: the media page shots state storage against the workspace band
- Data: record pages across the datasets docs and the plugin reference
- Data: a guide to service and location pages from a dataset
- Pricing: the 1.6x media sentence is live on /pricing
- Teams: owner handoff, staff seats, and building a site for a client
- Media library: the Media page shots show the Library card's two tabs
- Build: record what took aglyn.com/press under 500 KiB
- Marketing site: the campaign page opens on what it caused, with who it reached under it
- Marketing site: campaign credit without labels, utm_campaign labels, reach, Inbox links
- Workflows: transactional replies, merge tags, New lead and what a filter runs
Behind the scenes
- Releases: beta.222 carries main through 055f270990
- Platform: the self-host claims sweep reads beta.222's media line as media
- Releases: beta.222 carries main through fac6bc004b
- Releases: beta.222 carries main through f7dacb2548
- Tests: the contacts bulk-bar spec exports the selection through the dialog
- Tests: the CRM specs open Closed Won and fill a task's Subject
- Tests: console and CRM suites read today's sections, filters, pickers and grids
- Tooling: lib-boundaries refuses lazy-loading a library also imported statically
- Security rules: rules deploy without their comments, so the source keeps its docs and room
- Sites: the image-sink inventory declares the starter site's SEO image
- Releases: beta.222 carries main through 6f659ac364
- Releases: beta.222 changelog names the site search router fix
- Releases: beta.222 carries main through 1e73e4c654
- Releases: beta.222 changelog names raw Storage URLs served through the CDN
- Releases: beta.222 changelog names the default site and new-site notices
- Releases: beta.222 changelog names the site search fix
- Notifications: read the canary guard from the shared workspace announcer
- Releases: beta.222 changelog names the added fixes
- Sites: the image-sink inventory names the font style and the SEO facts
- AI: the palette knows the Image element's Sizes attribute
- Linear: the issue ceiling is AGL-3501, read from Linear
- Linear: the issue ceiling is AGL-3498, read from Linear
- Data: the repo guards answer for record pages
- Billing: the storage alert spec imports entitlements by package
- Billing: the plan-card and batched-send specs read the cut bands
- Pricing: the Figma frames state the 1.6× origin-media weight
- Documentation: regenerate the Assist docs index for the storage copy
- Console: the automation-step fakes take the run meter's transaction and batch
- Pricing: the Figma frames carry every moved figure
- Tooling: the Linear ceiling reads AGL-3478, read from the workspace
- Outreach: the emulator spec's erasure request carries the erasure's time
- Billing: the pricing page caught up with the nam5 and decimal-GB figures
- Tooling: raise the Linear id ceiling to AGL-3463, read from the workspace
- Console: the outbox drain spec ages a pending entry from before the drain started
- Site runtime: the door scan's control names the contract door, not a count
- Releases: beta.223 carries main through 210311aa2a
- Releases: beta.223 carries main through 3bbc6fcada
- Releases: beta.223 carries main through d412ab9e32
- Platform: the self-host sweep reads the production canary as operator tooling
- Releases: beta.223 carries main through c278e4be2f
- Releases: beta.223 carries main through 89076a89bb
- Monitoring: read production after every tenant/console deploy and roll back a red one
- Security rules: the deploy artifact carries the campaign visit reports rule
- Sites: the production smoke renders a client-shaped site under a route budget
- Dependencies: bump the dev-minor-patch group across 1 directory with 4 updates
- Tooling: actions.ts no longer trips domain-exports:workflows; prune the rule
- AI: the Welcome a new lead eval case and org-hub e2e follow the recipe to New lead
- Workflows: a form-fill reply leaves without List-Unsubscribe, a mailing with it
- AGL 3461: wip — paused mid-work (second wip: specs + typecheck were green)
- AGL 3458: wip — paused mid-work (workflows-side spec move in progress)
- AGL 3458: wip — form leads in campaigns, lead-aware CRM steps, merge tags, filters
- AGL 3461: wip — page touch, declared utm labels, campaign visits, inbox links
Share this article
We're building the open web platform. Follow along as we ship — and tell us what you need.