← All updates

CHANGELOG

August 2026

Erase an account from the staff console. 1109 changes in all: 314 new, 521 fixes, 19 performance, 1 reverted, 20 changed, 108 docs and 126 behind the scenes.

The Aglyn Team · Aug 2026

Everything that reached production in August 2026. See every commit from this month on GitHub

The releases announced at the time:

  • Local drafts — The builder keeps a local draft, so a crash or a stray reload cannot take unsaved work with it.
  • Plugins in the palette — A plugin can declare canvas elements that show up as real entries in the element palette.
  • Content security — The console enforces its content security policy for every session, not just an opted-in one.
  • Verified publishers — Marketplace publishers can request verification, and staff can decline it.
  • Components with props — A reusable component can declare props that vary per instance, so one component serves many pages without becoming a fork of itself.
  • Link containers — A container that is itself the link, instead of a link wrapped awkwardly around one.
  • Apex domains — A bare domain like example.com can now be connected directly, not just the www subdomain.
  • Domain headroom — See how many domains your plan allows, and how many you have used.
  • Search visibility — Decide what search engines may index, site-wide or page by page.
  • Themes on the marketplace — Publish or install a site theme, applied as a patch over the publisher’s rather than a copy of it.
  • Long-form documents — Write a page as markdown and get a contents list built from its own headings.
  • Live co-editing — See other people’s changes, cursors and selections in the builder as they happen.
  • Media references — Page elements store a reference to an asset rather than a fixed URL, so an image stays connected to the library that manages it.

New

  • Staff: erase an account from the staff console
  • Billing: charge tax — Stripe automatic_tax on
  • Account: close your own account, from Manage Account
  • Billing: say when invoices use a different address than the form
  • Accounts: send the auth emails ourselves — no Firebase templates left
  • Signup: say which plan the visitor picked
  • Signup: a Google sign-up keeps the plan it came for
  • Marketplace: rejections carry a category, not just prose
  • Marketplace: a changelog buyers can read, and only for approved versions
  • Support: plans commit to a response time, and the clock is real
  • Support: ticket support starts at Pro; the gates read the ladder
  • Operations: health endpoints and an uptime probe, before any SLA number
  • Operations: a status page that survives the outage it reports
  • Sites: publishing drops that page's cache instead of waiting it out
  • Sites: measure the render path instead of guessing at the cold start
  • Console: publishing a layout now drops every screen inside it
  • Sites: apply scheduled publishes on a beat instead of waiting for a visitor
  • Besigner: make the layout slot look and read like the design
  • Themes: rotate the palette so primary is the accent
  • Besigner: a Screen Link can render as a link, not only as a button
  • Besigner: a border on one edge, not all four
  • Besigner: grid, box, paper and card become first-class elements
  • Besigner: accordion, tabs, image list, pagination and breadcrumbs
  • Besigner: register the new elements and document the catalog
  • Besigner: copy an element in one document and paste it into another
  • Console: preview every besigner document, and preview locally
  • Console: orgs set up enterprise SSO themselves, proving the domain first
  • Sites: measure the boot that happens before our code loads
  • Besigner: the File menu's "New version" now creates one
  • Marketplace: a takedown strips the Verified badge
  • Besigner: dimension attributes get a number box and a unit picker
  • Besigner: style lengths get a number box and a unit picker too
  • Media library: page elements store a reference to the asset, not a URL for it
  • Marketplace: publishers can ask to be verified, and staff can decline
  • Csp: collect the violations the report-only policy has been discarding
  • UI components: add Link Container — a container that is itself the link
  • Domains: report headroom against the plan's domain ceiling
  • Security: the console CSP enforces script-src for everyone, not one armed session
  • Billing: move the Stripe keys off the org doc, out of a collaborator's reach
  • Billing: stop mirroring the Stripe keys back onto the org doc
  • Billing: add --dry-run so the env block can be refreshed without creating prices
  • Marketplace: own the patch — resolve an installed artifact as base ⊕ patch
  • Themes: a host theme can set toolbar height, the only lever MUI leaves open
  • Console: nav height is editable per breakpoint in the theme editor
  • Marketplace: a site's theme is publishable and installable, with two ways back
  • Themes: a site's theme changes are a patch over the publisher's, not a fork
  • Marketplace: uninstall says what it breaks before it breaks it
  • Sites: a closed host.* namespace so publisher templates fill themselves in
  • Sites: business contact details, and a preview of what they fill in
  • Email: sent emails resolve host.* from the site that sends them
  • Plugins: a manifest can declare how its props are edited
  • Plugins: publish a pinned plugin's declared props to the editor
  • Besigner: a placed plugin's settings are fields, not a JSON textarea
  • Designer: insert host variables from the binding picker
  • Plugins: a plugin version can declare canvas elements
  • Plugins: declared elements become real palette entries
  • Besigner: an empty screen inside a layout gets a real drop target
  • Components: a reusable component can declare props that vary per instance
  • Besigner: the Attributes panel edits a component instance's declared props
  • Components: declare a component's props from the component editor
  • Besigner: a component instance renders its content on the canvas
  • Console: land a no-op service worker so the offline shell has a baseline
  • Console: cache the static shell, and nothing that belongs to a user
  • Console: ask before swapping the build out from under a live page
  • Besigner: keep a local draft so a crash can't take unsaved work
  • Console: a branded offline page, and sign-out takes the caches with it
  • Sites: a customer installs THEIR site, not ours
  • Besigner: live co-editing — changes, cursors and selections in real time
  • Besigner: a reusable component can carry its own icon, shown on every instance
  • Besigner: author a long document as markdown, with a contents list built from it
  • SEO: decide what search engines may index — site-wide, and per page
  • Domains: an apex domain can finally be connected
  • Sites: a site with a custom domain answers to one address, not two
  • Marketing site: extract the solutions and use-case copy from Figma
  • Marketing site: extract the pricing copy from all four Figma frames
  • Marketing site: generate the pricing tables from plan-entitlements, not Figma
  • Marketing site: generate the scale-strip and the design's Enterprise column
  • UI components: opt-in lazy tab panels so big tab sets stop shipping every panel
  • Sites: withhold node definitions for lazy panels that never mount
  • Sites: fetch withheld lazy-panel nodes on demand instead of shipping them
  • Billing: honor the marketing plan deep-link end to end
  • Themes: back-fill dark-scheme node slices, dry run by default
  • Sites: cache the render path's firestore reads behind publish-busted tags
  • Sites: tag-cache the sitemap and rss payloads, restore cdn cache headers
  • Besigner: refuse a stale save server-side and stamp-proof the guard
  • Console: guarded saves + co-editing in layout, component, template, email editors
  • Site data: signed edit-access tokens for the tenant admin bar
  • Feature flags: release_edit_bar gates the tenant admin bar, dark by default
  • Console: first-party edit-access broker for the tenant admin bar
  • Sites: edit-access admin bar on published sites, lazy and flag-gated
  • UI components: image elements get decorative, tooltip and loading controls beside alt text
  • Platform: mergeNodeSx merges an sx override with cascade semantics
  • Themes: palette shade derivation is scheme-aware and aa-aware
  • Besigner: instance root style overrides render on every surface
  • Besigner: the Styles panel styles an instance via its override layer
  • Besigner: an instance offers edit-component, opening its besigner in a new tab
  • UI components: tab panels mount on first selection by default, with an ssrPanels escape hatch
  • Platform: map a grafted instance leaf back to the declared prop that feeds it
  • Besigner: double-click edits a component instance's prop-fed text and image inline
  • Staff: resolve org-detail uids to people and label the summary card
  • Console: in-place "sign in again" re-auth modal keeps the route on session loss
  • Console: security alert email on new-device sign-in; passkey alert ready
  • Console: passkey (WebAuthn) sign-in via the custom-token bridge
  • Marketplace: publisher profile logo, support contact and social links
  • Console: staff org detail carries override, suspend and erasure, plus metered usage
  • Console: per-site plugin enablement behind one resolver, and a host Admin area
  • Markdown lite: > blockquotes parse and render in all five renderers
  • Markdown lite: 1. ordered lists parse and render in all five renderers
  • Console: let an admin delete a collection nothing depends on
  • Plugin UI: give Form Field the placeholder the frames' label-above forms need
  • Sites: filter a collection listing by category at /{collection}/category/{slug}
  • Plugin UI: let a Tabs tab carry a screen link so a content-tabs row navigates
  • Besigner: style any element inside a component instance, not just its root
  • Besigner: a gradient control for the Styles panel, and no more silent drops
  • Console: lead the apex with an ALIAS so no customer zone pins one edge address
  • SEO: a social image per screen and per site, emitted absolute with its size
  • Besigner: a Link property picks a screen, so a prop-driven link survives a rename
  • Billing: meter only usage beyond a plan's included bands, and stop walling forms
  • Billing: give the metered price a yearly twin so annual plans bill overage
  • Tooling: catch an App Router graph crossing at review time, not at build
  • Console: surface fromCache, and guard the writes staleSession could never reach
  • Console: give tickets and the forum a surface each, still under Support
  • Tooling: lint the link-element invariant, derived from what each component declares
  • Themes: name the three tile tints as a first-class palette entry
  • Platform: let a component hide the parts a page does not want
  • Console: unfurl a marketplace listing as itself, not as the console
  • Console: put the social image on the screen detail page's SEO card
  • Console: claim a console domain and its twin in ONE transaction
  • Sites: re-subscribe the three listener hooks when the session heals
  • Accounts: seal setPersistence on the instance, not on six call sites
  • Sites: surface {{pagination.*}} so an authored list template can build a pager
  • Tooling: lint the listener-row spread so there is never a fifth
  • Media library: opt-in ?download=1 forces a real download off the CDN
  • Besigner: let a node change containers by clicking
  • Console: tell the author the network dropped before a save does
  • UI components: let a Screen Link wear the button styling without announcing as a button
  • UI components: let an author emphasize a phrase inside a sentence
  • Tooling: teach no-unguarded-loading-hook the hook that needed it most
  • Tooling: fail when a marketing page brings back a retired color
  • Console: pin a custom console domain to ONE org, and drop it on downgrade
  • Sites: put the site's own favicon in the tab
  • Billing: meter email sends and workflow runs per org — record, don't price
  • Console: make "is a template" a property of the screen
  • UI components: let a Button wear its own styling without announcing as a button
  • Billing: count every email for cost, cap only the campaigns
  • Tooling: name the node when a retired color comes back, and stop minting one
  • Tooling: re-derive the marketing container census instead of re-counting it
  • Plugins: give Related Posts a cover toggle and a card grid
  • Plugins: give Entry Meta a byline, an avatar and a date format
  • Console: let the DAM take documents, from one allowlist
  • Console: make a DAM delete undoable, which needs a tombstone
  • Platform: give a media folder a path, so a picker can tell two Covers apart
  • Console: meter org-library bytes, and leave the charge switchable
  • Console: sanctions/OFAC geo-block on the console surface
  • Console: clickwrap acceptance at every signup door
  • Fbserver: env override for the admin firestore database
  • Sites: visitor consent tool with geo modes
  • Console: legal document set v2 — republished pages archived and pinned
  • Console: backup state answers on /api/health/backups
  • Site data: the media CDN answers Range, so video rides it too
  • Console: the panic button — four-scope lockdown
  • Tooling: fail when live Firebase rules drift from HEAD
  • Console: every org-scoped route answers the 423, or says why not
  • Plugin UI: collection entries can search the page it rendered
  • Platform: feature-scope lockdown
  • Console: subscription updates and reused customers collect tax too
  • Console: alarm on org-creation volume
  • Console: first-party error beacon to Error Reporting
  • Platform: take rate from entitlements + sale-time gates
  • Marketplace: collect sales tax on marketplace purchases
  • Console: legal document set v3 — registered agent live, clickwrap re-pinned
  • Platform: typed GA4 event taxonomy
  • Console: the lockdown audit trail records the expiry
  • Platform: the deferred CTA, outbound and SSO events
  • Console: legal v4 — disclose phone collection and its outreach/dunning uses
  • Documentation: the documentation site reports to the consolidated property
  • Console: a do-not-contact list §11 can actually keep
  • Console: staff can see the verdict they can never receive
  • Platform: send first_publish
  • Platform: quarantine one file, not the host
  • Besigner: edit the Markdown element's document with the WYSIWYG
  • Platform: freeze the writes, keep serving
  • Besigner: edit a Markdown element in place on the canvas
  • Analytics: stamp internal traffic on staff and impersonation sessions
  • Platform: declare the consent-mode default behind the gate
  • Console: per-org release flag overrides
  • Platform: tell both audiences a form is paused
  • Console: show a disabled file as disabled
  • Commerce: close the merchant's funnel with a storefront purchase
  • Console: give asset quarantine a staff form
  • Csp: measure an img-src before enforcing one
  • Platform: alert on a rate-limiter degraded window
  • Platform: publish the publisher agreement and re-open acceptance
  • Console: show the member phone staff already collect, with its opt-out
  • Csp: give published sites a collector, then measure img-src
  • Console: render the quarantine deny list, and release by key
  • Tooling: seed a multi-site demo org from brand packs
  • Commerce: report the shipping the shopper paid
  • Site data: name the must-already-exist write
  • Platform: audit staff org overrides with a reason
  • Console: measure what the script-src https: blanket is covering
  • Console: gate the staff org override server-side
  • Commerce: show a merchant which destinations their zones refuse
  • Commerce: tell a merchant which money was taken and which they gave back
  • Tooling: compare the Firestore index file against the live project
  • Commerce: put a canceled order's stock back on the shelf
  • Console: enterprise provisioning charges sales tax
  • Console: record every own-account charge so a tax return can be filed
  • CI: give the seven homeless tools guards an active workflow
  • Commerce: give the flagged restock its answer buttons
  • Commerce: re-ask the fulfill and delivered transitions under the write
  • Console: hint cookie + silent edit-access probe for the admin bar
  • Sites: auto-arm the admin bar from the console's presence hint
  • Sites: top-fixed admin bar with real context
  • Sites: count honeypot hits so the form bot rate is measurable
  • Documentation: first-party error beacon on docs.aglyn.com
  • Sites: brand the admin bar with the real Aglyn mark
  • Sites: link the admin bar's connected-as identity to the console account page
  • Platform: warn the Styles panel author of a third-party url() host
  • Sites: collapse the admin bar into phone-width chrome
  • Console: surface per-host form refusals on the staff org view
  • Marketplace: pin publisher-agreement acceptance to the snapshot bytes
  • Console: surface the honeypot spam counter beside the staff refusal flag
  • Console: persist CSP violations as bounded daily counters
  • Console: staff read-back for the durable CSP counters
  • Commerce: mint an order per physical subscription cycle
  • Tooling: reconstruct pre-AGL-1711 buy-now order records from Stripe
  • Tooling: reconstruct unrecorded subscription sale amounts
  • Tooling: backfill the missing subscription invoice ledger
  • Tooling: rebuild contact RFM by SET from every sale source
  • Platform: show the honeypot catch count in the owner's inbox
  • Legal: doc-vs-live drift checker for the legal Google Docs
  • Legal: ready-to-paste markdown-lite block + TOC preview for legal updates
  • Commerce: reverse the seller's share of a lost dispute
  • Site data: edit-hint tokens + ONE shared edit-access gate
  • Console: login-time bounce plants the .aglyn.app editor hint
  • Sites: silent admin-bar auto-arm on *.aglyn.app via hint exchange
  • Sites: put today's first-party analytics on the admin bar
  • Commerce: draft orders claim the attempt — a retry replays the one payment link
  • Sites: show the site's own favicon on the admin bar
  • Commerce: reserve claims the attempt — a retry replays the session URL
  • Sites: user menu + chrome polish on the admin bar
  • Commerce: cart checkout claims the attempt with one derived key per Stripe object
  • Commerce: buy-now claims the attempt — a retried subscribe cannot double-enroll
  • Console: weekly Firestore GCS export + separately-labeled exports health check
  • Console: the subscription checkout gets its idempotency key
  • Analytics: beacon captures utm source/medium/campaign, capped per day
  • Analytics: real-user Core Web Vitals -> GA4 on console + tenant surfaces
  • Analytics: cookieless approximate visitors, counted once per tab per day
  • Console: utm breakdown + pro-gated per-screen comparison table on host analytics
  • Analytics: 400-day ttl retention on analytics day docs; rollups decided against
  • Analytics: ga4 refund + subscription_canceled events
  • Marketplace: full refund reverses the ga4 purchase at platform net
  • Console: org_plan + org_role ga user properties for the active workspace
  • Analytics: content_group stamps the surface — marketing, docs, console
  • Analytics: qualify a cta's content_id with the destination plan
  • Console: downgrades wait for the period end — upgrades stay instant
  • Console: a quarterly TX return is computable, and erasure can never eat it
  • Marketplace: a lost chargeback revokes, nets GA, and pulls back the seller share
  • Console: the leave path runs through a funnel — survey, downsell, bounded winback
  • Console: docs-grounded in-console assist helper, phase 1
  • Console: a customer can actually reach the retention funnel
  • Commerce: tell a merchant when a lost dispute claws back their payout
  • Console: both leave paths run the funnel, and a scheduled downgrade is visible
  • Console: the retention funnel reports itself to GA4
  • Console: tier visibility is asymmetric — upgrades lead, lower tiers fold away
  • Console: the TX return's Webfile view — figures, verdict, working papers
  • Console: the Texas sales tax return gets a staff page
  • Plugin UI: the prose case is a Container preset at stock MD
  • Plugin UI: the prose case is a Container preset at stock MD
  • Platform: the POS register add-on is a POOL, allocated per site
  • Console: /v1 serves orders, products and media
  • Commerce: decompose storefront tax, measured not inferred
  • Console: overage protection and a warnable org library, before any bill
  • Console: help tips on the three surfaces that shipped without one
  • Commerce: record storefront tax where a return can see it
  • Commerce: record storefront tax where a return can see it
  • Monitoring: a heartbeat makes error-beacon silence detectable
  • Console: the health probes get a screen — Staff → Health
  • Tooling: repeatable Stripe webhook health assertion
  • Monitoring: a heartbeat makes error-beacon silence detectable
  • Console: the health probes get a screen — Staff → Health
  • Tooling: repeatable Stripe webhook health assertion
  • Console: the rollup states its own billing semantics
  • Console: the return reports storefront tax, in its own three buckets
  • Console: the org library's own allowance, on the card
  • Monitoring: billing gets a standing alarm, with Stripe as the denominator
  • Console: the filing surface cannot be filed past storefront tax
  • Console: the health screen gains the two probes it was missing
  • Monitoring: a missing metered price is now a 503, not a silent skip
  • Console: purchased POS register seats get somewhere to go
  • Console: a refused signup is now counted, not just refused
  • Console: invite sending is rate limited — the free spam cannon
  • Assist: the Anthropic subprocessor precondition is a red test, not a note
  • Commerce: the storefront takes payment on the merchant's own site
  • Commerce: the shopper pays without leaving the merchant's page
  • Sites: a stranger can finally tell us a site is phishing
  • Security rules: the abuse-report queue is staff-read and nobody-write
  • Console: the abuse queue reaches staff, and the report reaches the queue
  • Console: a saved profile image reaches the org roster
  • Console: staff user erasure gets the button its own CLI promised
  • Platform: the $512 put-back clock and strike ledger, as arithmetic
  • Erase: a deletion instruction now survives a restore
  • Assist: the level-2 view registry, and a proposal that cannot write
  • Sites: a locked-out customer can answer a takedown
  • Assist: level 2 guides from the current screen, and cannot write
  • Console: personal-data export, held in step with erasure by a guard
  • Assist: the prose expires, the signal does not
  • Assist: the two-depth answer and a confirm card that only navigates
  • Site data: ask what a domain is DOING, not whether the POST worked
  • Console: the put-back clock and the strike ledger, in the queue that caused them
  • Console: the counter-notice queue and the strike count, on the page
  • Console: the domain card says which of five states it is in
  • Console: metered storage gets the opt-in switch it kept pointing at

Fixed

  • Accounts: read SSO names from sign_in_attributes, where SAML puts them
  • Erase: the erasure audit under-reported what it deleted
  • Account: the Close-account card drew with no title
  • Console: stop telling people to sign in again when that cannot help
  • Accounts: expire the sign-out tombstone after a day, not fourteen
  • Organizations: await the workspace-domain attach, and bound it
  • Accounts: six more surfaces could not see an SSO user
  • Staff: price an enterprise deal from measured cost, not $2 a site
  • Accounts: five more places read a name claim SAML never sends
  • Signup: reject an org name that cannot become a workspace
  • Commerce: an SSO seller was never told they made a sale
  • Staff: "Inherit" now actually removes a feature override
  • Staff: take two rule-gated LISTs off the client
  • Commerce: print from the opener, not an injected inline script
  • Data: the dataset dialog's site list was denied, not partial
  • Support: the community forum was labeled "Marketplace forum"
  • Operations: the uptime probe names the service it is reporting on
  • Support: scope every support call to the CURRENT org
  • Console: the chooser was skipped on a cached org list, and an unknown slug span forever
  • Build: the bundle analyser was disabled in the only build worth analyzing
  • Console: stop offering org rows on pages that name no org
  • Console: support tickets and forum never loaded — a GET carried a body
  • Cloud functions: add the bookings index its scheduled job has always needed
  • Console: the bare /layouts URL 404'd instead of opening the layout list
  • Console: stop charging the screen allowance for screens nobody authored
  • Console: the Free plan card promised a price we can still change
  • Themes: customizing one color no longer repaints the whole palette
  • Themes: the selected tab was near-invisible in dark mode
  • Console: the usage meter counted screens the plan never charges for
  • Console: the theme editor invented its defaults instead of reading them
  • JSON editor: fill the viewport and follow the app's color scheme
  • Themes: deep-merge component overrides so a leaf edit keeps the rest
  • Console: return the preview's variant demos to the theme color
  • Console: the 'Renders inside' label sat on top of its value
  • Themes: default the remaining accent components to secondary in dark
  • Themes: the override whitelist had fallen behind the components we style
  • Console: a denied read only blames the session when the evidence says so
  • Themes: rotate palette TOKEN references too, not just color props
  • Console: heal a tombstoned host that vanishes from a non-empty list
  • Besigner: canvas chrome follows the slate, not the accent
  • Besigner: promoting a component left its own document on a frozen copy
  • Besigner: hide Screen Link's button-only attributes in Text link mode
  • Marketplace: stop filtering browse on a mutable field
  • Besigner: a menu label is navigation, so stop shouting it
  • Besigner: the per-edge border labels don't fit at quarter width
  • Besigner: settle every canvas-chrome surface on the slate
  • Besigner: the List family and Drawer were missing props MUI has had for years
  • Console: type the promotion spec's mocks so main typechecks again
  • Marketplace: heal a tombstoned dataset on the scoped browse queries
  • Besigner: the canvas and preview painted MUI blue, not the brand
  • Besigner: the color picker's Secondary tokens handed back Primary
  • Sites: the render ran twice per request and timed out cold
  • Preview: graft reusable components so shared chrome renders
  • Icons: persist the picked icon's SVG path so it renders off the editor
  • Csp: send the nonce under both header names, and measure what arrives
  • Csp: enforce a nonce policy on the console, and stop shadowing the nonce
  • Csp: default script-src back to report-only, enforceable per session
  • Media library: pick the stable CDN path, not the raw storage URL
  • Besigner: keep field values and menu labels inside their boxes
  • Besigner: graft reusable components into the canvas layout chrome
  • Marketplace: a revoked version stopped claiming a human had read it
  • Account: stop offering to save over a profile we could not read
  • Publishing: record a refused schedule instead of leaving it due forever
  • Sites: say when the revalidate cap drops paths instead of discarding them
  • Besigner: the selection outline goes back to pink, the chrome stays slate
  • Besigner: the styles panel's promised ? appears, on the five fields it can help
  • Forms: a color field's help tip rendered nothing at all
  • Console: where-used decodes compressed nodes instead of answering "used nowhere"
  • Email: a picked image resolves to an absolute URL so it renders in the inbox
  • SEO: the sitemap and feed name the site's own origin, not the caller's host
  • SEO: bound the sitemap and feed caches to the same 60 s every page uses
  • Marketing site: the copy applier stripped every heading's component prop
  • Publishing: publishing a component drops the cache of every screen that shows it
  • Marketing site: a copy-review note tripped the price-permanence guard by quoting it
  • Sites: interactions authored inside a reusable component now bind on the live site
  • UI components: a cleared button color 500'd every /product/* page on the live site
  • Vercel: stop the plugins project deploying on every push to main
  • Vercel: diff the whole push range, not just the tip commit
  • Marketing site: the stat band published "stat" as the figure on all eight product pages
  • Besigner: the Drawer placeholder reserved 280px in a row it ships nothing into
  • Besigner: lift the Drawer canvas chip out of the design surface
  • Besigner: the Drawer marker still budgeted space in the nav row
  • Plugins: say why realm plugins are off locally instead of returning silently
  • Billing: a dead price id says which env var, not 'Stripe checkout failed'
  • UI components: the Link Container dropped every style it was given
  • Themes: make the Toolbar honor disableGutters
  • Rendering: every Accordion on every published site had an empty panel
  • UI components: the Image element discarded every style the author gave it
  • Sites: drop the report-only CSP that could never be satisfied
  • Staff: confirm the org read before rendering an org as empty
  • Plugins: refuse to save settings seeded from a stale cached read
  • Console: keep MUI's short-landscape toolbar rule when a host sets nav height
  • Themes: resetting an overridden field left the editor showing the old value
  • Console: a partial toolbar mixin dropped the breakpoints it did not name
  • Console: the dirty check could not see a key-order change that alters the CSS
  • Staff: serve org detail from the Admin SDK, not a rule-gated client read
  • Console: the three new cards were missing their help affordance
  • Console: refuse four more writes seeded from a stale cached read
  • Besigner: restore the GridList import the barrel no longer re-exports
  • Sites: raise the revalidate path cap, and say when a publish leaves pages stale
  • Tests: make the pooled-Buffer fixture deterministic instead of luck-dependent
  • Preview: give plugin blocks the site they render on, and refuse their writes
  • Data: a partial write to a version doc no longer wipes its nodes
  • Accounts: a refused session mint no longer leaves a sign-out tombstone standing
  • Csp: allow 'unsafe-eval' in development only, so React can debug
  • Billing: count team seats server-side so the banner stops showing a denied number
  • Billing: a seat count nobody could read is not zero, and not a client roster list
  • Preview: a form submitted from Preview was a real submission
  • Co-editing: start App Check on the presence app, and key presence per tab
  • Co-editing: an SSO colleague was listed by email, not by name
  • Console: adopt a waiting service worker on load instead of nagging forever
  • Console: a cold-loaded editor deep link failed, and Try again re-failed it
  • Accounts: an empty duplicate __session cookie no longer shadows the real one
  • Billing: stamp the workspace on Stripe customers, and reuse one per org
  • Billing: tag invoices with the org, and make the backfill runnable
  • Besigner: an instance is labeled by its component, not "Reusable Component"
  • Console: preview and screen view could hang on a read that never settles
  • Besigner: an unacknowledged write was adopted as "saved", killing Save
  • Domains: apex verification only knew the host's legacy address
  • Besigner: the empty-screen dropzone lines up with the document it stands for
  • Sites: a collection's template screen is not a page of the site
  • Console: publishing a collection template named a route it does not have
  • Sites: the store's PDP and collection templates were still pages
  • Sites: point the canonical-redirect spec at the renamed template-screens module
  • Marketing site: the host-limit claim said 25 where Agency allows 100
  • UI components: tabs and tab panel silently discarded the author's sx
  • Themes: a site only goes dark if it has a dark design
  • Billing: only a stated interval moves the toggle
  • Themes: a foreground only lifts when its own surface went dark
  • Themes: pin text on gradient panels instead of flipping it
  • Blog: promote the entry title to h1
  • Marketing site: put the CTA band back on paper, per the design
  • Marketing site: put the brand blue on a palette token that passes AA
  • Marketing site: give /pricing one content width instead of three
  • Themes: collapse the accidental one-digit magenta split in dark mode
  • Plugins: stable link element and hydration-clean rich text
  • Console: the domain wizard and docs stop saying apex domains are impossible
  • Console: the platform-subdomain redirect keeps the query string
  • Console: view-live resolves a template through the collection that renders it
  • Besigner: the conflict banner names the document kind the author is in
  • Sites: drop the inert next/head blocks the App Router never rendered
  • Console: each dns record line shows the name shape it applies to
  • Console: create component goes through the resources api, not a denied setDoc
  • Besigner: the App Bar theme-color Default persists as MUI's default sentinel
  • Console: a dead org read errors with a retry instead of an endless spinner
  • UI components: keep @emotion/server out of client bundles so the CSP eval probe disappears
  • Console: the DAM sends big PDFs/zips past Vercel's 4.5MB cap via signed upload
  • Console: raise jest testTimeout so starved parallel workers stop flaking RTL specs
  • Besigner: a style edit was not undoable, and undo silently ate work
  • Dependencies: restore the @eslint-community scope in the functions lockfile and patch js-yaml
  • Plugin UI: declare the sx these elements already merge at runtime
  • Shared ui: type the theme and form-mapper reads so their consumers compile
  • Sites: render ordered lists and blockquotes in the entry body, a SIXTH renderer
  • Sites: escape the NUL that made a 29KB route unreviewable to git
  • Console: the domain wizard and the verify route read one DNS source of truth
  • Console: view-live picks one collection when two designate the same template
  • Site runtime: static-import the admin lib so one spec stops failing 14 others
  • Markdown lite: a list may interrupt a paragraph, as CommonMark allows
  • Besigner: detach bakes the instance's resolved props and root styles into the copy
  • Besigner: a stacked background opens as raw CSS instead of losing a layer
  • Plugin UI: give the All label a cleared value, so clearing it can omit the pill
  • Plugins commerce: the catalog delete dialog describes the refusal, not a cascade
  • Accounts: pin recovery link origin to the console, not a request header
  • Console: let an org admin revalidate their own site's pages
  • Billing: derive PAID_PLANS so Scale and Agency add-ons survive the read-back
  • Billing: match the plan item by price and keep the monthly meter off annual
  • Plugin UI: split a linked accordion summary into label + chevron toggle
  • Besigner: drop undefined props where save and publish both serialize
  • Besigner: let an instance override Background Fill, so Solid clears the gradient
  • Plugins: compose the author's sx last, and lint the shape that dropped it
  • Console: add the 23 Stripe var names missing from the dev env example
  • SEO: a screen's own SEO title is the whole title, not a prefix to the site's
  • UI components: name the emotion cache key both root layouts render under
  • SEO: a collection list screen's own SEO reaches the head, not just its body
  • Console: keep the client barrel out of the billing routes' server graph
  • Besigner: the Styles panel reads and clears the props.sx no click could unwrite
  • Billing: correct the metered rates so "cost + 30%" is true, not just claimed
  • Billing: the annual metered caption states cadence, not absence
  • SEO: resolve the Article cover to an absolute URL, like og:image already does
  • SEO: absolutize the Event cover where the site's origin is actually known
  • Billing: meter the subscriptions our own routes never built
  • Security rules: deny the entitlement-bearing org keys the client could still write
  • Console: confirm a cache-served entitlement doc, not just a cache-served miss
  • Console: let listeners feed the stale-session verdict
  • Plugin UI: a linked accordion header keeps its element when the screen does not resolve
  • Console: stop Manage Account overwriting a profile with stale cached values
  • Plugins: refuse whole-document writes seeded from an unconfirmed read
  • Console: keep the brand suffix on the routes now nested under Support
  • Console: guard the twins that were copied without their guard
  • Console: count the webhook cap on the server, not from a listener
  • Security rules: deny the server-owned fields the host and listing lists never learned
  • Platform: stop a node leaving its parent's child list but not the node map
  • Console: refuse the five widest whole-document writes
  • Console: import the cap through the workspace alias, not across the boundary
  • Security rules: deny the host counters the quotas and the invoice are computed from
  • Console: the subdomain redirect needs a bare hostname, not a URL
  • Plugins: guard the marketing surfaces that write a whole map from a listener seed
  • Platform: require a live parent to put a node in the map
  • Plugins: refuse the logic and workflow rewrites seeded from an unconfirmed read
  • Plugins: guard the store settings, reservations and catalog writes
  • Console: gate version creation server-side, not in the canvas save
  • Plugins: guard the four plugin console pages, and give events a signal to guard with
  • Console: meter the org against the org's band, like the invoice does
  • Console: refuse the three site cards that write from a listener seed
  • Console: refuse the screen rename and SEO writes seeded from the same listener
  • Sites: carry the denied-listen verdict on its own signal, not on status
  • Console: stop publishing a site-size cap no plan can reach
  • Plugins: delete the fourth copy of the retry-reset instead of repairing it
  • Commerce: stop a category rename from deleting the fields the form never sends
  • Redirects: stop an edit from silently re-enabling a disabled rule
  • Console: stop the SSO card answering "Not set up" before it has asked
  • Console: stop offering an SSO activation the server will refuse
  • Commerce: stop four writes persisting the listener's synthetic $id
  • Sites: emit the branded auth origin, with its scheme
  • Console: store an allow-list on the host create routes, not a deny-list
  • Console: stop nine surfaces answering a plan or security question before asking
  • Billing: count screens by what the site routes, not by the screen's own claim
  • Sites: the RSS feed only answered to a host spelling nobody could know
  • Platform: stop a Markdown block swallowing every element dropped into it
  • Sites: the Entry Meta block gated three switches over values nothing supplied
  • Billing: a collection's list template is a page, so charge the plan for it
  • Console: store an import bundle through an allow-list, the last of the three
  • Console: decode a version's nodes on the way out, so a backup restores
  • Billing: enforce screensPerHost where the count changes, not only at create
  • Tooling: move the lint rules out of nx's convention so lint stops printing a stack
  • Marketing site: a designed campaign mailed an empty body to real customers
  • Sites: decode a screen version's nodes before the search walks them
  • Marketplace: decode the nodes the besigner writes before publishing
  • Console: decode the client Bytes, and stop publish mangling it
  • Console: enforce screensPerHost on site import, whole bundle or none
  • Console: enforce the remaining resource caps on site import
  • Plugin UI: guard the five components that SSR-500 on a cleared prop
  • Sites: resolve media references in coverImage and logoUrl renderers
  • Console: force Google's account chooser at every provider site
  • Console: let the org switcher yield so the top bar stops overflowing on mobile
  • Console: hint the SSO account and stop blaming the admin
  • Console: stop swallowing the passkey rejection that means 'no passkey'
  • Marketplace: one arithmetic for every install count on a listing
  • Marketplace: derive install counts from the pins, and cache the answer
  • Console: a restored publish schedule fires, and its folders and components resolve
  • Console: scan the whole corpus before telling an author a file is unused
  • Tooling: convert the media fields the node back-fill never reached
  • Besigner: stop the editor offering a plugin the site switched off
  • Console: stop refusing a paying org while its plan is still loading
  • Console: decide the thirteen sites the rule now names, one at a time
  • Marketplace: resolve a media reference in a listing's preview image
  • Console: put the site's OWN media library in the bundle, tree and all
  • Console: resolve a favicon reference, and never decline in silence
  • Console: stop the cache presenting a refused read as live
  • Plugin UI: stop the Container "Default" width from rendering full-bleed
  • Sites: strip unpersisted keys before the branch picks an SDK call
  • Console: measure site size in one unit, whatever form the nodes are stored in
  • Marketplace: deny the install counters a coverage guard could not see
  • Sites: resolve the unpersisted-key list on use, not at import
  • Sites: type the fake setDoc payload the converter receives
  • Console: stop the coupon preview approving what the route refuses
  • Console: stop the org media library reading a host that never exists
  • Security rules: grant the org media library the analytics day-doc it reads
  • Console: bound the screen documents no plan cap counts
  • Console: stop the besigner inventing a social image it was never given
  • Site data: take the org's API credentials with the erasure
  • Sites: the seed-guard refusal names the remedy that actually works
  • Site data: take the org's SSO and console routing with the erasure
  • Site data: take every org-keyed index with the erasure
  • Console: two save paths CALL the seed guard instead of re-implementing it
  • Console: put the bucket CORS rule the signed PUT needs in the repo
  • Plugins: merge the node's style slice instead of spreading it away
  • Plugin UI: close the '' option shape, and make it fail a test
  • Plugin UI: make every option value persistable, per prop
  • Site data: leave a durable trace when an erasure aborts
  • Console: type the email mock so the run-erasures spec compiles
  • Console: give every non-image DAM type an icon instead of a blank card
  • Console: let the DAM delete where it is decided, and say what went
  • Besigner: let the flexbox toggles read the key they write
  • Console: stop a DAM delete from re-reading the library, and add ⇧-click
  • Media library: make a failed variant generation say so
  • Console: make DAM search cover the library, and say what it covered
  • Console: ship the library sharp opens, not just the addon
  • Console: stop an uploaded SVG executing on our own origin
  • Console: a new media folder is stored with the scope the dialog claims
  • Console: stop a bulk move reporting a partial success as a total failure
  • Console: fetch the bytes the signed upload never handed over
  • Site data: stop an erasure leaving a copy of what it erased
  • Console: give the scope backfill a caller it never had
  • Console: the details drawer says what a file's sharing actually is
  • Data: the schema dialog says what a collection's sharing actually is
  • Tooling: make the manual erasure the served one
  • Console: delete the fourth media writer instead of repairing it
  • Sites: no cached document bodies on a customer origin
  • Tooling: rules deploys refuse a dirty source file so no session ships another's edits
  • Console: no ref falls back to a rules-denied sentinel id
  • Platform: no 'use client' directive in the shared consent banner
  • Tooling: the prod-smoke gate survives preferRest — warmup off against the emulator
  • Console: staff org suspend toggle goes through the lockdown core
  • Cloud functions: the org suspended* family is Admin-SDK-only — even for super staff
  • Site data: a locked org's media stops serving
  • Console: the metered estimate card prices the org library like the invoice does
  • Console: a verification click may not be navigated away from mid-apply
  • Console: signup org provisioning works on the password door
  • Console: make the two import-free gate specs modules so tsc passes
  • Console: rate-limit /api/orgs/create under the signup grace
  • Platform: marketplace-installs lockdown also refuses paid checkout
  • Marketplace: a full refund revokes the purchase entitlement
  • Marketplace: request Connect capabilities explicitly at onboarding
  • Sites: render tenant pages into the ssr shell so hydration never waits on raf
  • Sites: mount analytics and consent above the plugin gate
  • Console: render the 423 lock notice
  • Console: accept every v1 Stripe signature so a secret roll stays zero-downtime
  • Console: a template-started site gets a home page
  • Console: the panic page states a verified lock state
  • Platform: the authored analytics step goes through the sanitizer
  • Console: resolve the ToS consumer contradiction in v4 — 19.12 and 18.2
  • Site runtime: a scheduled first publish is reachable
  • Console: the lockdown 423 keeps the rate-limit budget
  • Platform: one begin_checkout shape
  • Console: keep staff-only chrome out of published screenshots
  • Console: render the lockdown support contact and expiry inline on billing
  • Sites: isolate the page body from analytics when the plugin gate throws
  • Platform: delete the GA cookies a consent withdrawal allowed
  • Tooling: make the aglyn.com alias probe able to fail
  • Marketplace: type the GA4 capture sink so the spec project typechecks
  • Platform: silence the resident gtag on a consent withdrawal
  • Console: correct the v4 privacy analytics and outreach disclosures
  • Platform: give quarantine a digest it can trust
  • Tooling: cover the plugin origin alias with a check that can fail
  • Console: don't invoice an audience band nobody can reach
  • Console: let a per-org Contacts grant reach the invoice too
  • Console: stop quoting an audience overage the invoice won't carry
  • Platform: cap what a form flood can bill a paying customer
  • Platform: never collect acceptance of an unpublished agreement
  • Besigner: satisfy ElementPropsFormProps in the Markdown attribute spec
  • Www: strip HubSpot, Visitor Queue and the ad-tech preconnects
  • Cloud functions: deny client-created form submissions past the meter
  • Platform: refuse quarantined bytes at the door
  • Marketplace: capture ga_client_id at checkout so purchases attribute
  • Marketplace: report platform net as GA revenue, not tax-inclusive gross
  • Console: close the add-on purchase path when its release flag is off
  • Console: report an unknown billing_interval as absent, not monthly
  • Commerce: render the POS card QR locally
  • Platform: point release_marketplace at the nav tab that exists
  • Aglyn markdown editor: the image button reaches the media library
  • Platform: bucket rollouts on the org, and only the org
  • Besigner: the in-place canvas editors follow canvas scroll
  • Commerce: settle a POS sale on the first tap
  • Console: make the plugin kill switch stop depending on the caller
  • Console: stop hashing member emails to gravatar
  • Console: enforce the published API quota globally
  • Console: let the verdict probe say that reads still pass
  • CI: compare live rules against the promoted SHA, not main
  • Console: finish the read-only intent audit
  • Console: don't invoice a lead inbox nobody can open
  • Commerce: dedupe a POS sale on a retry, not just on a double tap
  • Console: one console page_view, with a real URL
  • Marketing site: make the popup bait the form honeypot instead of satisfying it
  • Tooling: find the Ready build by filter, not by scanning a paged list
  • Marketplace: one refund-aware purchase gate for every install path
  • Console: refuse a second subscription checkout for a subscribed org
  • Commerce: stop a retried refund sending the money out twice
  • Plugin UI: resolve a media reference in markdown
  • Console: don't quote staff an overage the org won't be billed
  • Commerce: store the shipping the shopper paid
  • Platform: hold listing artwork to first-party media
  • Marketplace: stop selling the same component to a buyer twice
  • Contacts: read the audience head-count as a server aggregate
  • Sites: stamp form submissions taken under a degraded limiter
  • Console: make the REST API's idempotency key actually dedupe
  • Commerce: charge the shipping the merchant configured
  • Console: count member seats from the server, not the page window
  • Platform: stop the write-deny scanner counting method calls as fields
  • Tooling: delete the probe's nested role with update, not a merged set
  • Console: stop enterprise provisioning billing a deal twice
  • Tooling: regenerate the stale Next tsconfigs
  • Commerce: record what the buy-now shopper actually bought
  • Tooling: guard the plugin manifests against silent drift
  • Console: guard the enforcing CSP, not the count of headers
  • Console: carry the pricing CTA's plan across the verification wall
  • Platform: refuse an http: image src in markdown-lite
  • Commerce: charge buy-now the shipping the cart already charges
  • Data: count datasets and records from the server, not the windows
  • Console: store a media reference in the three markdown writers
  • Platform: refuse insecure url() in author CSS
  • Commerce: count the catalog from the server, not the page window
  • Site runtime: drop http: collection covers, the second http path
  • Sites: give the analytics mock the SDK's real arity
  • Plugins contacts: stop the head-count doubles changing identity per render
  • Logic: count variables and functions from the server
  • Platform: annotate the null sx leaf that blocked typecheck
  • Workflows: count workflows and locations from the server
  • Console: raise the comment-stripper span bound, and stop it blaming the regex
  • Commerce: record what a subscription sale actually sold
  • Commerce: export the money the merchant was actually paid
  • Sites: don't prefer REST against the Firestore emulator
  • Commerce: stop tracking stock on subscription-only products
  • Commerce: record every subscription renewal
  • Commerce: count an in-store sale in lifetime value
  • Commerce: make a payment-link buyer a contact at all
  • Commerce: send a purchase for a storefront subscription sale
  • Commerce: count a paid stay and a paid booking in lifetime value
  • Commerce: attribute a folio sale to the stay's named guest
  • Commerce: refuse a folio sale against a stay that does not exist
  • Commerce: refuse to mint a cart from the cookie a member chose
  • Console: refuse a subscription that names no workspace
  • Console: refuse a staff retarget of a site that does not exist
  • Commerce: reconstruct a subscription a renewal arrives for, never stub it
  • Site data: stop a host revoke from re-creating the membership
  • Commerce: refuse a cart cookie that names a path, never mint an empty cart
  • Console: refuse a version verdict on a listing that no longer exists
  • Console: refuse an org settings write for a workspace that is not there
  • Marketing site: refuse a Resend open against a campaign the merchant deleted
  • Commerce: refuse a redemption against a code that is gone, and record it
  • Platform: bound visitor writes on the plugin dispatcher
  • Console: let a retried DELETE say the record is already gone
  • Platform: keep the register add-on's real ceiling next to the add
  • Site data: give a host notification its own org
  • CI: install cloud/functions deps so the type gate can see them
  • Shared util fbclient: drop the never-called firebase/analytics import
  • Console: let a folder-sharing preview answer under a read-only lock
  • Commerce: stop one restock signup from killing back-in-stock email for everyone
  • Marketing site: file a campaign where its merchant can see it
  • Console: serve Monaco from our own origin
  • CI: run the guards that guarded nothing
  • CI: install the second package a root npm ci never reaches
  • Console: commit a staff org override with its audit row
  • Commerce: record a refund against the buyer
  • Commerce: charge the shipping rate the destination actually has
  • Platform: read the third CSP report wire format, the one Safari sends
  • Commerce: reverse a shopper chargeback against the merchant's store
  • Console: stop shipping a reporting pair that is silent over http
  • Console: let a private media preview answer under a read-only lock
  • Cloud functions: keep a live TTL policy an index deploy was about to delete
  • Commerce: record the shipping a paid draft order was charged
  • Cloud functions: index three cron scans that never ran
  • Commerce: mark the shipping rate row checkout silently drops
  • Tooling: subscribe the event AGL-1546's revocation needs, and report the drift
  • Commerce: charge shipping on a draft order's payment link
  • Console: delete the quota override a staff member cleared
  • Commerce: flag the stock a reversed order left off the shelf
  • Commerce: let a store with no orders draft its first one
  • Cloud functions: make the override reason a boundary, not a dialog
  • CI: give the rules-drift self-test a second home that actually runs
  • Commerce: drive the cancel button through the cancel-order route
  • Commerce: refuse to refund an order whose chargeback is still open
  • Tooling: give every .mjs file the eslint rules it never had
  • Commerce: charge a manual-tax store's tax on every subscription invoice
  • CI: run the retired-color detector's self-test somewhere real
  • Console: let a churned org resubscribe through tax id collection
  • Commerce: agree the Refund button with the open-dispute refusal
  • Console: stop the member drawer calling a chargeback a refund
  • Cloud functions: deny staff client writes of the org commercial keys
  • Commerce: log the ledger row the draft-link sale never wrote
  • Events: refuse http: at the two raw free-text image sinks
  • Commerce: drive Fulfill and Mark delivered through the fulfill-order route
  • Commerce: decrement stock when a POS card sale pays
  • Commerce: compound sibling POS lines of one product
  • Commerce: alert low stock from every decrement, not just buy-now
  • Commerce: compound sibling cart lines of one product
  • Cloud functions: deny staff client writes of the vestigial billing and identity keys
  • Commerce: count registers with a server aggregate, not the limit(25) window
  • Cloud functions: deny client writes of an order's status
  • Commerce: commit the cart quantity on settle, not per keystroke
  • Site data: anchor firstPurchaseAtMs on a converted lead's first purchase
  • Console: exempt the byte-pinned agreement snapshot from the naming guard
  • Console: make the phone-disclosure spec a module so its globals stop colliding
  • Sites: resolve collection routes on the admin bar, not 'Unrouted page'
  • Sites: attach the no-img-element disable to the favicon img line
  • Console: give the edit-hint routes their lockdown-423 markers
  • Analytics: spoofed-host gate + bounded per-ip limiter on the collect beacon
  • Console: heal the cross-agent interleave the gate caught
  • Console: heal the last two interleave reds the re-gate caught
  • Console: subscription purchase reports net of tax to GA4
  • Commerce: close the two money doors that skipped the plan gate
  • Console: four assist defects the claude-api skill surfaced
  • Console: restore the typecheck baseline AGL-1323 established
  • Console: two repo-wide invariants the retention route tripped
  • Console: the assist docs index tripped the AGL-975 naming sweep
  • Platform: backups check can go green again — aged-out NOT_AVAILABLE is not a failure
  • Platform: backups check can go green again — aged-out NOT_AVAILABLE is not a failure
  • Console: never register an analytics transport that cannot deliver
  • Console: never register an analytics transport that cannot deliver
  • Themes: text colors are COMPUTED, not hardcoded
  • Console: share the cookie reader so an empty duplicate cannot disable idle logout
  • CI: the two shallow checkouts fake the rules-drift baseline
  • Accounts: brand the OAuth origin on every host, not just *.aglyn.com
  • Console: the quota banner must not claim an org the URL never named
  • Commerce: gate the commerce glance figures on commerceAnalytics
  • Themes: restore the typecheck baseline AGL-1323 established, again
  • Tooling: the webhook audit reported a window wider than its own data
  • Security rules: a site editor could rewrite the registers the invoice reads
  • Console: correct seven misattributed issue ids in code comments
  • Tooling: the webhook audit can be pointed at test mode, and it finds a gap there
  • Tooling: one clock reading, so the retention warning stops crying wolf
  • Security rules: re-apply the registers write denial fcf1017eb reverted
  • Themes: filled primary buttons carry WHITE text again
  • Commerce: the dispute reversal double modeled Stripe backwards
  • Console: meter the org the URL named, not the one that answered
  • Console: starter templates start ON the container standard
  • Commerce: every storefront path now states its tax decision
  • Accounts: stop presence minting cross-pool tokens that forge shadow accounts
  • Console: a role change stops nulling an SSO member's roster identity
  • Sites: the app bar reads the avatar the user actually has
  • Console: the invite rate-limit refusal logs a target — the route did not typecheck
  • Security rules: a host-scope takedown now takes the site down
  • Console: a conflicting analytics re-init no longer crashes the console
  • Console: the other seven files of AGL-1964 — main was briefly broken
  • Platform: the urgent-abuse notification type, and a label guard that could not fail
  • Erase: an erased identity stops being world-readable
  • Erase: support threads stop outliving the erasure
  • Platform: the abuse-report spec reads the failure arm the compiler can see
  • Sites: the analytics re-init spec types the provider it needs
  • Console: the breach runbook is a key MENTION, not a new Anthropic data flow
  • Cloud functions: a timed suspension now expires in rules, at both scopes
  • Sites: drop a zero-width space from the shim comment
  • Platform: name a winner for the ambiguous addBusinessDays re-export
  • Retention: replay keys, churn free text and the 2021 privacy stub get periods
  • Platform: the deny-coverage guards went blind on a path that quotes /*
  • Console: a successful attach is not a serving domain, and the wizard stops saying it is
  • Commerce: the storefront Connect account now asks for the capability its own checkout requires
  • Console: Stack takes alignItems and flexWrap through sx, not as props
  • Assist: restore the AGL-1972 exchange/signal assertions I reverted
  • Console: a domain can be pointed at us AND wrong at the same time
  • Console: the domain-status route answers to the lockdown

Performance

  • Sites: stop shipping MUI X DataGrid to every published site
  • Platform: stop two log lines from shipping the Firestore client to every site
  • Sites: the compose pipeline issues its reads in one round trip, not three
  • Sites: keep react-virtuoso out of every published page
  • Sites: send only the withheld nodes, and say so while they load
  • Sites: block first render on the page's plugins, not the org's
  • Sites: narrow the blocking plugin set on collection and auth pages too
  • Shared ui: prune the jsx barrel so published pages stop shipping besigner chrome
  • Shared libraries: navigation-drawer leaves the barrel, collecting the deferred cut
  • UI components: drop mui-shadow-dom's dead ssr branch so react-dom/server leaves the client
  • Sites: overlap the plugin lookups with composition so pages render sooner
  • Console: stop paying for reads nobody asked for
  • Console: stop re-reading what one read already answered
  • Console: serve thumbnails, not originals, and let a video 304
  • Sites: pay Firestore transport establishment at boot, not on first visit
  • Sites: a rules denial retries at 60s, not the 2s heal cadence
  • Sites: the publish beat probes its next due time instead of asking every minute
  • Site data: coalesce the per-call user-lockdown read
  • Assist: make the cached prefix tenant-agnostic so one entry serves every workspace

Reverted

  • Themes: give the owner his brand colors back, entirely

Changed

  • Marketplace: the marketplace stops calling itself community
  • Marketplace: drop the /api/community alias too
  • Security rules: collapse the duplicated marketplace rule blocks
  • Marketplace: the plugin registry still said community
  • Platform: compress() no longer drags Firestore into the shared barrel
  • Themes: use the shared deep-merge instead of a private one
  • Console: the screen and layout lists move to the bare path, like components
  • Console: take the host list off a predicated query so it cannot tombstone
  • Timestamp: extend Date instead of the Firestore class
  • Marketing site: group the compare table by row, not by cell
  • Themes: put the last 16 dark-mode colors under design control
  • Sites: move the stale-seed guard where the plugin cards can reach it
  • Console: drop two dead keys the resources allow-list carried for a caller
  • Aglyn markdown editor: give the markdown editor a lib home
  • Platform: promote the POS attempt claim to a shared server util
  • Platform: one live-subscription status list
  • Site data: one owner for the document-id rule
  • Site data: drop a browser Firebase re-export from a server barrel
  • UI components: delete the orphaned Pages Router surface
  • Tooling: setup-stripe reads the webhook event list from the shared lib

Documentation

  • Accounts: an SSO account cannot link a second sign-in method
  • Marketplace: say what the two listing badges promise
  • Operations: the status page exists now, so stop listing it as missing
  • Trust: a security page whose claims are all checkable
  • Enterprise: link Trust and Status, and document SSO, support and availability
  • Console: point the preview comments at AGL-1203, the issue that was filed
  • Sites: note that preLoadBootMs is only meaningful on a lambda
  • correct the issue references in the media and besigner UI fixes
  • SSO: say that social linking is refused, not merely un-automatic
  • Sites: the cold-start read falsifies the lambda-init guess — boot is 1.8 s
  • Marketing site: the four 'unverified' plan gates all check out under different key names
  • Csp: the tenant's report-only policy reports every script, not none
  • SEO: the sitemap cache is 60 s and always was — the header is inert
  • Vercel: record that the plugins branch config depends on a dashboard setting
  • Components: document component properties
  • Components: an instance renders its content — the page still said dashed box
  • Components: screenshot the component-properties workflow
  • Billing: the Event Calendar add-on is per org, not per host
  • Commands: pin the marketing-site charter above every handoff
  • Commands: rescind the all-routes ISR sweep recipe
  • Domains: domain pages match the real card — apex records, retry-attach, disconnect
  • SEO: exact per-screen fields, site-wide defaults, what the sitemap holds
  • Content: entry scheduling in full, the categories dialog, and the real rss url
  • Besigner: live co-editing, draft recovery, and the flagged live-site admin bar
  • Besigner: component instance limits, versions as rollback, honest publish timing
  • Content: forms monthly caps per plan and the inbox; media size, plan and folder limits
  • Billing: scale and agency join the add-on table, full data-storage ladder
  • Self hosting: the rules deploy joins the short version; optional keys get names
  • Screenshots: capture plan for the seventeen shots the new content calls for
  • Help: regenerate the registry — two new topics, refreshed anchors and excerpts
  • Self hosting: record the AGL-909 decision against a provider abstraction
  • Content: collection delete, and correct what tabs, gradients and categories do
  • Billing: flag the annual metered caption that goes stale on the env flip
  • Billing: §5 now documents both metered intervals, not the annual gap
  • Accounts: design the cross-domain session handoff for custom console domains (AGL-1099a)
  • Accounts: measure whether the two session-route defects are latent (AGL-1099a)
  • Plugins: cite AGL-1240 where the Image sx fix actually came from
  • Design: decide the six open marketing design-system items
  • Design: ratify apex-primary — the model was already running, undecided on paper
  • Billing: record why STRIPE_PRICE_* must stay non-sensitive
  • Billing: decide the two unenforced plan caps — bandwidth is already metered
  • Design: correct the AGL-1311 memo's diagnosis of the dropped query
  • Design: prove the 1099a in-memory-persistence bet, and what it overstates
  • Design: 1099d's three allowlists, answered — one is a manual click
  • Email: correct a comment that called a live defect hypothetical
  • Design: re-verify the AGL-1311 memo against production and refresh statuses
  • Marketing site: retire the layer-name warnings the renames already answered
  • firestore disaster-recovery runbook from a rehearsed restore
  • Email: the DNS facts match what is actually served
  • Analytics: one GA4 property across both domains
  • Analytics: name the canonical property, stream and Firebase links
  • Analytics: correct the follow-up issue reference
  • Analytics: record the aglyn-f375b property as trashed
  • Documentation: name Google Analytics as a subprocessor
  • Documentation: stop getting-started from selling Free users a Pro step
  • Documentation: correct three getting-started claims the console contradicts
  • Documentation: refresh the stale getting-started shots and their alt text
  • Documentation: point building-sites captions at the controls they name
  • Documentation: mark Contacts coming soon, and drop the price on a dark page
  • Documentation: scope the trust page's claims to what each control covers
  • Documentation: tell staff to send the strong digest
  • Documentation: point the quarantine runbook at the staff form
  • Agent tooling: mark promote-and-enforce superseded and correct its deploy facts
  • Agent tooling: strip standing promote grants from the command files
  • Documentation: forms docs stop promising an unlimited endpoint
  • Platform: stop normalizeScreenSlug's docstring describing a fix that breaks
  • Agent tooling: record the batch-3 promotion to 867c963e7
  • Commerce: say which order paths charge shipping, and why POS does not
  • Agent tooling: record the batch-4/5 promotions, tax readiness and gate recipe
  • Console: move the quarantine arc history into the runbook
  • record the tenant consent-mode declarations in ANALYTICS.md
  • Dr: note READY backups flip NOT_AVAILABLE at ~1 week old
  • Agent tooling: /release — the Sept 1 release-readiness command (the owner's mandate)
  • Analytics: record the coverage-pass additions
  • Agent tooling: /release carries the owner's mandate verbatim + the browser/env access grant
  • Agent tooling: /release workstream G — docs sync, visual screenshots, /v1 growth, guides, tooltips
  • Agent tooling: /release workstream H — GA report building + dependabot cleanup
  • Agent tooling: workstream H carries the owner's words verbatim, not a paraphrase
  • Agent tooling: one canonical verbatim mandate block, fragments consolidated
  • Agent tooling: handoff for the /release push
  • Billing: the lifecycle page describes the funnel and the end-of-cycle downgrade
  • Billing: sales tax exists, and add-ons do not ride the downgrade schedule
  • Monitoring: backup-state's persistent-condition license needs a clearing event
  • Monitoring: backup-state's persistent-condition license needs a clearing event
  • Console: the dev env example carries the branded auth handler host
  • API: reference pages for orders, products and media
  • Documentation: the API on-ramp, the agency ICP, and the two plan gates
  • Billing: the go-live runbook says how to assert the webhook
  • Screenshots: shot list for the release docs, ready to run
  • Billing: what shipped for org-library billing, and the one step left
  • Billing: restore the webhook-assertion section AGL-1906 added
  • Billing: the webhook audit follows the key's mode
  • Monitoring: three new checks, the error-rate gap, and the real probe cost
  • Monitoring: the probe-cost reading the bill settles, not the metric count
  • Privacy: the retention schedule, reconciled against the published text
  • Privacy: the DSAR runbook — executable, and honest about what it cannot do
  • Security rules: the timed-suspension follow-up is AGL-1981, not AGL-1966
  • Privacy: the breach runbook, starting from how we would actually find out
  • Operations: the incident process, and the SLA decision laid out rather than made
  • Operations: wire the new runbooks into the two files that had the open gaps
  • Analytics: how the console's analytics boot is lost, and what it costs
  • Commerce: in-page checkout has a surface, and the CSP claim was wrong
  • Commerce: the lost-dispute split is GROSS, on evidence, and guarded
  • Assist: level 2 in the docs, and a gate on the corpus it retrieves from
  • Platform: point the stripComments note at AGL-2004, not a stranger
  • Domains: the chip table, the ownership record, and the two different checks
  • Privacy: the breach runbook can name a regulator now
  • Legal: v6 — the gross clawback and the 180-day Assist expiry, recaptured

Behind the scenes

  • Billing: pin the coupon badge at the org the form actually rates
  • Security rules: a harness that answers "do the rules allow this?"
  • Plugins: exercise the takedown chain against a real Firestore
  • CI: re-trigger the production deploy for 67d4df3b5
  • Tenancy: cover the workspace-domain attach, which nothing had run
  • Agent tooling: retire the payments arc, add the tenant-performance command
  • Repository: untrack the DAM upload scratch dir and ignore it
  • Console: pin the org-jump redirect to server-confirmed data
  • Sites: prove a taken-down plugin actually stops executing
  • Tooling: place a marketplace plugin node on the demo site
  • Vercel: only rebuild console and tenant when something could have changed them
  • Console: prove promotion actually swaps the source for an instance
  • Console: regenerate the docs help registry for the copy/paste page
  • Sites: give the library a test target so its shared hooks can be tested
  • Sites: wire the test target and the retry cases
  • Agent tooling: add the self-serve-sso command for the next session
  • Marketing site: seed the remaining aglyn-marketing screens from the SEO map
  • Marketing site: the /product/* page skeleton, its copy applier and the Figma copy
  • Sites: delete the dead Pages-Router leftovers
  • Marketing site: the copy applier ignores layout chrome, so all 8 detail pages pour
  • Agent tooling: add the promote-and-enforce command for the next session
  • Marketing site: resolve 26 flagged copy claims against the owner's calls and the plan gates
  • Agent tooling: add the deploy-and-flip command for the next session
  • Agent tooling: the promotion landed — correct the handoff's premise
  • Agent tooling: the canvas click-test passed — AGL-523 is ready to flip
  • Agent tooling: flag the stranded AGL-1226 fix as the next session's first action
  • Agent tooling: sharpen the commit-status trap into its two distinct faces
  • Agent tooling: drop AGL-1160 from the queue — it closed by measurement
  • Agent tooling: add the marketing-overview-and-chrome command for the next session
  • Agent tooling: carry the deploy-quota verification into the next session
  • Billing: script to drop the inline Stripe keys once the billing doc holds them
  • Sites: cover the revalidate path cap, which reports truncation untested
  • Agent tooling: add the marketing-design-audit command for the next session
  • Agent tooling: add the override-layer command for the next session
  • Dependencies: bump undici from 7.28.0 to 7.29.0
  • Dependencies: bump undici from 7.28.0 to 7.29.0 in /apps/docs
  • Sites: host tokens resolve inside the real compose pipeline
  • Besigner: cover the internal editor keys an attribute rewrites to
  • Agent tooling: add the component-props-and-home command for the next session
  • Deploys: empty commit to re-fire the Vercel webhook
  • Www: delete the orphaned PWA manifest and icons from the retired marketing app
  • Agent tooling: add the drafts-and-co-editing command for the next session
  • Sites: retire the static PWA assets the dynamic manifest replaced
  • Console: cover the Support request helper that shipped a silent bug
  • Agent tooling: add the marketing-site-finish command for the next session
  • Dependencies: Bump fast-uri from 3.1.4 to 3.1.5
  • Agent tooling: add the tenant-payload-deferral command for the next session
  • Dependencies: bump mermaid from 11.16.0 to 11.16.1 in /apps/docs
  • Scripts: remove the one-shot marketing data fixes, keep the reusable pair
  • Besigner: a panel style write on an instance survives save, reload and the graft
  • Besigner: chain the double-click prop edit through save, reload, compose and undo
  • Console: pin resolveScreenLiveUrl's four template outcomes
  • Besigner: preserve the UNVERIFIED MUI Menubar work-in-progress
  • Besigner: preserve the menubar popup transition fix the agent left uncommitted
  • Besigner: the menubar's keyboard behavior is exercised, not assumed
  • Dependencies: bump dompurify from 3.4.12 to 3.4.13
  • Marketing site: re-extract pricing-copy after the Figma frame drift fixes
  • Dependencies: override js-yaml, nanoid and brace-expansion past their DoS advisories
  • Dependencies: close five docs advisories via overrides; image-size has no fix upstream
  • Console: exempt the third lockfile from the community sweep that corrupted it
  • correct the spec assumptions behind the last typecheck failures
  • Tooling: keep agent worktrees out of the workspace typecheck
  • Plugin UI: pin the stable link element AGL-1268 shipped without
  • Plugins commerce: run the route-registration spec on node, where next/cache loads
  • Sites: pin why a denied listen never surfaces under the persistent cache
  • Security rules: make an unclassified org field fail the build, not ship open
  • Tooling: propose the tint repoint as a migration, and correct the memo's count
  • Security rules: make an unclassified host or listing field fail the build
  • Console: regenerate the docs help registry after a docs page edit
  • Platform: export strip-undefined from the server barrel
  • Console: pin the mediaCdn entitlement gate at its one enforcement point
  • Console: put the "nothing uses this" claim behind a spec
  • Tooling: refuse to start a dev server on a nearly full disk
  • Platform: make the drop/render agreement a test, not an audit
  • Tooling: point the default dev servers at the emulator
  • Tooling: make firebase:emulate actually start
  • Sites: let the media CDN emulator spec pass without the leaked .env
  • Console: let the DAM wiring specs see the file they assert against
  • Console: run the DAM claims that can be run
  • Cloud functions: rules coverage for lockdowns, suspended* keys, legalAcceptances
  • Console: drive the signup-volume health route in-process
  • Platform: drop the personal phone from test fixtures
  • Console: regenerate the docs help registry
  • Console: drive the billing and AI-assist 423 notices
  • Console: fail the build when docs sell a release-flagged-OFF feature
  • Tooling: observe read-only lockdown on the wire
  • Tooling: prove every starter serves at its site root
  • Console: assert the delete-dialog ordering, not its latency
  • Commerce: settle the head-count spec on the count, not on a tick budget
  • Commerce: settle the locations head-count spec on the caption
  • Logic: settle the logic head-count spec on the aggregate, not a tick budget
  • Workflows: settle the workflows head-count spec on the aggregate
  • Data: settle the Data head-count spec per aggregate, not on a call count
  • Console: pin the revocation module read-only is trusted not to call
  • Dependencies: bump deepmerge-ts from 7.1.5 to 8.0.0
  • Console: drive the billing webhook to its GA purchase call
  • Www: delete apps/www, apps/www-e2e and shared-util-fbclient
  • Repository: drop the committed nx graph dump
  • Repository: drop the dangling @/console and @/tenant path aliases
  • Tooling: wire-prove the private media preview pair under org locks
  • Tooling: delete the pre-AGL-237 contact backfill that writes a dead path
  • Sites: justify the admin bar's plain <img> favicon to the linter
  • Console: pin the tenant web-vitals mount now that it is committed
  • Agent tooling: delete the 15 stale session-handoff commands — /release is the living one
  • Console: the forever-coupon guard could not go red — it does now
  • Console: prove the bounded-coupon guard is WIRED, not just present
  • Plugin UI: pin the landing tab against a dead EARLIER link
  • Scripts: ask production who a per-host register add-on would downgrade
  • Site runtime: pin the entry fallback to the prose width
  • CI: actions/checkout and setup-node off deprecated Node 20
  • Site runtime: pin the entry fallback to the prose width
  • CI: actions/checkout and setup-node off deprecated Node 20
  • Console: the org library is warnable, and the ceiling is a bound
  • Console: the org library is warnable, and the ceiling is a bound
  • Console: the three storefront-tax guards, each forced red
  • Console: the three storefront-tax guards, each forced red
  • Console: reconcile two guards with what AGL-1886/1916 actually shipped
  • Console: the tax-return route serves storefront tax as its own section
  • Console: the storage refusal is actionable now, and still lands nothing
  • Commerce: guard the draft-order tax and the POS tax witness
  • Commerce: the Payment Element sale is fulfilled by the webhook, with no client in the room
  • Console: clickwrap v5 — Terms §10 rewrite + Aglyn Assist disclosure
  • Platform: publisher agreement 2026-08-18.1 — marketplace rename + EULA cross-reference
  • Cloud functions: three TTL policies declared, documented and guarded
  • Cloud functions: guard the §512 collections, and fix a parser that was reading a corrupted file
  • Console: null-mock the storage-overage card in the lockdown spec

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.