Skip to content

v0.74.0

Latest

Choose a tag to compare

@frappe-pr-bot frappe-pr-bot released this 16 Jul 11:44
1260e56

0.74.0 (2026-07-16)

Bug Fixes

  • account: Clear request key after accepting invitation (ea7a645)
  • account: clear request key in accept_team_invite (a2ceb80)
  • account: Enhance team invite acceptance logic and add tests (aaa5296)
  • account: Improve key validation for invites (cd6d615)
  • Add frappe dependent app check only for private bench release groups (1bda510)
  • agent-job: Add tests for fail_old_jobs (2c5c9eb)
  • agent-job: Fail old jobs correctly (fda2e4b)
  • api: Avoid creating blog read status when no blog url is set (03b7033)
  • api: Guard missing og:title and fix broken test import (be5fcbb)
  • api: Hide blog widget instead of crashing on fetch failure (8d6dadf)
  • api: include description field in bench.install_all (d557a2b)
  • Avoid re-querying source for missing app urls (ff25ca7)
  • backend: Clear _current_team before request and job (3d511c4)
  • backend: Fix permissions for product trial doctype (bf44881)
  • backend: Fix permissions for site analytics doctype (bafc3cf)
  • backend: Ignore permission when saving TLS certificates (65a8d74)
  • backend: Typo (85293f8)
  • bench: check for recent ongoing jobs when trying to archive a bench (0f851ed)
  • bench: Exclude archived sites' updates from archive block (c1c4019)
  • billing: Add support for more special characters (9a3a443)
  • billing: Handle for empty strings (03bf9dd)
  • client: Sync ALLOWED_DOCTYPES with upstream/develop (1dfe9bb)
  • client: Use check_document_access for get (b3c4d02)
  • cluster: Dont throw inside try (bfec097)
  • cluster: Fix semgrep issues (89498e7)
  • cluster: Hetzner delete default route if exists while adding one (cd2c4e8)
  • cluster: Restore lost fields (1f21c37)
  • cluster: Reuse hetzner NAT security group if already exists (0b4ccb7)
  • cluster: Revert VPC flow logs to bare-bucket S3 ARN (b1ff3f8), closes #6817 #6657
  • cluster: Wait for hetzner delete route (9f01d13)
  • cluster: Write VPC flow logs under a per-cluster S3 key prefix (2f7c99c)
  • dashboard: Add badges for status in benchrow in serverlist (0e7971c)
  • dashboard: Add missing load more btns for sites/benches (a1fb37c)
  • dashboard: Add missing team field for release pipeline in deploys list (987208e)
  • dashboard: Add missing tooltips for server list cards (c1bb1a8)
  • dashboard: Add some null checks & socket clean up in servers list (bf76627)
  • dashboard: Auto reload members after invitation (e7b2ab7)
  • dashboard: better err handling for appdialog in servers list (1a67ee7)
  • dashboard: better err handling in flow dialogs (b28b239)
  • dashboard: Change colors for team member roles (5e23f61)
  • dashboard: Change team owner icon color to gray (a3c36d4)
  • dashboard: drop server not working in servers list (367f037)
  • dashboard: Err handling for deploy dialog (2d250e8)
  • dashboard: Err handling for site creation dialog (3685faf)
  • dashboard: Hide warranty cooldown date when a change is possible (6fc8f08)
  • dashboard: Icon color for team admin roles badge (7e0a226)
  • dashboard: Include cluster img & country in server list cards (ffc0293)
  • dashboard: Keep relaxed permissions checkbox visible until reload (b65ca41)
  • dashboard: Move relaxed permissions switch to team page (301cdf4)
  • dashboard: Remove pre block from team page (4c83733)
  • dashboard: Remove cluster country logos from server list (698f801)
  • dashboard: Replace select with combobox for filters in servers list (02c1722)
  • dashboard: Role: keep invite user button and dialog (8a0dddb)
  • dashboard: Role: remove invite user option (fbfd4e7)
  • dashboard: show 0 site_count in server list cards (4abbd2d)
  • dashboard: show proper deploying status on bench status badge (73a46e2)
  • dashboard: show proper deploying status on bench status badge (8631440)
  • dashboard: some sites not showing in server card bench rows (fc80a62)
  • dashboard: status badge dot/font sizes in server list cards (b148be8)
  • dashboard: Team page UI/UX (53e15ed)
  • dashboard: Team: remove email column (7d7e6a7)
  • dashboard: Team: remove useless condition to show roles (e45e165)
  • dashboard: Team: use Badge for roles (8e4e285)
  • dashboard: typo in server list statusOptions vals (ce49881)
  • dashboard: Use checkbox for relaxed permissions on team page (479b2d6)
  • database-server: Disable binlog auto purge when configuring a replica (ca77f8f)
  • database-server: Ensure MariaDB is running before configuring replication (d4bfc36)
  • Declare Frappe compatibility as >=15.0.0,<17.0.0 (d3df096)
  • deploy-candidate: Allow build retry when dependencies changed (6137785)
  • deploy-candidate: Fix Schedule Build and Deploy popup crash (b56a7c7)
  • deploy-ui: dont show lucide icon as fallback for app logo (7e8f01a)
  • deploy-ui: fallback jobstep.duration with empty string (0840bd8)
  • deploy-ui: make page responsive (3a677a9)
  • deploy-ui: missing onclick for server reload btn (52b2d62)
  • deploy-ui: Replace pipeline wording with Deploy (e36d5a0)
  • deploy-ui: Show AppVersions dialog for pipeline view too (697a39b)
  • deps: Bump pyOpenSSL to 25.1.0 and oci to 2.178.0 (9e11cb0)
  • deps: Bump pyOpenSSL to 25.1.0 to fix CI crash with cryptography 46 (cf050e7)
  • deps: Cap cryptography below 46 in bench dev-dependencies (6732e33)
  • deps: Revert pyOpenSSL and oci bumps; cryptography cap is enough (6c61720)
  • drip-email: fix evaluate_condition type signature (11158c9)
  • drip-email: guard against deleted Product Trial document (0fb94c1)
  • drip-email: guard evaluate_condition against missing product_trial (c841d7a)
  • drip-email: guard product_trial and gate unsubscribe behind send_raw (9c37fdc)
  • Enable check_dependent_apps for release groups in private bench creation flow (75b7a46)
  • errors: Don't leak account existence in login/signup errors (8d517af)
  • errors: Don't reveal server ownership in bench creation error (e37e153)
  • errors: Mention cancelling review request in app-release errors (98ab026)
  • errors: Mention stopping deploy in bench deploy-in-progress error (802eba6)
  • Fix semgrep issue (2867785)
  • format: Parse [b] as bold tag in sanitzeHtml() (7f3c050)
  • github-app-selector: Prioritize connect over re-auth and guard error messages (5e711de)
  • github-app-selector: Show proper gh api error message (278e7a9)
  • github: Show actionable error when frappe-dependencies is missing (af6629b)
  • invite: Update API endpoint URLs (ff7c23b)
  • invoice: Show better description for invoice items (77728c8)
  • json: Remove trailing comma (8d1e382)
  • lint: Reduce create_site_analytics complexity, use next(iter()) (6cfc1fe)
  • mariadb: Unmask mariadb.service before preparing snapshot-based replica (dacd97b)
  • merge: Restore master hotfixes dropped by whole-file conflict resolution (a98d307), closes #6270
  • monitor: Fix semgrep issue (aa6cf8a)
  • monitor: Use correct credentials for prometheus rules API (d271fca)
  • monitor: Use prometheus_username in htpasswd, frappe is default (2b3fcb0)
  • mpesa: Remove value for new combobox input (77dd006)
  • nat-playbook: Add Frappe compute in ansible task (cfba449)
  • nat: Check NAT server in cluster before OCI route table attach (f6107f0)
  • nat: enable dhcp and ignore its routes in nat config (46d052a)
  • nat: Fix OCI NAT issues (e28adc5)
  • nat: Hetzner enable dhcp in netplan (d429992)
  • nat: Remove hetzner from whitelisted disassociate ip (6a573b3)
  • nat: Setup NAT if public IP is not present (647c090)
  • nat: Use nat_gateway_ip in playbook to check (2fd62f5)
  • nginx: Add COOP header in /login route (92a60e9)
  • Normalize GitHub repo slugs to Frappe app names (hyphen to underscore) (250d28d)
  • objects: support custom component in list object (a0ea18a)
  • onboarding: Update certificate link request handling (3dbf316)
  • onboarding: Update perm issues (35d42f5)
  • Only send stream flag for offsite backups (394bb92)
  • partner-onboarding: Add optimistic updates for better perf and ux (ab05e6e)
  • partner-onboarding: Add registered country tooltip (37fb445)
  • partner-onboarding: Calculate based on current months date (27e7103)
  • partner-onboarding: Consider current month only for new team (f313b13)
  • partner-onboarding: Discovery and UX (8c43ba2)
  • partner-plans: Improve currency formatting logic (bbb62fe)
  • payout-order: Resolve ruff errors and empty error-log bug (10e031a)
  • plan_instance_type: Sync server plans from prod (b5ecd80)
  • press-role: Unset account request references on role deletion (3651ea7)
  • prm: Auto approve approval request if team is recent (689763b)
  • prm: Don't show arbitrary date if not set (f82f0ba)
  • prm: Update tier values by 10 percent (7ed9f02)
  • product-trial: add agent job child controller (8d59bda)
  • product-trial: log invalid tracked agent jobs (9661610)
  • product-trial: Only hand out standby sites on the latest bench (a3fc878)
  • product-trial: preserve domain provisioning flow (c8e9102)
  • product-trial: store tracked agent jobs as json (611e2de)
  • product-trial: track provisioning agent jobs (1392829)
  • product-trial: update provisioning progress UI (c69a55b)
  • product-warranty-switch: Gate warranty enabling only (518365f)
  • Refactor add_dependent_apps (55a7821)
  • release-group: Guard version sync on branch change by team too (7636e0c)
  • release-group: Update check_dependent_apps flag's behaviour (2b68322)
  • release-pipeline: Emit status update event only after commit (986095e)
  • release-pipeline: Emit status update event only after commit (0311937)
  • remote-file: Limit scope to team (ecc4e10)
  • Remove unnecessary validation in Release Group doctype (0191b03)
  • restore-with-files: Include site config as part of restore (443d20c)
  • restore-with-files: Sanitize site config and add directly to payload (f8f30d1)
  • restore-with-files: Validate config remote file and guard correctly (0da13ed)
  • restore: carry over site config in restore_site_from_files (2cd3a33)
  • Semgrep issue (09cf617)
  • server-list: add onSuccess() in createbench (1cfe1de)
  • server-list: include cluster/server in createBench.submit() (1da2971)
  • server-list: include frappe as first app (8e47b06)
  • server-plan-fixtures: Change m7g platform from x86_64 to arm64 (14b1311)
  • server-plan-fixtures: Update roles to Press User (cb5abae)
  • server-ui: add missing modelValue for checkboxes (9807aec)
  • server: Allow a server to be excluded from public server pool for new benches/sites (#6648) (b559df4)
  • server: Authorize target before toggling auto increase storage (6fab297)
  • server: Check if provider is hetzner and cidr block before using it (b4b7bcd)
  • server: Don't allow server creation for 2 or more unpaid invoices (93b8220)
  • server: Include vCPU and RAM in downgrade warning plan labels (56ecb46)
  • server: Increase timeout for start benches job (086defb)
  • server: Install rclone from pinned deb with checksum (ec72d7e)
  • server: Persist auto increase storage disable on DB servers (426eda0)
  • server: Prevent sync firewall job on creation (7e68cf9)
  • server: Refresh data volume mount after snapshot swap during server creation (115818b)
  • server: remove and add nat config back if applicable during resize server job (4185aa7)
  • servers-list: improve appsdialog (7d17ac7)
  • servers-ui: add missing siteoptions (a5a6d0e)
  • servers-ui: alignment issue & site count badge (9aa3432)
  • servers-ui: broken links in server dropdown (36cadd6)
  • servers-ui: css issues (88cc8d1)
  • servers-ui: font issues (80b8ed4)
  • servers-ui: include missing api integration in addApps modal (0d4599a)
  • servers-ui: include some fields in benchrow res (7b9cef4)
  • servers-ui: layout shift caused due to missing column when fetching deploystatus (bb3d533)
  • servers-ui: layout shift due to no bench status (56b733e)
  • servers-ui: make collapsable chevron right (a97804d)
  • servers-ui: make server name a link (6c50ae3)
  • servers-ui: make sitename clickable (0636dcd)
  • servers-ui: padding issues in row (f1e3107)
  • servers-ui: reload benches list after new creation (cc6ab8e)
  • servers-ui: remove cachedDocRes in dropBench() (e42b9fb)
  • servers-ui: remove useless resource in onDropServer() (c8f3cee)
  • servers-ui: remove useless watch() for search filter (d1a72da)
  • servers-ui: replace placeholder specs data with real one (07d1d21)
  • servers-ui: route name typo (0dc39b1)
  • servers-ui: show deploy action only for the awaiting deploy statuses (94f2674)
  • servers-ui: use better red color for broken status (c023bbf)
  • servers: add no benches tooltip (8f10205)
  • servers: add smooth data loaders (14f02fa)
  • servers: cache resources (0300bc0)
  • server: schedule archival of servers with unpaid invoices every 6 hrs (3b68404)
  • server: Show plan names and avoid stacked modals in downgrade warning (36a1499)
  • server: show remaining wait time instead of elapsed time for disk resize (f5c2e0a)
  • server: Split downgrade warning into problem and next step (d0538fa)
  • servers: remove bottom border from sites row conditionally (c5fd838)
  • server: try adding the nat config back if the resize server job fails (240bb09)
  • sidebar: set 250px as default width (1b4ca19)
  • signup: refine provisioning progress flow (ede0d2a)
  • site-config-key: Remove fixture (4c72cc3)
  • site-domain: Allow adding custom domains if the domain ip matches the proxy ip (#6658) (53ca9cf)
  • site-domain: Sync upstream-added domains to site config (c7b483c)
  • site-overview: Show compute for non-dedicated site (ca7fcb1)
  • site-update: Always update standby sites (b176682)
  • site-update: Fetch is_standby so standby sites always update (df566bd)
  • site: Allow enabling product warranty irrespective of cooldown (bbed086)
  • site: Check remote file team value Existence before comparison (f8459ac)
  • site: Check unpaid invoices before creating new sites (53fcbf5)
  • site: Disable subscription when site creation fails (591e31d), closes #6110
  • site: Don't allow site creation if limit exceeded (9400430)
  • site: Marketplace app site key handling for devs (d53efa0)
  • site: pick only enabled root domains when fetching options for new site (94345e0)
  • site: Re-enable subscription when site recovers from failed creation (eeb4afb)
  • site: Show loading screen (c473184)
  • site: Translate user facing error (1c1beb7)
  • site: use host name if present when trying to notify users of incoming site archival (e75e2ec)
  • site: Wait if response is loading (98d9d28)
  • stripe: Add intent id in pulse events (86cde23)
  • support: Add type annotations to module-level test constants (35601d8)
  • support: Read web.error.log from bench, not site (a4b7374)
  • support: Replace NaN float idiom in Prometheus value parser (1a274c8)
  • support: Strip server and bench identifiers before sending to model (c6d9741)
  • support: Suppress semgrep rule on timeout error in Claude client (4fc1085)
  • support: Validate API key at entry point before calling Claude (cf62523)
  • team-settings: Reload members resource after member removal (ba655c8)
  • team-settings: Use row.user instead of row.name (53b3513)
  • team-settings: Use valid Tailwind duration for link transition (9969c88)
  • team: Assign press role when an invite is accepted (964174c)
  • team: Consider pseudo role Admin when getting admin status (b0422e6)
  • team: Do not pass Admin role to the backend (630ee9d)
  • team: Expire correct account request (b22a8b3)
  • team: Get matched role by name (214dd5f)
  • team: Hide invites with cleared request key from members list (711227a)
  • team: Regular members may not remove other members (0f03fdf)
  • team: Return empty list instead of ['None'] when user has no roles (fa68e21)
  • team: Update partner start date retrieval to return a default date (ab72943)
  • telemetry: Rename _pulse_post kwarg to avoid frappe.enqueue collision (30defa8)
  • tests: Failing tests in partner onboarding (77b10f1)
  • types: Resolve mypy errors in files touched by this PR (508f3df)
  • typing: Resolve mypy errors in branch-changed files (fbfbedd)
  • ui: Add animations to accordion component (c1883e0)
  • ui: Add backoff to release pipeline poll restart (2c3bbae)
  • ui: Add bg to OCI logo for consistency in servercards (0dcf843)
  • ui: Add missing drop site option for site row in serverslist (f79de1d)
  • ui: Add missing fade-in for site rows in benchlist page (5dea3bd)
  • ui: Add missing server plan tooltip (ae2bed5)
  • ui: Add toasts on bottom right to avoid cta block (773bc99)
  • ui: alignment issues in server card (293bc7a)
  • ui: autologout caused by using frappe.client.* (c3ebfcd)
  • ui: Avoid refetching resource on 0 site_count on bench list page (ee1adfc)
  • ui: center serverplan tooltip in server card (fd2f033)
  • ui: Database label alignment in siteoverview cards (51fde61)
  • ui: deploying status text size in server list (4600d0c)
  • ui: Disable state for partner registration button (6aea3e5)
  • ui: Eligibility message and improve spacing in layout (8118746)
  • ui: Enhance button layout and spacing in onboarding components (399923b)
  • ui: font sizes in server listcard titles (676d25f)
  • ui: Increase pagelimit for benchlist (3ade2ae)
  • ui: make load more btn sticky in bench list page (a5dc1be)
  • ui: minor alignment for load more btn in servers card (98782d4)
  • ui: properly match githuburl in add apps dialog (48e6829)
  • ui: Remove blue color from external links in SiteMigration page (e143946)
  • ui: Remove duplicate primary btn in CommunicationInfoDialog (6440fca)
  • ui: remove unneeded border for siteheader in bench row (c4bb456)
  • ui: rename Oraclelogo mapping to OCI for server card icons (ac0360b)
  • ui: show 0 sitecount in benchlist row (fd41870)
  • ui: Show Deploying status instead of pipeline in server list bench row (65fcf66)
  • ui: typo in default server provider icon (d607938)
  • ui: Update onboarding sidebar tooltip and button enhancements (caad9fc)
  • ui: Use concrete commit hash for changes link in site update dialog (745cb73)
  • ui: Use exponential backoff for release pipeline poll restart (2338577)
  • ui: use global badge component for consistency in benchlist (ba41e68)
  • ui: Use named routes for bench list rows (82df6b4)
  • ui: use subtle variant for load more btn in serverlist (466fd0a)
  • ui: Use title case for servercard dropdown options (6c3bdbf)
  • virtual-machine: Add server_doctype to wait_for_ssh (ddffc9a)
  • virtual-machine: Append the firewall id (4de7974)
  • virtual-machine: Check NAT server existence before ip removal (cfb84cb)
  • virtual-machine: Delete hetzner server if route attachment failed (098e738)
  • virtual-machine: Fix indentation bug (4be2518)
  • virtual-machine: Fix nat group creation race (8a8c8a9)
  • virtual-machine: Fix semgrep issues (430fe2c)
  • virtual-machine: Fix semgrep issues (1cf19df)
  • virtual-machine: Give hetzner more default wait time for ssh (896727b)
  • virtual-machine: Hetzner power on only if its off (fffd3e3)
  • virtual-machine: Power on hetzner if disassociate fails mid run (661a663)
  • virtual-machine: Return if OCI ip removal failed (7e1e3b7)
  • virtual-machine: Throw error if bastion is not found (c2739ac)
  • virtual-machine: Throw error if NAT server is not found (302c49a)

Features

  • Add latest_blog_url field in Press Settings doctype (2e0ff86)
  • Add stream_backups field on Server and send as stream arg on backup (ccc1d1c)
  • api: latest blog utilities (81b473d)
  • app-source: Sync app source versions from repo on branch change (dcd07e2)
  • backups: Add conditions to meet before streaming (cdf4689)
  • billing: Add a Subscriptions tab to view the team's subscriptions (1d2aa86), closes #6835
  • cluster: Add DigitalOcean to get_nat_server_if_supported (3bc222b)
  • cluster: Add DO NAT security group (8b4ccae)
  • cluster: Add NAT route as the default to hetzner (f77209a)
  • cluster: Add NAT security group to hetzner (b19622c)
  • cluster: Add OCI in get_nat_server_if_supported (5f3818d)
  • cluster: VPC flow logs setup (69907f8)
  • dashboard: Include invites in team page (d0d8d30)
  • dashboard: Owner indicator in team page (bbe9fc4)
  • dashboard: Show member's roles in team page (830c94f)
  • dashboard: Team: add a column with admin/member info (7189a22)
  • dashboard: Team: use combobox for roles when inviting user (5a4d74f)
  • database-server: Add Ansible vars for nat_iptables (6bce896)
  • doctype: blog read status (e880146)
  • drip-email: add send_raw flag to send message without template injection (d89cb5d)
  • errors: Make API-layer error messages actionable with doc links (291307f)
  • errors: Make customer-facing doctype errors actionable with doc links (262959d)
  • errors: Make infrastructure doctype errors actionable (472c557)
  • errors: Make remaining ops, saas and utils errors actionable (42953f9)
  • ip-removal-log: extend log to update nat config as well (5509592)
  • nat-server: Mention Frappe Compute too (5a42b62)
  • nat: Add DO to NAT DOCTYPE (4bf71da)
  • nat: Add DO to NAT iptables playbook (60244ac)
  • nat: Extend NAT into OCI (5e9d945)
  • nat: For OCI, revert the VNIC route table in static IP allocation (98ec569)
  • nat: IP removal for hetzner (7c95897)
  • nat: Override DigitalOcean default route using split /1 routes (71a975e)
  • nat: Update nat_iptables playbook to include hetzner specifics (9d20fdd)
  • plan-history: Reorder columns — Changed From before Changed To (06cfe6d)
  • product-trial: scheduled job to clean up standby sites for products where pooling is stopped (2fa57ff)
  • Remove server plan fixtures (0107592)
  • server-ia: add add site dialog (2d36d26)
  • server: Add necessary vars to nat playbook (fb3588d)
  • server: Add Plan History tab to server detail page (f49721d)
  • server: Add plan support filter in dedicated server sites tab (caab9e0), closes #6647
  • server: Add skip-standby-site-creation flag (6f573ae)
  • server: Install rclone on server setup (cc10819)
  • server: Install rclone on unified server setup (36d911c)
  • servers-ui: add apps dialog (2c35d0b)
  • servers-ui: Add realtime status checking and split components (d7302c5)
  • server: Show app + DB server plan history with server type filter (d428536)
  • server: Warn users before downgrading server plan (a526a59)
  • site: Add migration shortcuts to the Actions tab (a4ff98e)
  • site: Add Plan History tab to site detail page (e56207c)
  • site: Gate dedicated plan warranty on app + database server cost (096cd1b)
  • site: Name the action in desk confirm dialogs (7f43684)
  • Stream backups (83b3610)
  • support: Add Claude AI analysis to support agent investigations (f94e4a2)
  • support: Automatically collect web.error.log in investigations (756bccf)
  • support: Collect bench process status for 502 investigations (eeb8c38)
  • support: Collect probe uptime; strip site name from model prompt (bcfd9ad)
  • support: Detect slow and custom-app endpoints in summary (3a54fbd)
  • support: Surface custom-app and spiky endpoints in report (c94adf8)
  • team: Ability to cancel invitation (352c3dc)
  • team: Simplify invite dialog with single role select (48e29b7)
  • team: Specify admin roles in dashboard (fdccf39)
  • telemetry: identify the account team as the pulse subject (#6876) (31c2c69)
  • telemetry: signup identity, fc_team, and signup funnel events (#6833) (db69267)
  • ui: Attention widget for the sidebar (e5df6c2)
  • ui: Bench list tree view with proper pagination (9ef9a43)
  • ui: Include changes column in site update dialog (c73adad)
  • ui: Include deploy & site actions in bench list (2cd5619)
  • ui: initial components for layouts in servers heirarchy (ba9bc03)
  • virtual-machine: Also add Database server to wait_for_ssh (aae9720)
  • virtual-machine: Call add_hetzner_nat_route before creating NAT VM (cf9f3b1)
  • virtual-machine: Create NAT security group if it dont exist (95f05ce)
  • virtual-machine: Create NAT security group in existing clusters (acbcea3)
  • virtual-machine: Remove sync inside disassociate function (9029d3d)
  • virtual-machine: Set enable_ipv4 to assign_public_ip for hetzner (8f17623)

Performance Improvements

  • billing: Fetch marketplace app titles in one query (b61e4f1)
  • marketplace: Index Marketplace App Subscription.team (e01f96a)
  • team: Batch user and roles queries in members() to eliminate N+1 (09fd551)

Reverts

  • errors: Drop cosmetic site_analytics import reformat (bd7b88e)
  • errors: Revert login/signup error message changes (a70e02a)