v1.0.0-beta.8
Released to production on August 23, 2026 at 01:25 CDT. See every commit in this release on GitHub
This version reached production in 4 deploys; the last landed on August 23, 2026 at 22:40 CDT.
New
- API: /v1 records a shipment through a plugin capability, not a copy
- Operations: the two page checks watch a real render again
- Admin: support refunds up to a cap, and the cap cannot be split around
- Console: console search finds what it lists, and says what it looked at
- Besigner: a border is three choices, not a line of CSS
- Besigner: an animation is eased, and a row of cards arrives one at a time
- Console: revenue gets its charts, designed for the data it has today
- Console: presence gets the one route to its own documentation
- Plugins: disabling a plugin names what depends on it first
- Console: revenue attributes by listing, publisher and host, with losses named
- Co-editing: a list row and a detail page say who is already inside
- Besigner: the element detail floats over the canvas, and the dialog panes it
- Besigner: hover, active, focus and disabled are styled from the panel
- Besigner: give the box diagram its texture back, and a dark mode
- Besigner: the element picker draws the element, not just its name
- Besigner: formatted text is owned by the canvas, and unformatting is explicit
- Plugins: every element says what it is for, not just what it is called
- Marketplace: element metadata is attested and reviewed like listing copy
- Sites: member pages are served only when a site turns user accounts on
- Besigner: the canvas leaf itself is the text editing surface
- Besigner: a chosen element explains itself before you confirm it
- Console: the issue reporter says what it is for and asks per-kind questions
- Co-editing: list rows can show who is already in a document
- Besigner: the elements panel searches with the dialog's ranking
- Besigner: one box styler, on the theme spacing scale, with unit docs
- Co-editing: one request tells a list who is already in each document
- Co-editing: a room is one VERSION of a document, matching the mirror
- Co-editing: the rules permit a version-scoped room, additively
- Besigner: canvas text is edited in place, in its own type
- Security: a takedown keeps holding when Firestore does not answer
- Collections: a lead entries block can stop at page 1 of the listing
- SSO: an org owner outside the identity pool is the way back in
- SSO: a verified domain is re-checked weekly, and a resolver blip never revokes
- Legal: the two public §512 intakes email the receipt they promised
Fixed
- Commerce: two concurrent specs stop failing typecheck
- Tooling: the rotation runbook may name the tokens it says to delete
- Commerce: checkout holds the units it is about to sell
- Operations: the env-isolation guard is wired, falsifiable and cannot hold a value
- Tooling: the container census can see a Container INSIDE a Container
- Tooling: a docs edit cannot be committed with stale registries
- Besigner: the Remove formatting button stops overprinting the Text legend
- Operations: the render canaries are configured, not wired to aglyn.com
- Tooling: the self-host ratchet tightens to what firewall-posture actually holds
- Console: the Assist docs index is back in sync with apps/docs
- Plugins: an image that is not the lead image waits its turn
- Accounts: an SSO avatar is the user's to set, and to remove
- Billing: a plan-targeted flag reaches the usage sweep's invoice
- Console: the Assist docs index is back in sync with apps/docs
- Operations: the tenant health endpoints are bypassed, not challenged
- SEO: error screens stay out of the sitemap
- Billing: the stored Stripe customer id is keyed by livemode
- Billing: a per-org grant of native checkout reaches the checkout route
- Operations: a health check that answers HEAD can go red
- Besigner: an undo reaches the styles panel's numeric fields too
- Operations: the plugin loader gets its console bypass, and the plugins gap gets a verdict
- Accounts: the SSO button keeps the page the user was going to
- Besigner: depth stops accumulating, and search results render open
- Billing: a discounted signup still puts a card on file
- Console: the switchers find the documents they list, like search does
- Organizations: accepting an invite at a second address does not bill a second seat
- Console: a presence route wires its 423, and a metered guard stops reading prose
- Besigner: the emphatic easing is named for where it lands, not what it passes
- Documentation: Aglyn Assist retrieves from the documentation that shipped
- Besigner: the padding chip yields when its band cannot hold it and the value
- Documentation: the help registry regains the plugin-stylesheets anchor
- Plugins: the plugin-styles registry key is an escape, not a raw NUL
- Sites: the console ad-tag gate reads code, not the comment explaining it
- Plugins: a plugin's CSS reaches the canvas, not only the published page
- Besigner: the element dialog is wide, and the two panes split it evenly
- Besigner: a keystroke can no longer empty the Raw JSON editor
- Marketing site: one sanitizer governs the published page, inline CSS included
- Plugins: the cascade warning says marketplace plugins are not covered
- Assist: a thread does not fall off a cliff after its first answer
- Tooling: a rules deploy made ahead of the promotion is reported, not called drift
- Tooling: the exemption tripwire counts the list that shipped
- CI: a silent cron reaches the uptime probe, which is the only thing anyone reads
- Tooling: the bypass-header guard finds the scripts, instead of naming three
- CI: the console cron POST is not answered with a firewall challenge
- Console: the plugins gate spec mocks the hooks a9306382c added
- Besigner: the border label gets a ground, and auto joins the margin list
- Besigner: the canvas cascade is layered like the published page
- Besigner: the state pills sit on one line, at every panel width
- Plugin UI: the lead image stops claiming a priority it cannot know
- Besigner: the element preview carries the site's brand, not the console's
- Console: the gap stops comparing two instants, and totals name their orgs
- Besigner: stripe only the border, stop the bleed, tint the selection
- Besigner: a wrapped inline element is outlined per line box, not by one rect
- Marketplace: element conduct covers text that RANKS, not only text that renders
- Console: assist citations reach a reader
- Besigner: an element whose plugin is off for the site is not offered
- Console: the contracted sweeps are bounded, and the pre-mirror invoices are recorded
- Besigner: the element preview draws something, and hovering stops flickering
- Plugin UI: revert sizes="auto" — it decided layout, not just delivery
- Console: the revenue sweeps read the fields their indexes cover
- Besigner: the selection chrome stands down while text is edited in place
- Besigner: an edit to formatted text on the canvas actually lands
- Console: the org plugins page reads the stored set, not the defaults
- Accounts: a session restored from persistence is put back in its own pool
- Besigner: text being edited in place can be clicked, dragged and selected
- Console: the sign-in bounce ends in an explanation, not another redirect
- Platform: preset registration keeps every field, and tags are real
- Consent: withdrawing advertising deletes the advertising cookies
- Console: the copyright line stops shouting
- Legal: the cookie inventory declares the advertising vendors it can load
- Console: the footer says one thing, in links rather than buttons
- Besigner: draw the box model flat and quiet, the way devtools does
- Tooling: the hourly sweep was blocking every 15-minute gate behind it
- Besigner: an echo of your own edit is not a peer edit, so undo works again
- Tooling: the continuous gate declared a full input and then ignored it
- Tooling: the continuous gate's verdict had nowhere to land
- Console: the consent preview stacks its own menu and asks about advertising
- Tooling: the gate cloned node_modules and never installed them
- Besigner: an inline run is edited in a box, never over its neighbor
- Besigner: a rich text line break survives into the plain children prop
- Besigner: clearing history drops the redo stack too
- Besigner: collaborators in a converged room can both save
- Sites: the "Made with" badge mark reserves its own space
- Besigner: no recovery prompt while others are in the room
- Console: your own session rings dashed again, to match the canvas outline
- Besigner: clicking out of an inline text edit applies it
- Console: every chip in the presence stack occupies the same space
- Security: two auth routes whose own docblocks named a gate they lacked
- Accounts: an IdP address is stored only when it carries a street
- Security: three server-owned org fields the coverage guard could not see
- Security: the presence broker mints for the site it proved, not the org
- Security: a redirect guard asks the URL parser, not a list of tricks
- Documentation: the consent default is declared before the tag, not after it
- Sites: the gate goes green on typecheck and lint
- Security: the rules guards can now see a file that does not parse
- Security: a domain lock asked for read-only is refused, not silently upgraded
- Console: the new enforcement copy names the configured brand
- Plugins: a background job asks the lock before it acts for a host
- Documentation: the status page can go red, and says so in three words
- Sites: an EMPTY designed 404 falls back instead of rendering nothing
- Operations: the render canary gets a subject the platform owns
- SSO: the re-verification route spec is a module, not a global script
- Tooling: two guards go green on main
- Console: a custom console domain no longer keeps a refresh token on disk
- Operations: the uptime probe watched a hostname that serves no page
- SSO: the card stops asking for a break-glass account the pool cannot hold
- SSO: enforcement and certificate rotation are reachable in the console
- Sites: the legal-intake receipt counts toward the email meter
- Accounts: a passkey can be revoked, and the clone flag now blocks
- Media library: making a file private revokes the link already handed out
- Privacy: the export redactor reads a value's shape, not a list of names
- Security: a media document's storage fields are server-owned, in the rules too
- Tooling: the emulator-guard sweep runs the project the switcher spec landed in
- Security: a media document can no longer address someone else's object
Performance
- Dependencies: fuse.js stops shipping to every visitor
- Dependencies: a UA parser nobody imports leaves the eager graph
- UI components: a hook nobody calls stops shipping its polyfill
- Plugin UI: a fluid image asks for the slot it has, not the whole viewport
- UI components: the pan/zoom canvas stops shipping to every visitor
- Commerce: stripe.js stops loading on pages with nothing to buy
Reverted
- Besigner: put the box styler back the way it looked, and fix the four things
Changed
- Console: the revenue page reads summary first, detail last
- Besigner: delete the second box styler's files
Documentation
- Releases: six release screenshots are captured, and the other ten say why
- Besigner: the five August 23 canvas screenshots are captured, not planned
- Operations: the runbook repoints the two page checks at the render canaries
- Operations: the scheduled-jobs runbook creates the check it claims to
- Operations: the loader break was latent, and the runbook now says so
- Accounts: several addresses per account is documented, and its guard can fail
- Besigner: the help index carries the easing and stagger sections
- Console: issuing a refund has a runbook, and the card points at it
- Screenshots: capture specs for the canvas surfaces, and one that must wait
- Console: the assist index picks up the state-chip rewording
- Besigner: the element list is searched and explained, and Assist shows its sources
- What's new: tonight's canvas work is findable by someone not looking for it
- Besigner: text editing is documented as it now works, and says what survives
- Besigner: the spacing ladder in the docs is the ladder that shipped
- Besigner: co-editing says which room you are in, and who a list row shows
- Plugins: say what does and does not require a host ABI bump
- Releases: the continuous gate reports commit statuses, not an issue
- Build: two more ways a page measurement lies
- Releases: the gate installs when the lockfile moves, and snapshots itself
- Build: two more ways a page measurement lies
- Releases: the gate installs when the lockfile moves, and snapshots itself
- Build: how to measure a published page without fooling yourself
- Releases: five more release screenshots, and the one that was already wrong
- Consent: the sweep comment stops calling _gac an advertising prefix
- Email: the security@ auto-reply acknowledges receipt and promises no window
- Legal: auto-reply bodies for the six intakes, written against what we published
Behind the scenes
- Platform: a featured entry comes off the ROUTE-FILTERED set
- Dependencies: next 16.3.1 -> 16.3.2
- Billing: the console's embedded checkout imports symbols Stripe really exports
- Repository: the agent files Next generates on dev startup are ignored
- Console: the stale-session dismissal is guarded where it can actually break
- Dependencies: declare @dnd-kit/utilities and dnd-core
- Tooling: the shared-util-dom test target is added without reflowing the file
- Tooling: the user-accounts backfill plans, guards and verifies its writes
- Build: migrations.json is generated, not committed
- Commerce: stripe imports are checked against the real package
- Console: a besigner that ships without presence now fails the suite
- Dependencies: bump the dev-minor-patch group with 4 updates
- Dependencies: bump eslint-plugin-storybook in the linters group
- Security: pin the SEC-C1 closure, which nothing was checking
- Sites: a route that skips the lockdown cannot go unnoticed
- Console: the panic button is re-drilled and its numbers re-measured
- Launch: the Week-One pre-flight is a script that can go red
- Console: the lockdown drill builds the org and site it locks
- CI: env isolation reports weekly instead of failing daily
Share this article
We're building the open web platform. Follow along as we ship — and tell us what you need.