<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Beamo Pilot — What's new</title>
  <id>https://beamopilot.com/changelog</id>
  <link rel="self" type="application/atom+xml" href="https://beamopilot.com/changelog.xml"/>
  <link rel="alternate" href="https://beamopilot.com/changelog"/>
  <updated>2026-08-01T00:00:00Z</updated>
  <author><name>Beamo Pilot</name></author>
  <entry>
    <title>Support and privacy emails are the owner-approved beamopilot.com mailboxes</title>
    <id>https://beamopilot.com/changelog#change-support-and-privacy-emails-are-the-owner-approved-beamopilot-com-mailbox</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-support-and-privacy-emails-are-the-owner-approved-beamopilot-com-mailbox"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Public contact, legal pages, and store listings now use the same owner-approved addresses: support@beamopilot.com for support and the contact form, and privacy@beamopilot.com for privacy and data-subject requests. The contact page no longer advertises a general beamo@ alias, and production pins those mailboxes so a Cloud Run env replace cannot fall back to a personal inbox.</summary>
  </entry>
  <entry>
    <title>Lot-expiry and metric-anomaly alerts now notify webhook subscribers</title>
    <id>https://beamopilot.com/changelog#change-lot-expiry-and-metric-anomaly-alerts-now-notify-webhook-subscribers</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-lot-expiry-and-metric-anomaly-alerts-now-notify-webhook-subscribers"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>An alert.created webhook used to fire for custom alert rules, stockouts, and cash-risk, but not for lot-expiry or metric-anomaly alerts. Those system alerts still reached the inbox and email; Slack and other webhook subscribers never saw them. Creating or scanning those alerts now queues the same alert.created delivery, so a subscriber to that event gets the full inbox stream.</summary>
  </entry>
  <entry>
    <title>Connector credentials use a dedicated encryption key</title>
    <id>https://beamopilot.com/changelog#change-connector-credentials-use-a-dedicated-encryption-key</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-connector-credentials-use-a-dedicated-encryption-key"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>Marketplace, ads, ERP, tax, payment, 3PL, and related connector secrets are encrypted with CONNECTOR_CREDENTIAL_ENCRYPTION_KEY, not SECRET_KEY. Staging and production require that dedicated key. Existing ciphertext can be re-enveloped through a versioned previous-keys window, and rotating the app secret no longer changes how those credentials decrypt.</summary>
  </entry>
  <entry>
    <title>Public-site claims match verified behavior</title>
    <id>https://beamopilot.com/changelog#change-public-site-claims-match-verified-behavior</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-public-site-claims-match-verified-behavior"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The homepage now has a language switcher and no longer auto-translates from the browser language. The hero console is labeled as a guided tour with sample data rather than a live workspace. Autopilot copy now distinguishes dry-run and unarmed review from armed sends, payments, and marketplace writes, which are confirmed first and then not undoable. Channel lists, metadata, and structured data include TikTok Shop, eBay, and Etsy to match the product.</summary>
  </entry>
  <entry>
    <title>Public conversion paths honor signup_enabled and record Terms/Privacy first</title>
    <id>https://beamopilot.com/changelog#change-public-conversion-paths-honor-signup-enabled-and-record-terms-privacy-fi</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-public-conversion-paths-honor-signup-enabled-and-record-terms-privacy-fi"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every public conversion path now follows the server's signup_enabled flag. When signup is closed, landing, demo convert, /signup, /login?mode=signup, and a social OAuth callback that would create a workspace all go to Request access; existing-user sign-in stays available. When signup is open, creating an account requires explicit acceptance of the current published Terms of Service and Privacy Policy versions, and that acceptance is stored with the new workspace before the account is usable. A stale client that skips the checkboxes is refused by the API.</summary>
  </entry>
  <entry>
    <title>Public pages link Privacy, Terms, Cookies, and Privacy Choices</title>
    <id>https://beamopilot.com/changelog#change-public-pages-link-privacy-terms-cookies-and-privacy-choices</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-public-pages-link-privacy-terms-cookies-and-privacy-choices"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Docs, What's new, Contact, and the public status page now end with the same legal destinations: Privacy, Terms, Cookies, and Privacy Choices, next to Docs, Status, and Contact. Those four pages, plus the subprocessor list and Intelligence Training and Improvement Addendum, are in sitemap.xml so search engines and store listings can find the current published package. EU and Japan notices stay off the footer and sitemap until their region flags are on, so a visitor is not sent to a draft 404.</summary>
  </entry>
  <entry>
    <title>OpenAI is listed as the production operator-intelligence subprocessor</title>
    <id>https://beamopilot.com/changelog#change-openai-is-listed-as-the-production-operator-intelligence-subprocessor</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-openai-is-listed-as-the-production-operator-intelligence-subprocessor"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The public subprocessor list now names OpenAI, which hosted Beamo Pilot already uses after backend evidence retrieval for Ask Pilot, supplier-agent drafts, planning narratives, and feedback labels. The row states purpose, data categories, the US api.openai.com location, Beamo-side retention of answers and citations, and controls (TLS, Secret Manager keys, circuit breaker, deterministic fallback, Xero cash-forecast exclusion). It does not claim OpenAI zero-data-retention, a store-disable flag, EU transfer publication, or qualified-counsel review. The Privacy Policy sharing list points at the same provider, so owners and admins who accepted the previous privacy text will be asked to accept the updated package. DPA objection rights remain via privacy@beamopilot.com.</summary>
  </entry>
  <entry>
    <title>Tax and trade results are labelled as suggestions and screening aids</title>
    <id>https://beamopilot.com/changelog#change-tax-and-trade-results-are-labelled-as-suggestions-and-screening-aids</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-tax-and-trade-results-are-labelled-as-suggestions-and-screening-aids"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Cash → Documents → Tax &amp; trade automation still commits tax, watches nexus, and assembles filings, but HS, denied-party, and USMCA outputs now match what the code actually does. HS codes are catalog keyword-hint suggestions with a source, heuristic confidence, and a disclaimer that they are not a customs ruling. Denied-party checks are a built-in name-token and ISO-country screening aid — not OFAC, SDN, or legal clearance — and unresolved hits still hold broker handoff. USMCA is a lane-and-regional-value heuristic, not a rules-of-origin determination. Docs, formulas, and the public /docs article say the same thing.</summary>
  </entry>
  <entry>
    <title>Shopify App Store listing is ready; hosted install stays invite-only</title>
    <id>https://beamopilot.com/changelog#change-shopify-app-store-listing-is-ready-hosted-install-stays-invite-only</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-shopify-app-store-listing-is-ready-hosted-install-stays-invite-only"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The public Shopify app still starts OAuth from Shopify before any Beamo UI, HMAC-verifies webhooks, and erases credentials on uninstall or shop/redact. Listing copy, screenshot sizes, and legal URLs now match what the product actually does: required reads only, optional write-back and historical-order scopes, and hosted production still invite-only so a merchant signs into an invited workspace after Shopify approves permissions. Partner Dashboard Submit, reviewer credentials, and shopify app deploy remain owner actions — this release does not claim the listing is already in review.</summary>
  </entry>
  <entry>
    <title>Amazon Seller Central still uses unpublished-app consent</title>
    <id>https://beamopilot.com/changelog#change-amazon-seller-central-still-uses-unpublished-app-consent</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-amazon-seller-central-still-uses-unpublished-app-consent"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Connect Amazon is ready for a public Selling Partner Appstore listing: production Login and Redirect URIs stay on beamopilot.com, Referrer-Policy is no-referrer, and a seller arriving from Authorize Now can finish Beamo sign-in without leaking Amazon state in the URL. Hosted production still sends version=beta until Amazon publishes the listing, so a seller who is not the app developer may be unable to authorize yet. After Amazon shows the app as published, an operator release can drop that beta-only flag.</summary>
  </entry>
  <entry>
    <title>Hosted signup is invite-only until public signup is fully armed</title>
    <id>https://beamopilot.com/changelog#change-hosted-signup-is-invite-only-until-public-signup-is-fully-armed</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-hosted-signup-is-invite-only-until-public-signup-is-fully-armed"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Create your workspace on the homepage, sign-in, and demo convert used to open a form that production then refused. Hosted Beamo Pilot is invite-only: those buttons now say Request access and land on the contact form, mobile hides Sign up, and a closed deployment never advertises social signup. Public self-serve stays behind SIGNUP_ENABLED plus SMTP, Firebase phone proof, and complete Stripe billing; a self-serve workspace cannot launch until a trial or paid subscription is active. Invited operator workspaces skip that billing gate.</summary>
  </entry>
  <entry>
    <title>Data checks covers Amazon, and inventory pools are labeled honestly</title>
    <id>https://beamopilot.com/changelog#change-data-checks-covers-amazon-and-inventory-pools-are-labeled-honestly</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-data-checks-covers-amazon-and-inventory-pools-are-labeled-honestly"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Channels → Data checks used to ignore Amazon — the highest-volume channel — because Quality Lab only read marketplace connector accounts, not SP-API IntegrationAccounts and SyncRuns. Amazon listings, FBA inventory, orders, returns, settlements, inbound, and fees now appear on the same evidence board, with FBA inventory labeled as a single marketplace pool rather than per fulfillment center. eBay now reads merchant locations and per-SKU availability distributions instead of marking multi-location inventory as not supported; a location-list failure no longer fails the inventory sync. Etsy stays one shop, one pool, and says so. Data checks shows those capability notes in the table, and a single-pool status does not look like a failed or missing stream.</summary>
  </entry>
  <entry>
    <title>Outbound webhooks cover sync, connectors, POs, and forecasts</title>
    <id>https://beamopilot.com/changelog#change-outbound-webhooks-cover-sync-connectors-pos-and-forecasts</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-outbound-webhooks-cover-sync-connectors-pos-and-forecasts"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Integrators who subscribed to outbound webhooks could only hear about supplier actions, alerts, a newly created purchase order, WMS operations, and payments. The platform already knew when a sync failed, a connector was disconnected, a PO was approved or sent or received, a forecast finished, or a listing write-back failed — and never told the receiver. Those events are now first-class catalog types: they queue in the same transaction as the mutation, deliver after commit, and show up in Settings → API keys &amp; webhooks and in the public API docs. A stale connector still raises the in-app Failed sync alert; connector.disconnected fires when credentials are actually torn down.</summary>
  </entry>
  <entry>
    <title>Public API covers sync status, catalog, webhooks, forecasts, returns, and settlements</title>
    <id>https://beamopilot.com/changelog#change-public-api-covers-sync-status-catalog-webhooks-forecasts-returns-and-set</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-public-api-covers-sync-status-catalog-webhooks-forecasts-returns-and-set"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>An integrator with an API key could pull replenishment and inventory but could not tell whether those numbers were stale, could not manage webhook subscriptions without a user session, and had no catalog, forecast, returns, or settlements reads. Those now live on /public/v1: GET /sync-status reports per-connector and per-stream freshness plus the latest planning run; GET /catalog is the product directory; GET/POST/PUT/DELETE /webhooks plus test and replay let a write-scoped key manage deliveries (the signing secret is still shown only on create or rotate); GET /forecasts, /forecasts/planning, and /forecasts/cash expose demand and cash weeks; GET /returns and /settlements page RMAs and payout batches. Every write still requires Idempotency-Key, test-mode keys stay read-only, and another workspace's rows 404.</summary>
  </entry>
  <entry>
    <title>Planning math uses real variability, lot dates, and confirmed supplier terms</title>
    <id>https://beamopilot.com/changelog#change-planning-math-uses-real-variability-lot-dates-and-confirmed-supplier-ter</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-math-uses-real-variability-lot-dates-and-confirmed-supplier-ter"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Safety stock no longer estimates demand noise from three overlapping 7/14/30-day windows or snaps a 0.93 service level to 0.95: it uses a robust daily-series estimate and the exact normal inverse CDF, and Amazon receiving variability on the SKU now actually widens lead-time sigma. The 0.5×–3× clamp around operator safety days, the 90-day demand lookback, the delayed-receiving scenario floor, returns-netting clamps, and the holding-cost rate are workspace settings instead of hidden constants — aging, capital planning, and order-quantity economics share that one holding-cost figure, and aged units prefer inventory-lot received dates over days-of-cover. Supplier terms that still carry the 30% deposit / 10% freight starting point are labelled as platform defaults until you save them. RFQ bids now get a computed score, RFI/auction/spot-buy actually behave differently, and awarding a quote writes the price back onto the supplier's price list so the next plan is not still buying at the old tier.</summary>
  </entry>
  <entry>
    <title>Configuration examples match what the product actually reads</title>
    <id>https://beamopilot.com/changelog#change-configuration-examples-match-what-the-product-actually-reads</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-configuration-examples-match-what-the-product-actually-reads"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Signup stays closed unless an operator turns it on with Firebase and Stripe in place — the example env no longer advertised SIGNUP_ENABLED=true while every deploy defaulted to false. Login with Amazon stays a Supabase Auth setting, seller refresh tokens stay on the connector row, and browser Firebase keys stay on the frontend build instead of unused backend copies. Demo mode is the backend DEMO_MODE / ENABLE_TEST_LOGIN pair, not a Vite flag. Hosted production still arms the supplier-agent platform gates so a workspace can configure auto-send, while new supplier policies, payment permission, and Alibaba dry-run stay off until you opt in.</summary>
  </entry>
  <entry>
    <title>Dead Ask Pilot, identity, and Amazon connect duplicates removed</title>
    <id>https://beamopilot.com/changelog#change-dead-ask-pilot-identity-and-amazon-connect-duplicates-removed</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dead-ask-pilot-identity-and-amazon-connect-duplicates-removed"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Ask Pilot had a second POST /api/v1/assistant/ask that no client used — the live path is POST /api/v1/operator-assistant/ask, plus /ask/stream. GET /users/me was the same identity payload as GET /auth/me, which is what the web and mobile apps actually call. Amazon Seller Central connect sent a no-op organization_id, and Settings → Advanced still had an unreachable “Amazon plugin tools are not available yet” empty state even though the catalog is a fixed non-empty list. Those duplicates are gone. Connect Amazon, Ask Pilot, and Amazon plugin tools still use the same live routes; old Amazon connect bodies that still include organization_id are ignored.</summary>
  </entry>
  <entry>
    <title>Product tour and demo guide follow the interface language</title>
    <id>https://beamopilot.com/changelog#change-product-tour-and-demo-guide-follow-the-interface-language</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-product-tour-and-demo-guide-follow-the-interface-language"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The first-run product tour and the demo guide used to stay in English in every locale, and a missing phrase in German, Italian, Indonesian, Portuguese, Turkish, or Vietnamese could be rebuilt word-by-word into unreadable salad. Both surfaces now have whole-sentence translations in all 22 locales, including chrome (Next, Back, Skip tour, progress). Uncatalogued sentences stay in English instead of being scrambled, so the first thing a non-English operator sees is actually in their language.</summary>
  </entry>
  <entry>
    <title>Docs last-updated dates, Settings guides, and a changelog feed</title>
    <id>https://beamopilot.com/changelog#change-docs-last-updated-dates-settings-guides-and-a-changelog-feed</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-docs-last-updated-dates-settings-guides-and-a-changelog-feed"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every public /docs article now shows when it was last checked against the product, so a guide is no longer undated. Four shipped Settings surfaces that had no article now do: Sync streams and Job cadences for every workspace, plus the Beamo-internal System configuration and Observability panels (those last two 404 for a customer token and are documented as such). What's new already filtered by New / Improved / Fixed / Security; those same types now also publish as an Atom feed at /changelog.xml. The operator v2 TODO file is an archive of shipped work, not a live backlog, and release-readiness checkboxes are a per-release verification pass rather than a feature-gap list.</summary>
  </entry>
  <entry>
    <title>Honest errors when collaboration refresh or camera scanning fail</title>
    <id>https://beamopilot.com/changelog#change-honest-errors-when-collaboration-refresh-or-camera-scanning-fail</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-honest-errors-when-collaboration-refresh-or-camera-scanning-fail"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Saving a supplier dispatch template or localized PO terms used to swallow a failed reload of that preview, so the card kept showing the previous version with no notice that anything had gone wrong. The Collaboration card now says the save landed but the preview could not be refreshed, keeps the last known template on screen, and offers Reload preview. A first load that cannot fetch templates no longer claims the supplier is using workspace defaults. On Operations → Receiving, a browser that can open the camera but cannot decode barcodes from it used to keep a live view that never scanned; the scanner now stops, explains that camera detection is unavailable, and leaves hardware-scanner and typed-barcode entry working.</summary>
  </entry>
  <entry>
    <title>Planning uses the fulfillment network as connected echelons</title>
    <id>https://beamopilot.com/changelog#change-planning-uses-the-fulfillment-network-as-connected-echelons</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-uses-the-fulfillment-network-as-connected-echelons"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>An active fulfillment network is no longer an Insights-only model. The daily planning run now sizes safety stock where inventory is held: hubs cover supplier lead time, downstream nodes cover the shorter transfer, and customer demand is given to the selling echelons instead of being split across a blended pool. After sequential transfer-then-buy, a bounded joint solver overlay can replace period-0 buys and transfers with a network-wide answer, record why on the recommendation, and still fail open if the graph is missing or the model is too large. Side-by-side run comparison now shows purchase, transfer, safety-stock, working-capital, service, and stockout cost, and each proposal states the economics versus buying at the destination. Execution is unchanged: approval still creates only a draft purchase order or warehouse rebalance.</summary>
  </entry>
  <entry>
    <title>ERP sandbox and generic REST connections for NetSuite, SAP, Dynamics, Intacct, and Oracle</title>
    <id>https://beamopilot.com/changelog#change-erp-sandbox-and-generic-rest-connections-for-netsuite-sap-dynamics-intac</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-erp-sandbox-and-generic-rest-connections-for-netsuite-sap-dynamics-intac"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Cash → Documents now has ERP connections: NetSuite, SAP Business One / S/4HANA, Microsoft Dynamics 365, Sage Intacct, and Oracle Fusion. Each workspace maps pull, push, and source of truth for items, vendors, purchase orders, receipts, inventory, invoices, bills, and COGS journals. Unchanged rows are skipped; conflicts follow the mapping; failures retry with backoff and stay visible as dead letters with a reconciliation report after every run. Sandbox runs the full loop on an in-row ledger without a live tenant. Production stores encrypted credentials and never returns them; live HTTP is generic JSON REST (Bearer or Basic), not TBA, OAuth token exchange, Intacct XML, or SAP session login. A daily job covers every connected workspace.</summary>
  </entry>
  <entry>
    <title>Profit-aware dynamic pricing</title>
    <id>https://beamopilot.com/changelog#change-profit-aware-dynamic-pricing</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-profit-aware-dynamic-pricing"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Cash now has a Pricing workspace that recommends (and, when you explicitly turn on live apply, writes) prices that maximize expected profit. The engine factors demand elasticity, days of cover, margin after fees and returns, and competitive context, then keeps every candidate inside MAP, min/max, a margin floor, and a max-change band. High-impact moves wait for finance approval. A 7-day simulation shows expected units, revenue, and profit before you apply. Apply never calls a marketplace API: it sets listing write-back targets so the existing Amazon, Walmart, Shopify, eBay, TikTok Shop, and Etsy jobs push and verify, and Pricing reconciles the intended target against the observed price. A six-hour job refreshes every workspace that has listings to price.</summary>
  </entry>
  <entry>
    <title>Collaborative hierarchical S&amp;OP</title>
    <id>https://beamopilot.com/changelog#change-collaborative-hierarchical-s-op</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-collaborative-hierarchical-s-op"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Planning now has an S&amp;OP workspace for weekly and monthly consensus cycles on the live replenishment run. Demand rolls up SKU → category → brand → company and across channel and region; a parent change proposal splits onto child SKU×channel leaves by baseline share. Demand, supply, finance, and executive roles can comment, propose, and approve; locking records the bound planning run and scenario without rewriting buy quantities. The executive report shows company, brand, channel, and region gaps plus recommended buy, expedite, or hold actions. A six-hour job refreshes open cycles and can open a due period; it never auto-locks.</summary>
  </entry>
  <entry>
    <title>Supplier risk scores and tracked mitigations</title>
    <id>https://beamopilot.com/changelog#change-supplier-risk-scores-and-tracked-mitigations</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-risk-scores-and-tracked-mitigations"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Supplier Resilience now scores every named supplier and mapped lane from ingested risk events plus your on-time, quality, and responsiveness evidence. Scores are 0–100 with an explainable factor breakdown. High and critical results can open dual-source, increase-buffer, or alternate-lane early warnings, which you accept, work, resolve, or dismiss — Pilot never auto-resolves them or executes dual-sourcing. A six-hour job uses the same local path; it still does not fetch a provider. Refresh scores from the Scores tab.</summary>
  </entry>
  <entry>
    <title>MRP supplier capacity and what-if runs</title>
    <id>https://beamopilot.com/changelog#change-mrp-supplier-capacity-and-what-if-runs</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-mrp-supplier-capacity-and-what-if-runs"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Manufacturing MRP already exploded multi-level bills of materials and scheduled work centers, but purchase planned orders ignored supplier capacity and there was no way to inspect a what-if without risking a live firm. Solve now records supplier capacity and credit overloads next to work-center bottlenecks, keeps the planned buy (demand is not dropped), and lets you run a labeled what-if that scales demand or calendar minutes. What-if runs cannot be firmed. Compare two completed runs to see planned-order, bottleneck, and overload deltas. The daily manufacturing-planning job still creates a live 90-day plan at 1.0/1.0.</summary>
  </entry>
  <entry>
    <title>Transportation control tower tracks inbound, outbound, and exceptions into planning and cash</title>
    <id>https://beamopilot.com/changelog#change-transportation-control-tower-tracks-inbound-outbound-and-exceptions-into</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-transportation-control-tower-tracks-inbound-outbound-and-exceptions-into"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Transportation workspace already tendered, booked, and tracked freight. It now treats inbound and outbound as first-class directions, detects late, stuck, rerouted, and damaged exceptions (and lets you record the last three by hand), and feeds the live ETA into receiving dates, available supply, and the cash forecast. Exception alerts use a dedicated Shipment exceptions notification instead of mixing with late purchase orders, and they open the booking on the Bookings tab. Carrier and lane scorecards add exception counts and average booked freight. The header counts inbound and outbound in-flight shipments plus exceptions. Mobile pushes for this web-only tower land in Alerts.</summary>
  </entry>
  <entry>
    <title>Inventory sandbox ranks buys under uncertainty</title>
    <id>https://beamopilot.com/changelog#change-inventory-sandbox-ranks-buys-under-uncertainty</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-inventory-sandbox-ranks-buys-under-uncertainty"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Planning Insights inventory sandbox still shows the five deterministic options (buy now, delay, split, transfer, reduce spend) as point estimates, so a 20-unit horizon cap is still a 20-unit horizon cap. Each run now also fits a Monte Carlo digital twin: demand, supplier delay, transit, receiving, FX, freight, and cost are drawn from distributions with a supplier copula, then scored as P10/P50/P90 cash, margin, service, and stockouts plus the chance of a cash-budget or minimum-cash-floor breach. A stress library (supplier shutdown, port closure, demand spike, tariff increase, marketplace suspension) shifts that same copula instead of swapping the model. The recommended row is the best action under uncertainty; holdout coverage reports whether the tails are calibrated. Mobile Planning shows P50 service, P90 cash, and breach risk on the existing simulation card.</summary>
  </entry>
  <entry>
    <title>Unified order promising across warehouses and channels</title>
    <id>https://beamopilot.com/changelog#change-unified-order-promising-across-warehouses-and-channels</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-unified-order-promising-across-warehouses-and-channels"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Open marketplace orders can now be promised as first-class sales orders instead of only feeding replenishment demand. Operations → Inventory → Order promising ranks lines by margin, SLA, customer, and channel service commitments, reserves warehouse and 3PL stock so planning cannot sell the same unit twice, splits shipments when a single node cannot cover, and reroutes after a warehouse, carrier, or 3PL disruption. Capable-to-promise includes inbound that can still meet the ship-by date. Channel write-back uses the existing Amazon, Walmart, Shopify, eBay, TikTok Shop, and Etsy fulfillment paths, including dry-run. A 15-minute job ingests leftover marketplace orders and runs the same cycle. SKU 360 substitute checks stay as a soft availability preview; this layer is the durable reservation.</summary>
  </entry>
  <entry>
    <title>Tax and trade automation on Cash → Documents</title>
    <id>https://beamopilot.com/changelog#change-tax-and-trade-automation-on-cash-documents</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-tax-and-trade-automation-on-cash-documents"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Sales tax used to be on-demand estimates only. Cash → Documents now has Tax &amp; trade automation: commit tax to channel orders, watch nexus thresholds, generate filings and remittance, keep exemption certificates, suggest HS codes from catalog keywords for review, run a built-in denied-party screening aid, check a USMCA lane heuristic, assemble customs packs for broker handoff, and compare duty scenarios. US destinations stay uncomputed unless Avalara or TaxJar is connected, a marketplace facilitator remits, or an exemption matches. A daily tax_trade job runs the same cycle. HS and screening results are suggestions and screening aids, not customs rulings or legal clearance.</summary>
  </entry>
  <entry>
    <title>Scope 3 freight carbon on Planning Insights</title>
    <id>https://beamopilot.com/changelog#change-scope-3-freight-carbon-on-planning-insights</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-scope-3-freight-carbon-on-planning-insights"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Planning Insights now estimates well-to-wheel freight carbon from bookings, containers, and operator lane kilometres you already have. Shipment and SKU rows stay uncomputed when mass or distance is missing — kilometres and product carbon are never invented. Supplier and lane scorecards, carbon-aware freight alternatives, container-fill notes, and a scenario snapshot against another mode sit in the same panel. JSON and CSV exports keep the cited factor set, run window, and every uncomputed row as evidence lineage. A daily job refreshes active workspaces; a failure in one workspace does not stop the others.</summary>
  </entry>
  <entry>
    <title>Setup explains what “connected” actually means</title>
    <id>https://beamopilot.com/changelog#change-setup-explains-what-connected-actually-means</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-setup-explains-what-connected-actually-means"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>First-run setup used to call a channel Connected the moment its credentials verified, while planning only counts a source once a sync or import has actually completed — so an operator could finish the wizard, see five green cards, and land on an empty workspace wondering where the data went. Connector cards, the status legend, and the review page now say Account linked (credentials verified, no data yet), Action needed, Setup pending, CSV import chosen, or Not connected, and the connectors step spells out that CSV import chosen means you opted to upload files later, not that rows are already in Beamo. Nothing is blocked: Continue still advances with nothing connected, and the button says so, so you can finish setup and link a live account from Channels afterwards. The warehouse step warns before the first save that the warehouse code is locked from then on, rather than explaining it after the fact. Launch no longer reports a flat “queued N syncs”: it counts what it queued, what it skipped because the channel is not connected yet, and what failed to queue, so a launch with no live connectors reads as finished-with-nothing-to-sync instead of looking broken. And a stall on the warehouse step now emails about your first warehouse instead of “planning defaults”, which was the wrong step entirely.</summary>
  </entry>
  <entry>
    <title>Transfers page by status, and related setup and dispatch fixes</title>
    <id>https://beamopilot.com/changelog#change-transfers-page-by-status-and-related-setup-and-dispatch-fixes</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-transfers-page-by-status-and-related-setup-and-dispatch-fixes"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The Transfers tab used to load the first 200 proposals and transfers and then filter status in the browser, so a Closed chip could look empty while older closed rows sat past that cap. Status chips now query the server, Closed includes sellable-available moves, and each list pages 50 at a time with Load more. Approving several proposals and converting them no longer rolls back the ones that already succeeded when a later row fails. Bulk dispatch only toasts success and closes the preview when at least one purchase order was actually sent. Setup no longer treats an inactive leftover warehouse as the warehouse step being done, and saving that step no longer wipes a region Operations already stored. Marketplace polls that re-read a full day after cancellations already landed keep the day's net total instead of subtracting those units twice.</summary>
  </entry>
  <entry>
    <title>TikTok Shop webhooks apply one order or product, not a 30-day re-sync</title>
    <id>https://beamopilot.com/changelog#change-tiktok-shop-webhooks-apply-one-order-or-product-not-a-30-day-re-sync</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-tiktok-shop-webhooks-apply-one-order-or-product-not-a-30-day-re-sync"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Beamo subscribed to all nine TikTok Shop webhook topics, but the receiver only handled seller deauthorization and authorization expiry in place. Every other ping — a single order status change, a return, an inventory tweak — started the same 30-day catalog, inventory, and order sync the six-hour poll uses. On a busy shop that is a self-inflicted rate-limit storm. Each topic now fetches just that order, return, or product, nets cancellations and finalized refunds into the day's channel sales, updates warehouse inventory for the affected SKUs, and leaves unpaid or pending returns alone. Finalized refunds stay as an overlay on the order so a later status ping that cannot see the return does not restore those units. Deauthorization and expiry also apply when TikTok sends them as a string event type rather than numeric type 6/7. Unknown topics are acknowledged and ignored. The six-hour poll is still the durable backup for a missed delivery.</summary>
  </entry>
  <entry>
    <title>Marketplace syncs share a fair rate-limit budget</title>
    <id>https://beamopilot.com/changelog#change-marketplace-syncs-share-a-fair-rate-limit-budget</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-marketplace-syncs-share-a-fair-rate-limit-budget"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A busy night of connector syncs used to be able to trip Amazon, Walmart, TikTok, eBay, or Etsy rate limits and stall every other workspace on the same app: SP-API only paced a handful of operations (none of the heavily paginated ones), and the other connectors retried 429s without counting quota at all. Every outbound marketplace call now goes through a shared per-provider budget. Header-driven pacing covers inventory, orders, listings, and reports; Etsy and TikTok Shop (app-level quotas) split capacity fairly across workspaces that are syncing, so one tenant cannot exhaust the rest. A wait that would exceed 30 seconds fails that stream instead of hanging the job; the next scheduled poll retries it.</summary>
  </entry>
  <entry>
    <title>Marketplace connectors sync from a cursor, not a fixed 30-day window</title>
    <id>https://beamopilot.com/changelog#change-marketplace-connectors-sync-from-a-cursor-not-a-fixed-30-day-window</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-marketplace-connectors-sync-from-a-cursor-not-a-fixed-30-day-window"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Walmart, Shopify, TikTok Shop, eBay, Etsy, WooCommerce, BigCommerce, and Mercado Libre used to re-pull a fixed trailing 30 days on every six-hour run: that burned API quota, and any outage longer than 30 days permanently lost history. Each orders and settlements stream now stores a high-water mark plus a missed-window replay anchor, matching Amazon Ads. Scheduled syncs pull from the cursor with a two-day overlap (14 days for WooCommerce, BigCommerce, and Mercado Libre, whose order search is created-at only) and chunk catch-up after a gap. A failed or truncated pull does not skip ahead. WooCommerce and BigCommerce now request cancelled and refunded statuses in that window, and Mercado Libre cancelled orders net to zero, so a late cancel still drops demand instead of staying sold. Channels → Connectors keeps Sync as the incremental refresh and adds Backfill so you can choose days back or a start/end date when you need history on purpose. eBay still cannot return orders older than 90 days; that limit is shown when a backfill is clamped.</summary>
  </entry>
  <entry>
    <title>Job failures and stale connectors land in Alerts</title>
    <id>https://beamopilot.com/changelog#change-job-failures-and-stale-connectors-land-in-alerts</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-job-failures-and-stale-connectors-land-in-alerts"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A background job that failed used to show up only in Prometheus and logs, even though Failed syncs was already an email-on channel for admins. Those failures now write an Alerts inbox row, ring the topbar bell, and send the Failed syncs email. Stale-sync watching also covers Shopify and the other marketplace connectors, QuickBooks, Xero, Plaid, live 3PL links, and Amazon Ads — not only Amazon SP-API — and it uses the freshness window from Settings instead of a hardcoded 12 hours. The same failure is not mailed again on every sweep; the inbox row updates until you resolve it, and the card opens System status or the connector that went quiet.</summary>
  </entry>
  <entry>
    <title>Invite, checkout, API-key, and webhook creates are safe to retry</title>
    <id>https://beamopilot.com/changelog#change-invite-checkout-api-key-and-webhook-creates-are-safe-to-retry</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-invite-checkout-api-key-and-webhook-creates-are-safe-to-retry"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>A double-clicked Invite used to send a second outbound email, and the same gap existed on Stripe checkout, API-key create, and webhook create — none of those POSTs required an Idempotency-Key or had a dedicated rate-limit bucket, unlike purchase-order dispatch and jobs. They now all require Idempotency-Key (the web app sends a stable pending key so a retry of the same form body replays the first success, including the shown-once secret). Reusing a key with a different body returns 409. Invite and resend-invite share a 20-per-hour session bucket so the form cannot be used as an unthrottled mailer; checkout is 10 per minute; API-key and webhook create are 20 per hour. Sibling reads, portal session, webhook test, and key disable are unchanged.</summary>
  </entry>
  <entry>
    <title>Job triggers rotate without downtime and name their caller</title>
    <id>https://beamopilot.com/changelog#change-job-triggers-rotate-without-downtime-and-name-their-caller</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-job-triggers-rotate-without-downtime-and-name-their-caller"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>Scheduled HTTP jobs used a single shared secret with no overlap window, so rotating JOB_RUNNER_TOKEN meant a gap where Cloud Scheduler and Cloud Tasks callbacks all failed, and every caller looked the same. Job routes now accept the current secret plus previous secrets during rotation, and optional named credentials that can be limited to specific jobs. A token that is not allowed to run that job is rejected; every accepted call is attributed to the credential id in logs, the actor context, and the X-Job-Caller response header, without writing the secret itself.</summary>
  </entry>
  <entry>
    <title>Canonical audit covers API keys, permissions, and retention</title>
    <id>https://beamopilot.com/changelog#change-canonical-audit-covers-api-keys-permissions-and-retention</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-canonical-audit-covers-api-keys-permissions-and-retention"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>Creating an API key, granting a role finance.manage, or shortening a retention window used to leave no hash-chained record, so those questions were unanswerable after the fact. The canonical audit log now records create, update, and delete on every sensitive table — API keys, role-permission grants, retention policies, outbound webhooks, sessions, MFA secrets, payment-rail accounts, SSO/MFA/WebAuthn, support-access grants, connector and accounting credentials, approval chains, and automation policies. Secret-shaped fields are stored as [REDACTED]. Last-used / last-seen heartbeats are skipped so everyday traffic cannot flood the chain; disabling, rotating, or deleting the same record still writes a row.</summary>
  </entry>
  <entry>
    <title>Find a setting now reaches notification routing</title>
    <id>https://beamopilot.com/changelog#change-find-a-setting-now-reaches-notification-routing</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-find-a-setting-now-reaches-notification-routing"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The 56-row notification-routing table — which roles get mobile or email alerts for stockouts, failed syncs, approvals, cash risk, and receiving — lived on Settings → Advanced with no panel id and no Find a setting entry, so typing “alert routes” or “notification routing” answered “No setting matches”. Every Settings destination panel now has a stable id and a complete index row, including that table, operator readiness, planner snapshot, operator overrides, Amazon plugin tools, recent sync runs, shipment confirmation, and Amazon fulfillment. A test fails if a new panel ships without an index entry. Typing “alert routes” switches to Advanced, opens the group, and scrolls to the table; the same address works as a bookmark.</summary>
  </entry>
  <entry>
    <title>Setup now collects your first warehouse before launch</title>
    <id>https://beamopilot.com/changelog#change-setup-now-collects-your-first-warehouse-before-launch</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-setup-now-collects-your-first-warehouse-before-launch"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The setup wizard skipped the warehouse step the backend already named, then greeted a newly launched workspace with four “Missing” cards — Warehouse, First import, Supplier data, and Planning run — for configuration setup never asked about. Setup now has an eighth step after Business profile: add one stocking location (code, optional name, type, country, optional city). Multi-warehouse is introduced there as a Team-plan capability you add later under Operations, not a setup blocker. Launch only opens follow-up tasks for what the wizard collected, so a finished first warehouse no longer shows as missing on Home.</summary>
  </entry>
  <entry>
    <title>Autopilot activity names the PO, and the domain grid filters</title>
    <id>https://beamopilot.com/changelog#change-autopilot-activity-names-the-po-and-the-domain-grid-filters</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-autopilot-activity-names-the-po-and-the-domain-grid-filters"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Autopilot's Activity log used to print a raw subject UUID and send Open to a workspace root, so a dispatched purchase order looked like 7c2f8a1b-1234-… and landed on Buy plan instead of that PO. Rows now show the supplier plus a short id, and Open deep-links to the exact record — Purchase orders for a PO, the buy plan for a proposal, Transfers for a transfer proposal. The Domains tab also gained status and sort filters, including Paused (a safety pause or a tripped circuit breaker), so you can see which of the twelve domains are held without reading every card.</summary>
  </entry>
  <entry>
    <title>The supplier portal pages the supplier's own order history instead of hiding it</title>
    <id>https://beamopilot.com/changelog#change-the-supplier-portal-pages-the-supplier-s-own-order-history-instead-of-hi</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-supplier-portal-pages-the-supplier-s-own-order-history-instead-of-hi"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The supplier portal used to cap activity, shipments, invoices, issues, and proposals at a handful of rows and tell the supplier to ask someone else for the rest — over data the page had already fetched. That was the email back-and-forth the portal exists to eliminate. Each list now pages in place: the first page is the same size as before, Load more reveals the next page, Show all jumps to the complete record when more than one page remains, and the count says how many rows exist. Nothing is hidden behind Contact.</summary>
  </entry>
  <entry>
    <title>The Inventory tab opens on real stock, with receive and putaway one tap away</title>
    <id>https://beamopilot.com/changelog#change-the-inventory-tab-opens-on-real-stock-with-receive-and-putaway-one-tap-a</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-inventory-tab-opens-on-real-stock-with-receive-and-putaway-one-tap-a"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Operations → Inventory used to land on seven collapsed tools and no on-hand table, and the barcode camera plus putaway list sat in a closed fold at the bottom of Receiving — unusable on a dock tablet. The Inventory tab now opens on that warehouse's positions (SKU, bin, lot, available), with large Receive units and Putaway buttons that jump straight to the dock tools. Barcode receiving and putaway sit at the top of Receiving instead of behind a disclosure, putaway stays on screen even when the list is empty, and lots, serials, shrinkage, cross-dock, MCF, kitting, and warehouse setup remain available underneath without stealing the first paint.</summary>
  </entry>
  <entry>
    <title>Recommended buys columns are yours to choose, and stale sorts no longer hide</title>
    <id>https://beamopilot.com/changelog#change-recommended-buys-columns-are-yours-to-choose-and-stale-sorts-no-longer-h</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-recommended-buys-columns-are-yours-to-choose-and-stale-sorts-no-longer-h"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Recommended buys still opens on the decision columns — SKU, supplier, warehouse, buy now, order by, cost — but the fourteen diagnostic fields that used to linger as invisible sort keys (lifecycle, tier, available, inbound, origin, health, sales pace, days left, risk date, target, planner qty, cash now, profit impact, status) are now a Columns picker: show the ones you need, hide the rest, and sort only by what is on screen. Saved views store that column set with the sort, and a view that still names a hidden or retired column falls back to urgency order instead of rearranging the list by a field you cannot see. The same picker includes a Sort by control so the choice works when the table is in card layout.</summary>
  </entry>
  <entry>
    <title>Bulk PO dispatch lets you choose orders, CC, and a message</title>
    <id>https://beamopilot.com/changelog#change-bulk-po-dispatch-lets-you-choose-orders-cc-and-a-message</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-bulk-po-dispatch-lets-you-choose-orders-cc-and-a-message"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Sending every approved purchase order for a supplier used to be one irreversible click: no way to leave an order out, no CC or custom message, and the confirm dialog only repeated a count. Bulk dispatch now lists the approved, unsent purchase orders for that supplier (the real set, not just the current page), lets you tick a subset, set CC recipients and an optional message, then shows a preview of exactly which orders will be emailed and to whom. Nothing goes out until you confirm. Cancel leaves every order approved and unsent.</summary>
  </entry>
  <entry>
    <title>Operations panels retry failed reads, and every workspace shows how fresh its numbers are</title>
    <id>https://beamopilot.com/changelog#change-operations-panels-retry-failed-reads-and-every-workspace-shows-how-fresh</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-operations-panels-retry-failed-reads-and-every-workspace-shows-how-fresh"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A temporary failure on Operations used to leave a dead panel with no way forward — six different error styles, none of them with a retry, and several of them looking exactly like “there is nothing here”. Every operations panel now uses the same load error as Settings: Try again, with retry hidden on 401/403 because those are answers, not accidents. A later refresh that fails keeps the last good list on screen and warns, instead of wiping it. Workspace headers on Operations, Alerts, Invoices, Transportation, Plan, Buy, and Cash also print when the numbers were last fetched, with Refresh on the screens where a cheap re-read is the right next step (Update now still rebuilds a plan where it always did).</summary>
  </entry>
  <entry>
    <title>Action guardrails are the same for buys and transfers</title>
    <id>https://beamopilot.com/changelog#change-action-guardrails-are-the-same-for-buys-and-transfers</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-action-guardrails-are-the-same-for-buys-and-transfers"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Approving a transfer proposal used to fire on a bare click even though converting it reserves origin stock, while the matching purchase-order path already asked first — and Update now meant a cheap refetch on Home and Operations but an expensive planning run on Planning and Buy. Transfers now follow the same confirmation ladder as buys: Approve &amp; create transfer is the everyday confirmed step on a proposed transfer, Create transfer asks before it reserves origin units, and Send transfer asks before the stock leaves. Warehouse-to-warehouse rebalancing uses the same confirms, with Create warehouse transfer so the DC-to-DC form is not mistaken for converting an Amazon proposal. Refresh, Refresh briefing, Rebuild the plan, Rebuild the buy plan, and Rebuild cash forecast each name the verb they run, so a refetch is never mistaken for a planning run.</summary>
  </entry>
  <entry>
    <title>Active filters stay visible, shareable, and reload-safe</title>
    <id>https://beamopilot.com/changelog#change-active-filters-stay-visible-shareable-and-reload-safe</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-active-filters-stay-visible-shareable-and-reload-safe"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A few lists used to hide or contradict their own filters. Planning's &quot;N blocked&quot; header chip turned blocked-only on, but the checkbox and the only reset lived two collapsed disclosures down, so a shared /planning?blockedOnly=true link looked like a mysteriously short buy list. Saved views on Recommended buys stored search and sort while the URL stored tier, risk, supplier, and blocked-only, and each system dropped the other's state when it applied. Transfer status chips on Operations were component-local, so a reload always bounced back to In transit. Filters now live in the URL; saved views snapshot that URL state and write it back when you apply them (an explicit shared link still wins over your default view). Every active plan filter shows as a named pill on the decision header and the buy toolbar, with a clear control next to the rows it affects, and the blocked chip is a toggle that stays selected while the filter is on. Transfer and proposal status chips persist as transferStatus and proposalStatus on the Operations URL.</summary>
  </entry>
  <entry>
    <title>Lists no longer stop at 100 rows and tell you to export CSV</title>
    <id>https://beamopilot.com/changelog#change-lists-no-longer-stop-at-100-rows-and-tell-you-to-export-csv</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-lists-no-longer-stop-at-100-rows-and-tell-you-to-export-csv"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Five Planning Insights tables — ABC/XYZ classification, suggested buffer stock, the reorder calendar, multi-echelon positioning, and dual-sourcing opportunities — used to render the first 100 SKUs and tell you to export CSV or tighten filters to see your own catalog. Compare's changed-products view did the same for run diffs. Automation activity, cycle counts, damage &amp; shrinkage, supplier price lists, and web receiving scans and putaway tasks also treated a server page as the whole set. Those lists now page with Load more, show a real total (Loaded 100 of 1,240 SKUs), and keep earlier rows on screen so you can walk the complete data set in the app.</summary>
  </entry>
  <entry>
    <title>List screens share one search, sort, export, and bulk toolkit</title>
    <id>https://beamopilot.com/changelog#change-list-screens-share-one-search-sort-export-and-bulk-toolkit</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-list-screens-share-one-search-sort-export-and-bulk-toolkit"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The money tables and their sibling lists now work the same way. Purchase orders sort by supplier, status, arrival, or committed, and Orders search is server-side and lives in the URL with a CSV of the current view. Transfers gained search, column sort, saved views, CSV, and real bulk approve/reject/convert/cancel instead of a bare table. The supplier directory exports, saves views, and can mark many suppliers active or inactive in one request. Alert Center saves views, searches the inbox, shows how many matching alerts exist beyond the loaded page, and acknowledges, snoozes, or resolves a selection through one bulk endpoint rather than a request per card. Receiving exposes assigned owner, priority, and supplier filters next to the ones it already had, sorts the queue, and offers select-all on every row that has an id.</summary>
  </entry>
  <entry>
    <title>Ask Pilot history pages through every saved question</title>
    <id>https://beamopilot.com/changelog#change-ask-pilot-history-pages-through-every-saved-question</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-ask-pilot-history-pages-through-every-saved-question"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Ask Pilot's clock control only fetched eight saved questions and then hid half of those behind Show all, so anything older than the latest eight was unreachable even though the same API already pages for Settings → Ask Pilot answer review. History now loads 20 at a time with the saved total in the heading, a scrollable list, and Load more questions until you reach the oldest one. A new answer still appears at the top immediately, and a late page from an earlier scroll cannot overwrite a refresh.</summary>
  </entry>
  <entry>
    <title>KPI trends use the window you pick, with target and attainment on the sparkline</title>
    <id>https://beamopilot.com/changelog#change-kpi-trends-use-the-window-you-pick-with-target-and-attainment-on-the-spa</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-kpi-trends-use-the-window-you-pick-with-target-and-attainment-on-the-spa"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The KPI trends panel always asked the API for 90 days, even though the endpoint accepts 1–365, and each sparkline plotted only the actual series — dropping the per-day target and attainment the payload already carried. The window is now selectable across that full range (7 / 30 / 90 / 180 / 365 days, or any custom count from 1 to 365), Improving is still labelled from the window the API reports, and each sparkline draws a dashed target line beside the actuals. Hover, tap, or arrow keys read that day’s actual, target, percent of target, and on/off-target status. The chosen window stays in this browser.</summary>
  </entry>
  <entry>
    <title>Landed-cost documents can be edited, voided, and reopened</title>
    <id>https://beamopilot.com/changelog#change-landed-cost-documents-can-be-edited-voided-and-reopened</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-landed-cost-documents-can-be-edited-voided-and-reopened"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The Documents tab showed a voided status no action could produce, PUT on a landed-cost document was unused, and the Finalize confirmation said the allocation could not be undone. You can now edit a draft or provisional document, void any live document so its charges drop out of SKU landed cost, and reopen a finalized document to correct amounts and allocate again. Allocate moves a matching document to provisional; finalize still locks actuals, with a warning you can reverse it. Voided rows stay on the list with the last allocation snapshot, so a reversed invoice is visible instead of silent.</summary>
  </entry>
  <entry>
    <title>Cut or drop SKUs while approving a planning wave</title>
    <id>https://beamopilot.com/changelog#change-cut-or-drop-skus-while-approving-a-planning-wave</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cut-or-drop-skus-while-approving-a-planning-wave"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Approving a funded wave used to take every SKU at the planned quantity: “approve but cut SKU-X to 500” meant a full planning re-run or editing the purchase order afterwards, and operator overrides only shaped the next run. Start this plan now lets you change line quantities and remove SKUs on the order card before you confirm. Those edits apply in the same step as approval, so the purchase order is created at the quantities you typed — not rounded back to MOQ or case pack — and every cut is recorded on the approval record and the audit trail (from-units, to-units, who, when). A SKU set to zero is omitted from the PO; you cannot approve an order after removing every line. Simulate selection shows the cash impact of the cuts without committing. Cash budget and autopilot still approve the planned quantities when they send no line edits.</summary>
  </entry>
  <entry>
    <title>Supplier capacity and credit limits cap the buy plan</title>
    <id>https://beamopilot.com/changelog#change-supplier-capacity-and-credit-limits-cap-the-buy-plan</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-capacity-and-credit-limits-cap-the-buy-plan"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A supplier who can only make 20k units this month, or whose open-order credit line is already full, used to look the same as an unconstrained factory: planning only modelled minimums, so a wave could pile a quarter of demand onto them and only find out when the order was refused. Each supplier profile now takes an optional maximum capacity (units per period), the period those units cover, and an optional credit limit on unpaid open-order value. Leave them blank and the plan is unchanged; set them and the wave optimizer treats them as hard caps, counting units already on open purchase orders and unpaid value on unreceived orders against the remaining pool, then taking a smaller quantity that still fits or holding the SKU. Recommended buys show a Capacity limit or Credit limit badge, the SKU explanation names the remaining headroom, and creating a purchase order by hand is blocked the same way. CSV import accepts the same fields.</summary>
  </entry>
  <entry>
    <title>Sellable SKUs can have approved substitutes</title>
    <id>https://beamopilot.com/changelog#change-sellable-skus-can-have-approved-substitutes</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sellable-skus-can-have-approved-substitutes"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A short sellable SKU can now be filled by another sellable SKU you have approved as a substitute — not a bundle and not a manufacturing BOM component alternate. On SKU 360, name the alternate, its priority, and how many of its units fill one of this SKU, including optional two-way pairs. Order promising fills a requested quantity from the primary first, then approved substitutes in priority order, without double-booking a shared pool. Each planning run uses surplus on those approved alternates (stock above the substitute's own reorder point and target) to shrink or zero the primary's buy, then suggests variation-group, parent-ASIN, or brand-and-category peers that have surplus so you can Approve or Reject them before the next run. Recommended buys show Substitute available or Substitution suggested; Why this buy matters records the hops that covered the need.</summary>
  </entry>
  <entry>
    <title>Promotions can commit units, and the plan learns from what actually sold</title>
    <id>https://beamopilot.com/changelog#change-promotions-can-commit-units-and-the-plan-learns-from-what-actually-sold</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-promotions-can-commit-units-and-the-plan-learns-from-what-actually-sold"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Demand events used to be percent-only: you could say “Prime Day is +35%” but not “we committed 12,000 units”, and nothing measured whether the last promotion actually did what you modeled. You can now choose committed units for a campaign (or per SKU); planning blends that daily volume toward baseline by confidence, and a campaign total is split across SKUs by recent velocity. After the dates pass, the nightly feedback loop and the next planning run compare actual sales with an equal-length lookback, store the realized lift, mark the event completed, and blend that history into the next event of the same type so later forecasts learn instead of repeating a static percentage. Paused and cancelled events are left alone.</summary>
  </entry>
  <entry>
    <title>Planning will not buy more than a product can sell before it expires</title>
    <id>https://beamopilot.com/changelog#change-planning-will-not-buy-more-than-a-product-can-sell-before-it-expires</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-will-not-buy-more-than-a-product-can-sell-before-it-expires"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The planner used to ignore shelf life entirely: a 120-day product with a 180-day cover target was bought as if every unit lasted forever, and lots already inside the expiry-alert window counted as fully available supply. Cover is now capped to remaining sellable life after inbound lead time, receiving delay, and sellable delay, so a buy cannot outrun the product's shelf life, and a SKU that would expire in transit is not bought at all. Expired, near-expiry, quarantined, and recalled lot units are subtracted from on-hand using the same lot-expiry alert window operations already uses; inbound that cannot become sellable before expiry is dropped from the projection. Each recommendation carries a waste-risk flag — none, watch, or high — on the recommended-buys row, the SKU's Shelf life &amp; waste card, Insights attention, and the Why this buy explanation, so a buy that moved because of expiry is visible instead of silent.</summary>
  </entry>
  <entry>
    <title>Periodic-review SKUs are buffered through the next review</title>
    <id>https://beamopilot.com/changelog#change-periodic-review-skus-are-buffered-through-the-next-review</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-periodic-review-skus-are-buffered-through-the-next-review"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A SKU's reorder cadence (days) could be set on SKU 360 and in a planning-inputs CSV, but the planning engine never read it, so catalogs reviewed weekly or every two weeks were buffered as if they were watched continuously and systematically under-ordered. A positive cadence is now the periodic-review interval: the reorder point covers demand over lead time plus that review period plus safety stock, target cover grows by the same interval (and is never shorter than lead time + review), and statistical safety stock sizes variability over that protection period. Blank or 0 cadence stays continuous review, identical to the previous plan. Recommended-buys rows for those SKUs carry a Periodic review badge, Why this buy matters names the interval, and a cadence above 365 days is clamped so a typo cannot explode cover.</summary>
  </entry>
  <entry>
    <title>Planning buys per warehouse, not one blended pool</title>
    <id>https://beamopilot.com/changelog#change-planning-buys-per-warehouse-not-one-blended-pool</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-buys-per-warehouse-not-one-blended-pool"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Inventory snapshots and the replenishment engine now treat location as a first-class dimension. When a SKU is stocked in two or more warehouses, each DC is planned independently: a stocked-out warehouse still generates a buy even if another DC has cover, and the SKU row remains the cash and batching rollup. Purchase orders carry a ship-to warehouse, recommendation-generated POs are grouped by supplier and destination, and receiving records that structured location instead of a free-text dock string so inbound and on-hand land at the right DC.</summary>
  </entry>
  <entry>
    <title>Supplier currencies flow through buying, cash, and AP aging</title>
    <id>https://beamopilot.com/changelog#change-supplier-currencies-flow-through-buying-cash-and-ap-aging</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-currencies-flow-through-buying-cash-and-ap-aging"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A supplier whose terms are in EUR (or any currency other than the workspace default) used to have that currency stored and then ignored: proposals, purchase orders, and the cash forecast all ran in the workspace currency, and the aging report labelled every total USD. Buys now follow the supplier's currency end to end. Catalog costs convert at persist and PO-create time using the latest operator-set FX quote on or before the order date; planning cash constraints stay in the workspace reporting currency so a EUR supplier is still scored against USD cash on hand; the cash forecast converts each outflow back at the rate in force on that event's date; and AP aging converts headline totals the same way while keeping each supplier row in the currency it was recorded in. A missing rate is unconverted or blocked rather than silently treated as 1.0, and changing today's rate does not rewrite last month's cash math. Auto-send still holds a non-workspace-currency order for review.</summary>
  </entry>
  <entry>
    <title>Marketplace returns land in the Returns register automatically</title>
    <id>https://beamopilot.com/changelog#change-marketplace-returns-land-in-the-returns-register-automatically</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-marketplace-returns-land-in-the-returns-register-automatically"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every connected channel already fetched returns and refunds to net sales, but the Returns workspace only showed what someone typed by hand, logged on mobile, or what the demo seeded. Connector sync now writes those same return lines into the RMA register with the channel they came from and a durable marketplace id, so a re-sync updates the existing row instead of duplicating it, and an operator-edited row (moved past received, given a restock outcome, or already restocked) is left alone. Amazon FBA customer returns arrive on the regular SP-API sync from the customer-returns report (and from the FBA customer-returns backfill on the Amazon tools page). Ingested rows start pending so they do not invent inbound supply; connector sales are already net of refunds, so those RMAs do not deflate planning demand a second time, while Amazon FBA returns do because Amazon order sync is gross. The Returns table gained a Source column and filter (Manual, Mobile, connector name, Amazon FBA).</summary>
  </entry>
  <entry>
    <title>Every channel can confirm shipments and push listings</title>
    <id>https://beamopilot.com/changelog#change-every-channel-can-confirm-shipments-and-push-listings</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-channel-can-confirm-shipments-and-push-listings"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Ship confirmation used to stop at eBay: Walmart, Shopify, TikTok Shop, Etsy, and Amazon merchant-fulfilled orders could be planned in Beamo while the marketplace still thought they were unshipped. Channels now has one Orders &amp; fulfillment write-back panel for every connected seller account. eBay stays live. The other channels stay off and log-only until you enable them in Settings → Shipment confirmation, then Beamo acknowledges the order when required, posts tracking, and re-reads the live order before treating the confirmation as verified. Amazon FBA orders are refused with an explicit “Amazon fulfills this” status instead of a silent no-op. Listings write-back follows the same honesty rule: TikTok Shop and Etsy can now push price and inventory under the same doubly-gated, dry-run-by-default flags as Amazon, Walmart, Shopify, and eBay, and a follow-up GET must match before the event is accepted. Shopify fulfillment scopes and Etsy listings_w / transactions_w stay optional at connect time, so a read-only grant still imports the catalog and simply says write-back is unavailable until you reconnect.</summary>
  </entry>
  <entry>
    <title>Manual Amazon sync follows every connected seller</title>
    <id>https://beamopilot.com/changelog#change-manual-amazon-sync-follows-every-connected-seller</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-manual-amazon-sync-follows-every-connected-seller"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A workspace with more than one Amazon account used to have a split brain between scheduled sync and anything an operator triggered by hand. The scheduled runner already walked every connected seller on its own cursor; the Amazon plugin tools, POST /integrations/sync/{stream}, and a single-stream refresh always used the first account in the list and wrote an unscoped cursor that the scheduler never read. Manual sync now uses the same per-account cursors and locks as the scheduled job. With several sellers connected, Settings → Advanced → Amazon plugin tools shows a Seller picker (All connected Amazon accounts is the default); pick one to target that account only. The same optional account_id is on the sync APIs and on mobile Amazon tools. An id from another workspace or an inactive account is a 404, not a silent pull of the wrong seller.</summary>
  </entry>
  <entry>
    <title>Demo Ask Pilot metrics are certified, not drafts</title>
    <id>https://beamopilot.com/changelog#change-demo-ask-pilot-metrics-are-certified-not-drafts</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-demo-ask-pilot-metrics-are-certified-not-drafts"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Exploring the sample workspace left Ask Pilot unable to name starter analytics metrics or offer Open Analytics, because demo seed created the catalog as drafts. The same four starter metrics (net revenue, units sold, on-hand units, open purchase orders) are now certified during demo seed, so Ask Pilot can answer them by name and the existing Analytics hub at /analytics is a working follow-through. Re-seeding a demo workspace that already has those keys certifies any that are still drafts.</summary>
  </entry>
  <entry>
    <title>FBA inbound create and Amazon MCF ship from Beamo instead of Seller Central re-keying</title>
    <id>https://beamopilot.com/changelog#change-fba-inbound-create-and-amazon-mcf-ship-from-beamo-instead-of-seller-cent</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fba-inbound-create-and-amazon-mcf-ship-from-beamo-instead-of-seller-cent"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>FBA inbound used to be read-only in Beamo: you still had to re-key the shipment in Seller Central even though inbound reconciliation already knew how to match Amazon's received counts. Create Amazon inbound plan on a purchase-order shipment now calls SP-API inbound v2024-03-20, confirms packing and placement, and stamps Amazon's inbound-plan and shipment IDs onto the shipment so the existing inbound-truth machinery can take over through received. Carrier confirmation stays in Seller Central. Creating the plan never invents FBA restock supply. Amazon Multi-Channel Fulfillment is a first-class fulfillment path on Operations → Inventory: preview or place an MCF order so FBA inventory can ship a Shopify, Walmart, or wholesale order, and Beamo verifies the create with a follow-up Amazon read rather than trusting the write response. Both paths are off and log-only until you switch them to Live in Settings; a 15-minute job advances in-flight inbound plans and a 30-minute job refreshes open MCF orders.</summary>
  </entry>
  <entry>
    <title>Pay for air on part of a buy, and compare it against waiting</title>
    <id>https://beamopilot.com/changelog#change-pay-for-air-on-part-of-a-buy-and-compare-it-against-waiting</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-pay-for-air-on-part-of-a-buy-and-compare-it-against-waiting"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The usual stockout response — air 2,000 units, ocean the rest — had nowhere to live: freight rules only modeled order-value or carton bands, so planning could not price a faster transit or shorten lead time for a slice of the order. Each supplier now has Freight modes (air, express, and so on) with a transit time or lead-time delta, extra cost per unit, extra percent of COGS, and an optional flat surcharge, and a mode can apply to a partial quantity. When the setting is on, a recommendation whose supplier has an expedite mode is evaluated after the buy quantity is final: planning computes the units that would stock out before a standard arrival, costs expediting that slice, and applies the faster mode only when protected profit beats the extra freight. The remainder stays on standard transit and becomes its own proposal line with its own arrival dates; extra freight is added to cash needed and to the proposal so the cash plan and the PO agree. Recommended buys show a badge, SKU detail names the split, and Why this buy matters shows days saved, extra cost, protected profit, and net. The scenario sandbox adds an expedite lever (off, evaluate when it pays, or force every unit) and an Expedite air freight preset so you can pin speed-versus-margin side by side. Leave modes blank, or turn the setting off, and planning is unchanged.</summary>
  </entry>
  <entry>
    <title>My work is a first-class inbox, not a Settings deep-link</title>
    <id>https://beamopilot.com/changelog#change-my-work-is-a-first-class-inbox-not-a-settings-deep-link</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-my-work-is-a-first-class-inbox-not-a-settings-deep-link"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Home's Needs your help preview used to throw away the server summary (SLA breached, by source, by severity) and send every overflow click to Settings → Advanced. It now renders those summary fields and opens My work, a Home-hub page at /my-work. My work honors the filters the API already accepted — queue (me, unassigned, everyone, or a teammate), include unassigned, and type — as shareable address parameters, and shows assigned, unassigned, overdue, due soon, SLA, source, and severity counts from the same summary the list is drawn from.</summary>
  </entry>
  <entry>
    <title>Walmart, eBay, Etsy, and Amazon stay fresh between polls</title>
    <id>https://beamopilot.com/changelog#change-walmart-ebay-etsy-and-amazon-stay-fresh-between-polls</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-walmart-ebay-etsy-and-amazon-stay-fresh-between-polls"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Walmart, eBay, and Etsy no longer wait up to six hours for the next marketplace poll, and Amazon Seller Central can take SP-API Notifications the same way. Each Channels connector now has Enable real-time: Shopify still subscribes its app webhooks, while Walmart, eBay, and Etsy reveal the signed inbound URL to paste into that provider's developer portal. Amazon notifications arrive at POST /api/v1/amazon-notifications from an EventBridge API Destination or SQS/Lambda forwarder (Amazon does not POST merchant HTTP webhooks natively). Every receiver verifies the provider's signature, ignores unknown or ambiguous seller bindings, and schedules the same incremental sync the poll already runs, so a missed delivery is still reconciled on the six-hour beat.</summary>
  </entry>
  <entry>
    <title>QuickBooks webhooks keep AP aging current</title>
    <id>https://beamopilot.com/changelog#change-quickbooks-webhooks-keep-ap-aging-current</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-quickbooks-webhooks-keep-ap-aging-current"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>QuickBooks Online now has the same signed webhook receiver Xero already used. Configure Intuit's verifier token and point the app at POST /api/v1/quickbooks/webhook: bill, vendor, payment, and related entity changes HMAC-verify, stamp last-webhook time, and schedule the existing QuickBooks sync so AP aging is no longer up to a day stale. The daily job remains the durable reconciler when a delivery is delayed.</summary>
  </entry>
  <entry>
    <title>The receiving queue shows every open item, not just what is overdue</title>
    <id>https://beamopilot.com/changelog#change-the-receiving-queue-shows-every-open-item-not-just-what-is-overdue</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-receiving-queue-shows-every-open-item-not-just-what-is-overdue"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The Receiving tab's open count and empty state used to describe only overdue inbound work, because every queue request quietly asked for overdue items only. The queue now loads the full open book by default, so &quot;N open&quot; and &quot;Nothing waiting to be received&quot; match what is actually inbound. Due is an explicit filter: All open is the default, and Overdue only narrows to work whose date has arrived. An overdue-only empty table says so and tells you to switch Due back, instead of reading as an all-clear. On mobile, Operations lists the full receiving queue first and keeps Overdue Queue as its own section.</summary>
  </entry>
  <entry>
    <title>Any member can reset a forgotten password and manage their own 2FA</title>
    <id>https://beamopilot.com/changelog#change-any-member-can-reset-a-forgotten-password-and-manage-their-own-2fa</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-any-member-can-reset-a-forgotten-password-and-manage-their-own-2fa"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>A forgotten password is no longer a permanent lockout, and two-factor enrollment is no longer reserved for the workspace owner. Forgot your password? on the sign-in screen (and on mobile sign-in) opens a self-serve form: Beamo emails a signed, one-hour, single-use link and always gives the same acknowledgement whether or not an account exists for that address, so the form cannot be used to probe who has an account. The link can be used once; a new request replaces any unused link; reuse, expiry, and tampering all fail with one generic error. After a successful reset the new password is stored, every web and mobile session for that account is signed out, and two-factor enrollment is left in place so a mailbox-only attack cannot skip it. Inside the app, every signed-in member (not only the owner) can change their own password and enroll, rename, or remove authenticator apps, passkeys/security keys, verified email OTP, and recovery codes under Settings → Access → Account security. The shared demo account still cannot change its password or turn on two-factor authentication, and the panel says so instead of offering a form that can only fail.</summary>
  </entry>
  <entry>
    <title>Every receiving path now feeds lot and serial traceability</title>
    <id>https://beamopilot.com/changelog#change-every-receiving-path-now-feeds-lot-and-serial-traceability</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-receiving-path-now-feeds-lot-and-serial-traceability"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Lot tracking promised that receiving creates inventory lots, but in practice only mobile scanning and the dock receiving console did. A receipt recorded from the web — the purchase order's Receive action, the Receiving tab's shipment intake, or the developer API — carried no lot, expiry, or serial data at all, so FEFO picking and recall tracing silently covered only the stock that happened to arrive through a scanner. Every purchase-order receipt line now accepts an optional lot / batch number, expiry and manufacture dates, and a list of serial numbers: recording the receipt creates or tops up the matching inventory lot with its full source lineage (supplier, PO, PO line, receipt, shipment, warehouse), and registers each serial as a unit-level record tied to that lot, so first-expired-first-out allocation, expiry alerts, and recall chain-of-custody now apply uniformly however stock was received. The Receiving tab's shipment intake form gained the matching lot, expiry, and serial fields alongside the quantities it already took. The same safeguards that protect mobile receiving hold here: an idempotent retry of the same receipt never tops a lot up twice, units received beyond the ordered quantity still write the receipt but never inflate lot on-hand, more serials than received units is rejected before anything is recorded, and a serial that already exists rolls the whole receipt back with the duplicates named so the same unit can never be booked in twice.</summary>
  </entry>
  <entry>
    <title>Connector-only workspaces plan and buy like everyone else</title>
    <id>https://beamopilot.com/changelog#change-connector-only-workspaces-plan-and-buy-like-everyone-else</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-connector-only-workspaces-plan-and-buy-like-everyone-else"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A workspace selling only through marketplace connectors — Shopify, Walmart, TikTok, eBay, Etsy — could find every SKU graded &quot;incomplete&quot; and every buy blocked. Connector inventory was being recorded internally as if it were a CSV upload, and the data-health check then demanded the import-job paper trail that a live API feed never has; connector sales had the opposite problem, recorded under Amazon's native feed and inheriting its trust and freshness as if they were SP-API data. Live connector feeds are now a first-class data source of their own: planning grades them by their actual sync runs and a live-feed freshness window (the same 36-hour window as Amazon's native feed, not the 72-hour CSV window), ranks them just below the native SP-API feed and above CSV uploads when equally fresh, and reports them honestly in the run's source mode, each SKU's &quot;Data used&quot; panel, and channel-coverage tracking. Already-recorded connector rows are re-labeled in place, so existing workspaces unblock on their next planning run without waiting for a new sync — and a buy still blocks when a connector sync has genuinely failed or its feed has gone stale, now with a reason that names the connector rather than a missing CSV import.</summary>
  </entry>
  <entry>
    <title>Every order line schedules on its own lead time</title>
    <id>https://beamopilot.com/changelog#change-every-order-line-schedules-on-its-own-lead-time</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-order-line-schedules-on-its-own-lead-time"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A supplier order that mixed a fast SKU with a slow one — say a 15-day and a 90-day lead time in the same wave — used to carry a single set of dates for the whole order, so both lines were scheduled as if they arrived together. The next planning run then saw supply in the wrong week and bought against it, and the cash forecast booked every line's balance payment on that one date, months away from when some of it was actually due. Each proposal line now carries its own ship, arrival, and sellable dates computed from that SKU's own lead time and receiving delays; the Selected lines table shows them per line, and the proposal's Target arrival is the latest of them — when the whole order completes. The per-line dates follow the order through everything that schedules from it: supply visibility counts each SKU's inbound units in the week that SKU lands, the cash forecast and the capital plan's affordability gate book each line's balance share against that line's own due date, the planning optimizer weighs weekly cash the same way, exported buy-plan CSVs print each row's own arrival, and converting the proposal writes every purchase-order line's expected receipt date from its own schedule, where receiving and inbound reconciliation stage it per line. A supplier ETA update still moves the whole order: every line's schedule slides by the same amount, keeping each SKU's offset.</summary>
  </entry>
  <entry>
    <title>The buy plan decides on landed cost, not product cost</title>
    <id>https://beamopilot.com/changelog#change-the-buy-plan-decides-on-landed-cost-not-product-cost</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-buy-plan-decides-on-landed-cost-not-product-cost"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A planning run now projects each SKU's landed cost before deciding anything, and that projected figure is what the margin check and the cash needed for the buy are based on. Until this release the run compared selling price against product cost alone: a SKU carrying 30% freight and 20% duty could look comfortably profitable, get funded, and only reveal itself as a loss-maker once the freight and customs invoices landed — and the cash the plan asked for was short by the same amount. The projection only counts evidence you actually have: freight, tariff, and storage rates from a supplier's terms as you entered them, a SKU's duty override or its rate from the HS-tariff schedule, and rates measured from your own booked landed-cost charges. Where a component has no such source, Pilot shows what it would assume and applies nothing, so a workspace with no supplier terms on file sees exactly the quantities and cash it saw before, annotated rather than second-guessed. Each recommendation's explanation carries the projected unit cost, every component's rate and source, the confidence and risk level, and whether the projection is what deferred the buy. The cost basis stored on the recommendation and the unit costs on supplier proposals and purchase orders stay on product cost, so the pre-buy prediction on the resulting order still adds freight and duty once, not twice. The &quot;In-run landed-cost prediction&quot; setting turns all of it off.</summary>
  </entry>
  <entry>
    <title>Peer benchmarks are computed from real, consented peer data</title>
    <id>https://beamopilot.com/changelog#change-peer-benchmarks-are-computed-from-real-consented-peer-data</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-peer-benchmarks-are-computed-from-real-consented-peer-data"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Peer benchmarks now mean what they say. Until this release the console itself supplied the numbers: opening the panel and clicking Add benchmark posted a fixed percentile, median and 75th percentile that the server stored as given and the page then showed as a comparison against other operators. There was no aggregation behind them. Beamo Pilot now computes the comparison server-side, across the daily KPI snapshots it already records, for five size-independent ratios: inventory turns, sell-through rate, GMROI, forecast error and supplier on-time rate. Participation is opt-in and reciprocal — a workspace that contributes its own anonymized figures is the only kind that reads anyone else's — and only aggregates are ever shared: a peer median, a peer 75th percentile, and where you sit against them. A metric is compared only once at least five participating workspaces report it; below that floor nothing is computed and the panel says how many peers are in the pool instead of showing a partial number. No workspace name, customer, supplier, SKU or individual peer value is stored alongside a benchmark. The route that accepted statistics from a client is removed, every benchmark row written by the old form has been deleted, and benchmarks refresh daily with a Refresh benchmarks action for when you would rather not wait.</summary>
  </entry>
  <entry>
    <title>One layout across every hub, so pages start where you expect</title>
    <id>https://beamopilot.com/changelog#change-one-layout-across-every-hub-so-pages-start-where-you-expect</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-one-layout-across-every-hub-so-pages-start-where-you-expect"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every hub now draws on one set of parts — a single type scale and heading rank, and one pattern each for panels, tables, toolbars, empty states, and disclosures — with duplicated numbers and repeated kickers removed and brand yellow kept for the one action in a view that commits money or stock. The workspace header, hub strip, and tab band now sit in the same order and at the same height on every route, so the deepest pages start closer to the top: the first thing on the Settings overview moved from roughly 467px down to 352px, and supplier resilience's risk tab from about 462px to 336px. Phones and tablets carry less chrome with it — nothing scrolls sideways at 390px, touch targets are at least 36px, and the demo ribbon and guide pill no longer cover content — while Settings lists Team and Billing in its tab strip and folds the full page list into a &quot;Browse all settings&quot; index, and every control keeps a visible focus ring.</summary>
  </entry>
  <entry>
    <title>The console works with a keyboard, a screen reader, and high contrast</title>
    <id>https://beamopilot.com/changelog#change-the-console-works-with-a-keyboard-a-screen-reader-and-high-contrast</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-console-works-with-a-keyboard-a-screen-reader-and-high-contrast"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Skip-to-content is on sign-in and the supplier portal, not only the logged-in shell. Dialogs now mark the page behind them inert, so a screen reader cannot wander under a confirm. Failures toast as alerts so they interrupt instead of whispering. The cash forecast is no longer hover-only: Tab to it, use the arrow keys, and a data table carries the same weekly numbers. Unlabeled row checkboxes on receiving gained names. None of the workflows changed — only how they announce themselves.</summary>
  </entry>
  <entry>
    <title>The console is quieter: less chrome, the same work</title>
    <id>https://beamopilot.com/changelog#change-the-console-is-quieter-less-chrome-the-same-work</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-console-is-quieter-less-chrome-the-same-work"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Workspace pages still do everything they did yesterday — same actions, same data, same routes — they just spend less ink on boxes. Nested cards, filter chips, bulk-action bars, and attention pills now sit as soft tiles on the panel instead of drawing a second outline, empty and error states share one centred layout, and the decision band at the top of each workspace keeps a lighter gold wash so the verdict and the next action stay the loudest things on the page. Hub tabs and in-page tabs remain two different shapes. Light and dark, desktop and tablet, pick up the same recipe.</summary>
  </entry>
  <entry>
    <title>Demo mode is one click from anywhere on the homepage</title>
    <id>https://beamopilot.com/changelog#change-demo-mode-is-one-click-from-anywhere-on-the-homepage</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-demo-mode-is-one-click-from-anywhere-on-the-homepage"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The no-account way into the product now sits in the homepage's top navigation bar as &quot;Demo mode&quot;, alongside &quot;Open demo mode&quot; in the hero and the closing section, so it no longer disappears the moment you scroll. Every one of them is live from the moment the page renders: the button used to paint disabled, reading &quot;Checking demo availability…&quot;, until an availability probe answered, which meant the page invited a click on a control that could not take one. Clicking before the check finishes simply opens the demo. Only a deployment that has genuinely switched the demo off shows a disabled button, and it now looks disabled and says why.</summary>
  </entry>
  <entry>
    <title>A contact message the spam filter flags is held, never dropped</title>
    <id>https://beamopilot.com/changelog#change-a-contact-message-the-spam-filter-flags-is-held-never-dropped</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-contact-message-the-spam-filter-flags-is-held-never-dropped"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A submission that tripped the content-scoring heuristics used to return a normal success page and persist nothing, so a real prospect caught by a false positive — an operator whose company field is their own domain, an enquiry quoting several marketplace links — vanished without a trace. Those messages are now saved and marked &quot;Held for review&quot; in the platform owner's Website enquiries inbox, where &quot;Send anyway&quot; releases them. Pending notifications also retry automatically every hour instead of waiting for someone to notice them in Settings, and the notification email's subject line now leads with the subject you submitted, so a &quot;Workspace access request&quot; from the homepage's Request access button is recognisable in the inbox. On phones the form's fields are full-size again: they were rendering at 13px, small enough that iOS zoomed the page the moment you tapped one.</summary>
  </entry>
  <entry>
    <title>One workspace's history stays in one workspace</title>
    <id>https://beamopilot.com/changelog#change-one-workspace-s-history-stays-in-one-workspace</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-one-workspace-s-history-stays-in-one-workspace"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>Audit and receiving records that belong to child tables with no workspace column of their own \u2014 purchase-order lines, inbound-exception events, supplier-invoice match events and their kin \u2014 were filed under a default workspace whenever the writing request had no workspace bound to it. The audit read side is correctly scoped, so those rows were then served to whichever tenant owns that default: another company's entity ids, SKUs and user email addresses appeared in the Audit log and in Compliance evidence's row count and hash chain. Every audited row now takes its workspace from its parent (following foreign keys until one can answer), and when no parent can, the row is dropped rather than guessed at: a default tenant is never assumed. The Advanced tab's exception workboard had the same shape from the other end \u2014 it listed every tenant's receiving problems, because inbound exceptions were read unscoped \u2014 and is now scoped through the parent purchase order or transfer, like every other reader of that table.</summary>
  </entry>
  <entry>
    <title>Settings finishes the jobs it starts: identity checks, two-factor, team, and alert rules</title>
    <id>https://beamopilot.com/changelog#change-settings-finishes-the-jobs-it-starts-identity-checks-two-factor-team-and</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-settings-finishes-the-jobs-it-starts-identity-checks-two-factor-team-and"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Data privacy: &quot;Verify identity&quot; on a data-subject request always failed. The console posted a verification method the API does not accept, so every attempt came back rejected and &quot;Fulfill&quot; stayed locked \u2014 leaving Deny as the only action the whole workflow could complete. The dialog now asks which method you used (signed-in account, emailed code, identity document, authorized-agent paperwork, or legal review), records it as audit evidence, and a contract test fails if either side of that list ever drifts again. Account security: two-factor enrolment used to dead-end on the raw sentence &quot;Recent reauthentication required&quot; \u2014 no explanation, no time window, nothing to click. It now asks for your password in place and resumes the action you were blocked on; an account that already has two-factor on is told to sign in with its authenticator instead, because a password alone must not step that up. A stale password verdict no longer sits on screen contradicting the next attempt. Alert rules can be edited: name, comparator, threshold, severity and cooldown change in place, instead of deleting a rule whose own confirmation warns it cannot be restored. A firing now names its metric the way the rules table does and formats the reading in the metric's unit, rather than printing the raw metric key and an unrounded float. Repair history reports what happened in a sentence instead of a Python exception class name, a re-run that skips says why it skipped, resolving a status-page incident says &quot;resolved&quot; rather than &quot;published&quot;, &quot;Inspect latest run&quot; scrolls its answer into view, and a deep link into a section this account cannot open says so instead of silently doing nothing. Settings search and &quot;Browse all settings&quot; no longer offer sections whose panel renders nothing for your role. Billing stops stacking three negatives when subscriptions are not enabled for the deployment: one banner, no disabled Subscribe buttons blaming the plan.</summary>
  </entry>
  <entry>
    <title>The shared demo tells the truth, and stops handing out team controls</title>
    <id>https://beamopilot.com/changelog#change-the-shared-demo-tells-the-truth-and-stops-handing-out-team-controls</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-shared-demo-tells-the-truth-and-stops-handing-out-team-controls"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The demo ribbon said &quot;your changes won't be saved&quot;. They were saved \u2014 and because everyone explores the same workspace, one visitor's alert thresholds, tasks and API keys were what the next visitor saw. The ribbon, the demo guide, the About-the-demo dialog and the docs now say what actually happens: changes are saved and shared with everyone in the demo until a Beamo Pilot update restores the sample data (nothing resets it on a timer). Team management is turned off there too: invitations, role changes, access expiry and disabling a member are refused with a reason on screen, so a demo visitor can no longer lock other visitors out of the workspace they are all using. The password form on the shared demo account explains why it is unavailable rather than answering &quot;Forbidden&quot; to an attempt that could never succeed, matching how the two-factor block on the same screen already behaved.</summary>
  </entry>
  <entry>
    <title>Buy finishes the orders it starts: plans build, tracking shows, approvals speak</title>
    <id>https://beamopilot.com/changelog#change-buy-finishes-the-orders-it-starts-plans-build-tracking-shows-approvals-s</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-buy-finishes-the-orders-it-starts-plans-build-tracking-shows-approvals-s"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Buy plan: Update now builds a plan again. The workspace pinned the plan to the planning run on screen, and an ordinary planning run cannot source a capital plan, so every click came back refused in internal vocabulary (&quot;supplier batching&quot;) and the tab stayed empty for good; a run the server cannot use now falls back to one it can, and the empty state states the cash-on-hand prerequisite instead of revealing it after the click. Purchase orders: a PO is addressed with its own supplier's email, never the open proposal's — the dispatch form was seeded from whichever proposal was selected, so an order could be emailed to a different supplier than the one named in it. Carrier tracking that you register now shows: the API dropped every tracking field on the way out, so a tracked shipment read &quot;Not tracked&quot; forever and Refresh tracking never appeared. Approving a PO governed by an approval chain says your approval was recorded and what the order is waiting on, instead of answering with an unchanged order and no message. Add shipment covers only the units still to ship, and says so when there are none, rather than re-requesting the whole order and failing with a database row id. The PO timeline and PO lines read as an audit trail again: labelled values instead of raw field names, and no UUIDs. Create a purchase order says why its button is disabled and rejects zero or negative units at the field. Approvals: a chain can be edited, disabled and re-enabled from its row — deleting one with approval history is refused on purpose, and disabling was the remedy the message named but no control offered; the role field no longer advertises a role the API rejects, and a rejected chain no longer leaves a step-less chain behind. Supplier portals: reporting an issue names the missing fields before it posts, revising an RFQ quote no longer freezes the first submission's landed total (the number your buyer ranks on), and re-confirming an order keeps the original acknowledgement instead of stamping today's name on it. Logistics: an email EDI transport profile is configured with real fields rather than a JSON key you had to guess, a blanket release names its release number in the PO it creates, and a failed container-capacity read is reported with a retry instead of disappearing.</summary>
  </entry>
  <entry>
    <title>Planning stops hiding the answer, and run comparison compares two runs</title>
    <id>https://beamopilot.com/changelog#change-planning-stops-hiding-the-answer-and-run-comparison-compares-two-runs</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-stops-hiding-the-answer-and-run-comparison-compares-two-runs"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Planning: changing a SKU's lifecycle stage now shows up on the plan. The replenishment read is cached against the plan it came from, and the stage was not part of that key, so the browser kept revalidating into a &quot;nothing changed&quot; answer and the old stage stayed on screen through reloads, indefinitely. A filter that matches no buy now says exactly that and offers Clear filters, instead of claiming &quot;No plan yet&quot; and offering Update now, which could not help — and the reset it points at was inside the very list the filter had emptied. &quot;Send N buys to Buy&quot; no longer drops all but one: a selection spread across several supplier orders opens the matching order list, says so before you click, and never silently substitutes one buy for the rest. The approval wave lists the excluded waves and their blockers even when nothing is approvable, which is precisely when &quot;why is nothing here?&quot; is the question. Run comparison: a run is never compared against itself any more (which reported phantom changes with every delta zero, above a panel that said there was no baseline), and a product whose order timing did not move is no longer listed as changed. Approving an allocation plan asks first and confirms afterwards, saving or cancelling a demand event says it saved, a cancelled event no longer counts as &quot;scheduled&quot;, and an unknown target cover reads as unknown rather than as infinite cover. The disabled &quot;Optimize split&quot; and &quot;Run scenario&quot; buttons now say what would enable them.</summary>
  </entry>
  <entry>
    <title>Manufacturing setup reports what went wrong, next to what went wrong</title>
    <id>https://beamopilot.com/changelog#change-manufacturing-setup-reports-what-went-wrong-next-to-what-went-wrong</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-manufacturing-setup-reports-what-went-wrong-next-to-what-went-wrong"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Manufacturing: saving a shift or a calendar override without choosing a work center posted to an address with the id missing and came back as a bare &quot;Not Found&quot;, framed as a broken workspace. The work center is now required, both buttons say why they are waiting, and the id is trimmed before it reaches the address, so the request is never made without one. A rejected MRP run shows the field and the limit it broke (&quot;Horizon days: Input should be greater than or equal to 1&quot;) beside the run controls — not as a page-level workspace failure offering a reload that cannot fix a rejected field — and that message clears the moment the next run succeeds, instead of sitting under a success toast. Horizon days is a bounded number field, so a negative horizon never reaches the server. Save confirmations name what was saved (&quot;Work shift saved.&quot;) instead of printing the API path and the work center's id. Runs on the same planning date are told apart by their time and reference, a firmed supply order stops offering to be firmed again (which returned a conflict), and the routing preview's second column is labelled Sequence, which is what it shows.</summary>
  </entry>
  <entry>
    <title>The cash tools finish the jobs they start</title>
    <id>https://beamopilot.com/changelog#change-the-cash-tools-finish-the-jobs-they-start</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-cash-tools-finish-the-jobs-they-start"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Cash budget: &quot;Rerun planning with budget&quot; could never finish — the plan it built was refused every time — and the Buy plan tab was empty for the same reason, so the one action either screen offered was the one that could not work. Both build a plan again, and step 4 now approves the buys that budget actually funded. The greyed &quot;Rerun planning with budget&quot; says which field it is waiting on, and a link carrying a broken run id falls back to your latest run instead of quietly failing twice. Documents: importing a CSV that is not a landed-cost file is refused with the columns it expected, rather than reported as &quot;Imported 1 document&quot; and left as an empty $0 record; Allocate says how many charge lines it spread and across how many receipts, and says plainly when it matched nothing instead of claiming success next to &quot;No allocations yet&quot;; finalizing a document with no allocations warns you first, because it cannot be undone. &quot;Record valuation in Xero&quot; is no longer offered on a workspace without Xero connected, and its failures — like QuickBooks' — appear beside the button rather than a screen above it. Invoice matching: a failed Recompute or an empty manual match is reported next to the control you used instead of thousands of pixels up the page, and Recompute is not offered on a match with no invoice document, which could never recompute. Payables: an ACH run now shows which payments still need supplier bank details and lets you add them, and refuses to send until every payment has them — so the NACHA file the run exists to produce can no longer turn out to be impossible after the money has gone out. Inventory aging: &quot;Recommend from aging&quot; no longer creates unlimited identically named draft campaigns, and Reconcile PO takes a purchase order you pick from a searchable list rather than a UUID you paste, with an ID field kept beside it for an order older than the list reaches.</summary>
  </entry>
  <entry>
    <title>Channels, Imports and Accuracy stop reporting things that were not true</title>
    <id>https://beamopilot.com/changelog#change-channels-imports-and-accuracy-stop-reporting-things-that-were-not-true</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-channels-imports-and-accuracy-stop-reporting-things-that-were-not-true"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Channels: the five task cards now live in the address bar, so a Connectors or Policies view can be linked, bookmarked and reloaded instead of snapping back to Map SKUs. Opening Policies no longer writes to your workspace — it lists a policy for every channel you plan and marks the ones you have never saved as defaults — and the eBay, Etsy and TikTok Shop policies it lists can finally be saved (they returned &quot;Unsupported policy provider&quot;). Connectors names any marketplace this deployment is not set up for before you press Connect, instead of answering the click with a deployment error that quoted internal variable names \u2014 the setup wizard\u2019s Connectors step now runs the same check, so a new workspace is not sent into a handoff this deployment cannot complete; saving a built-in channel says it is managed for you rather than reporting that it &quot;already exists in another workspace&quot;; a failed connection test keeps the connector's last successful sync record, so Data checks no longer claims nothing has ever synced for a channel holding thousands of rows; and a skipped sync reads as skipped, in words. Typing a Main SKU your catalog does not have now asks before creating the product instead of silently adding a nameless one. Imports: a scanned document that fails explains why and what to do about it instead of printing its internal error codes, a link to an import job or document that no longer exists says so, a blank column in the middle of a CSV header is named instead of producing an unreadable mapping conflict (while the empty trailing column a spreadsheet adds when you save as CSV is ignored, so an ordinary Excel or Google Sheets export still imports), the duplicate planning export is gone, and the supplier, bundle and purchase-order uploads use the same styled control as their siblings. Accuracy: a workspace with nothing measured yet is no longer reported as a flawless 0.0% forecast error &quot;on track&quot;, capped tables can be expanded instead of quietly hiding rows under a count that says otherwise, a row flagged for its unit gap says so next to its direction, a SKU with no chosen model is described as such rather than credited with one, clicking a miss scrolls to the SKU it opens, applied improvements say whether you or the guardrails applied them, and auto-apply reports the guardrail that skipped a suggestion.</summary>
  </entry>
  <entry>
    <title>Dialogs close again, and the alert inbox says what is on screen</title>
    <id>https://beamopilot.com/changelog#change-dialogs-close-again-and-the-alert-inbox-says-what-is-on-screen</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dialogs-close-again-and-the-alert-inbox-says-what-is-on-screen"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A confirm dialog left open for a moment could not be dismissed at all: Cancel, Escape, the backdrop and even a successful Confirm all left its full-screen scrim mounted, swallowing every click on the page until a reload — and the action behind Confirm had usually run, so pressing it again re-fired it. Every dialog and sheet in the console shares the transition this came from, so all of them are fixed together. Alerts: the header now counts Active, Acknowledged, Snoozed and Resolved, which together account for every alert you have, and narrowing to a single status makes the verdict describe that filter's own results instead of printing &quot;Inbox is clear&quot; above a list of snoozed alerts (All alerts keeps the open-alert verdict, because it shows those too). A snoozed alert finally has a way back — Wake now ends the snooze and returns it to the inbox, keeping your acknowledgement and read state. On Home, Update now really does rebuild the briefing every time you press it (it could previously only run once a day, silently) and now confirms that it did; &quot;Approve all 1 routine items&quot; reads correctly; and &quot;Clear the N open exceptions&quot; opens the exception workboard instead of linking back to the page you are already on. Memory search now filters: searching for something no memory contains returns nothing rather than everything, Ask Pilot recalls only the memories a question actually touches, an auto-written memory title follows the fact when you edit it, and a percentage range in your text is no longer filed as a product. The demo's first-run panel, its legend and its call to action are translated in every supported language rather than half-English, its &quot;Create your workspace&quot; button now leaves the demo like the other two controls with that label, mobile no longer offers demo visitors a Setup page that bounces them back, and the welcome tour no longer drops itself over the shared demo on a cold load.</summary>
  </entry>
  <entry>
    <title>Setup resumes where you left off, and the Home checklist only lists your work</title>
    <id>https://beamopilot.com/changelog#change-setup-resumes-where-you-left-off-and-the-home-checklist-only-lists-your-</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-setup-resumes-where-you-left-off-and-the-home-checklist-only-lists-your-"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Opening Setup without naming a step now reopens the first step you have not finished, from the setup wall, from Home, and from the Settings hub — it used to render &quot;Step 1 of 7&quot; beside a rail reading &quot;3 of 7 steps done&quot;, and the saved position it read from had been stuck on the first step since the day setup began. A finished workspace opens on Review &amp; launch. Home's recommended-next-steps card now counts only the steps you can actually do: anything waiting on the people who host your deployment is listed apart, in plain language, under &quot;Your Beamo administrator is finishing these&quot;, and raw environment-variable names are no longer part of the copy — in the wizard, on Review, or on Home; the name survives only as the row's hover tooltip, for whoever configures the deployment. A plan that has already run is no longer told it cannot run, and &quot;Run your first plan&quot; is no longer permanently blocked for a workspace that sells through CSV imports, Shopify or Walmart rather than Amazon. Lead time and safety stock are now capped at 365 days on both sides instead of accepting 999999. The sign-in page no longer shows four dead social buttons on a deployment without social sign-in, the public legal navigation no longer links two region notices that 404, an unknown /legal address returns a not-found page instead of quietly serving the Privacy Policy under it, and the status page's badge no longer prints &quot;degraded&quot; next to &quot;Monitoring hasn't reported yet&quot;. Signing in itself is sturdier: the session bootstrap now degrades to a normal sign-in when its optional extras fail, instead of answering with an error.</summary>
  </entry>
  <entry>
    <title>Supplier risk audit trails open again, and a single automation domain can be held</title>
    <id>https://beamopilot.com/changelog#change-supplier-risk-audit-trails-open-again-and-a-single-automation-domain-can</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-risk-audit-trails-open-again-and-a-single-automation-domain-can"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Every &quot;Audit&quot; button on Supplier risk &amp; continuity now opens the record's change history instead of dropping the workspace into an error screen, and a network entity's history is finally found rather than always coming back empty. A record nothing has changed yet says so instead of doing nothing, and recovery recommendations are listed in the candidate rank each card prints, so the strongest candidate reads first. On Automation, a single armed domain can now be held from its own card with &quot;Pause this domain&quot; without rewriting its mode or its guardrails; a paused Review-mode domain no longer claims it was armed; and saving guardrails or an auto-send rule confirms out loud like every other save. A blank supplier on the auto-send rule form is answered next to the field instead of by a &quot;Supplier agent unavailable&quot; outage panel, and malformed risk-event JSON is answered under the textarea instead of printing a parser message in a workspace banner. Field-level validation errors from the server now name the field and the reason everywhere in the app rather than collapsing to &quot;Request validation failed.&quot;, and a mistyped supplier contact email is caught before it is ever sent. The supplier health card's risk badge is now labelled for what it is — the prediction for that supplier's last scored order — and stays blank until a delivery has actually been scored.</summary>
  </entry>
  <entry>
    <title>The receiving queue counts what it shows, and warehouses can be corrected</title>
    <id>https://beamopilot.com/changelog#change-the-receiving-queue-counts-what-it-shows-and-warehouses-can-be-corrected</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-receiving-queue-counts-what-it-shows-and-warehouses-can-be-corrected"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The Receiving queue's header count now always describes the rows underneath it: filtering by Active exceptions no longer reported open work above an empty table, and a status filter no longer counts intake rows it cannot show. A new Due filter makes the queue's long-standing &quot;work due now&quot; cut visible and lets you switch it to All dates to see inbound items that are not due yet, and two lines of the same purchase order are now two distinct rows instead of one row quietly dropping out when the queue pages. On the Inventory tab a warehouse can finally be edited: correct its name, type and region, or set it inactive when a site closes, and the default flag moves to another active location on its own. Elsewhere on the workspace, an error now names the tab it happened on rather than always blaming Receiving, a failed write says the change did not go through instead of telling you to refresh, the receipt confirmation names the damaged and short units it just recorded, dock receiving disables the camera scanner with a plain reason when the machine has no camera, the cancel-transfer dialog's dismiss button reads Keep transfer, and Transfers says it is still checking access instead of denying it while permissions load.</summary>
  </entry>
  <entry>
    <title>Freight, rates, and tracking now say which engine answered</title>
    <id>https://beamopilot.com/changelog#change-freight-rates-and-tracking-now-say-which-engine-answered</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-freight-rates-and-tracking-now-say-which-engine-answered"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Carrier rates, shipment tracking, and freight tenders each run either against a live provider or against Beamo's built-in offline engine when that provider is not configured on your deployment. The two used to look identical on screen. Now the rate-shopping panel, the shipment-tracking panel, and the transportation control tower each say, in one line, which engine produced the numbers you are reading, so an estimate is never mistaken for a negotiated carrier price. Demo workspaces also stop reporting sync-run health they cannot know: instead of showing every feed as succeeded, the diagnostics table leaves those columns blank and says the demo does not track sync health.</summary>
  </entry>
  <entry>
    <title>A quieter, more complete console: feedback, next steps, and a more realistic demo</title>
    <id>https://beamopilot.com/changelog#change-a-quieter-more-complete-console-feedback-next-steps-and-a-more-realistic</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-quieter-more-complete-console-feedback-next-steps-and-a-more-realistic"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The console now tells you what just happened and what to do next. Signed-out visitors get a real Create your workspace path beside Try the demo; sign-in keeps the Sign up tab in the URL, lets you start verification over, and offers Forgot your password as a contact handoff. Sync, recompute, and workspace switch announce themselves; ? opens a keyboard-shortcut sheet; an offline banner appears when the network drops. Planning lets you select recommended buys and send them to Buy without a 100-row cap; Buy can approve and send several POs from the same tab, with Undo on a reversible approve. Ask Pilot keeps a stopped answer, resumes the thread if you leave, and opens the memories that belong to the SKU it just used. Connectors show first-sync progress after OAuth, Amazon disconnect is Pause vs delete, and supplier/RFQ portals recover a dead link instead of stranding the visitor. The shared demo now starts with $420,000 cash, realistic margins and lead times, and a PO book that matches the demand it is supposed to cover. On the phone: sign-out and account live under More, Operations is a floor-task launcher, receiving photos can be picked, retaken, or discarded, and queued offline work is visible app-wide.</summary>
  </entry>
  <entry>
    <title>Transportation control tower: tender, track, and audit your freight</title>
    <id>https://beamopilot.com/changelog#change-transportation-control-tower-tender-track-and-audit-your-freight</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-transportation-control-tower-tender-track-and-audit-your-freight"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A new Transportation workspace in the Operations hub runs freight end to end. Tender a load across ocean, air, drayage, FTL, LTL, or parcel and award the best carrier quote in one step, which books the shipment and starts tracking it. Every booking carries a live current ETA next to the one you agreed to, a predicted delay in days, and a risk level, with the legs, milestone timeline, shipping documents (customs entry, commercial invoice, packing list, bill of lading, and more, exchanged with the provider on demand), and a full amendment history one click away. Active risk signals (port congestion, weather, customs, dwell, detention, demurrage, carrier delay, document problems) surface per shipment, and when a delay crosses your threshold the affected SKUs get their lead times pushed into planning with an automatic replan, so recommendations follow the freight reality. Carrier and lane scorecards grade on-time performance, arrival slip, invoice accuracy, and award rate over the trailing 180 days, and a freight invoice audit holds any invoice that drifts from the booked amount for an approve-or-dispute decision.</summary>
  </entry>
  <entry>
    <title>Planning is easier to read and says each thing once</title>
    <id>https://beamopilot.com/changelog#change-planning-is-easier-to-read-and-says-each-thing-once</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-is-easier-to-read-and-says-each-thing-once"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every explanatory paragraph in Planning ran the full width of the panel: 176 characters a line on a normal laptop, which is roughly twice a comfortable reading measure. They are now capped and set one step larger, so the Insights tab in particular stops reading as a wall of grey text. The Buy tab also stopped saying things twice: the run and cash controls sat inside a card that named them a second time (&quot;Which run and how much cash&quot; over &quot;Plan controls&quot;) and described them a second time, costing 173px of frame for one collapsed row; the five run-diagnostic tiles rendered both there and on Insights; and the selected product's lifecycle stage was printed at both ends of the same row. On the selected product, the quality guardrail (the check that can cut a recommended quantity) now reads as a caution instead of looking identical to the neutral facts above it, the funding line names the amount rather than repeating the verdict below it, and &quot;Open in Buy&quot; leads the hand-off row only when the buy is genuinely funded and ready. Compare lost a duplicate intro sentence and no longer prints nine column headings above an empty table. The run and cash controls now exist once for the whole workspace instead of twice under two different names, so the two tabs can no longer drift apart; the approval wave says what it actually holds (top-tier funded buys) rather than asserting nothing is funded while the header counts three funded buys; the what-if panel stopped advertising a scenario control it does not contain and its &quot;preview only&quot; checkbox now says which thing it previews; and two roll-up tiles that packed two numbers into one value now read as a number with its counterpart beside it.</summary>
  </entry>
  <entry>
    <title>Cited evidence reads in plain language and plain numbers</title>
    <id>https://beamopilot.com/changelog#change-cited-evidence-reads-in-plain-language-and-plain-numbers</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cited-evidence-reads-in-plain-language-and-plain-numbers"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Wherever Beamo Pilot shows you the records behind an answer (Ask Pilot's Sources, SKU 360, the supplier agent's decision packet), a cash figure now carries its thousands separator: &quot;31,522.85&quot; instead of &quot;31522.85&quot;. Scores and cover figures keep the exact precision the calculation produced, so a priority score still reads 0.9100 and a cover figure still reads 11.00, and a year or an order number is never given separators it should not have. Planning's reorder triggers also stopped speaking in abbreviations: what read &quot;Below rop now&quot; now reads &quot;Already below the reorder point&quot;, and &quot;Projected below rop&quot; reads &quot;Projected to fall below the reorder point&quot;. On a phone, Ask Pilot's message box no longer sits under the bottom navigation bar, and the desktop keyboard shortcuts line is no longer shown on devices that have no such keys.</summary>
  </entry>
  <entry>
    <title>Ask Pilot reads like a conversation</title>
    <id>https://beamopilot.com/changelog#change-ask-pilot-reads-like-a-conversation</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-ask-pilot-reads-like-a-conversation"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Ask Pilot chat has been rebuilt around one measured column, so answers stay at a comfortable line length instead of stretching the full width of your monitor, and the thread, the suggested questions and the message box all line up. Answers are set a size larger and no longer sit inside a grey card; the message box grows as you type instead of hiding earlier lines behind a scrollbar; the send button becomes a Stop control while Pilot writes; and the starter questions now sit with the welcome that introduces them, each with an icon, while follow-ups stay beside the box. Under every answer there is now a single row (Copy, confidence, memory, Sources) with Copy next to the text rather than a screen away, and Sources lists numbered records with the field name in full instead of a clipped label beside a wall of bold text. Smaller fixes throughout: a suggested Pilot action leads the next-step row instead of being outranked by a plain link, its risk and expiry get their own line, the reasoning trace is smaller than the answer it explains and says &quot;Hide&quot; once open, the live thinking indicator ticks each stage off, a SKU focus can be cleared from the header, request failures read as an inline line instead of an &quot;Operator assistant warning&quot; card, and the message box has a visible keyboard focus ring again.</summary>
  </entry>
  <entry>
    <title>Subscriptions go live: Pro and Team plans with a 14-day free trial</title>
    <id>https://beamopilot.com/changelog#change-subscriptions-go-live-pro-and-team-plans-with-a-14-day-free-trial</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-subscriptions-go-live-pro-and-team-plans-with-a-14-day-free-trial"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>You can now subscribe to Beamo Pilot directly from the Billing workspace. Pro is $49 per seat per month (1 seat included) and Team is $99 per seat per month (5 seats included, adding fine-grained roles, approval workflows, multiple warehouses, compliance reports and automated health checks); prices now show on the plan cards, and every new subscription starts with a 14-day free trial — your card is collected at Stripe checkout and the first charge lands when the trial ends. Seats stay honest on their own: team and SCIM membership changes reconcile to the Stripe subscription quantity automatically with Stripe handling prorations. The shared demo workspace now shows exactly what a subscribed account looks like — an active Team plan with seats, a renewal date and a month of metered usage — with checkout and the billing portal safely disabled so the demo can never create a real charge.</summary>
  </entry>
  <entry>
    <title>Three settings that promised behavior now deliver it</title>
    <id>https://beamopilot.com/changelog#change-three-settings-that-promised-behavior-now-deliver-it</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-three-settings-that-promised-behavior-now-deliver-it"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>&quot;Week start day&quot; existed in Preferences but every weekly view quietly started its weeks on Monday regardless; it now drives all of them — cash-forecast weeks, the finance ledger's week buckets, weekly forecast scoring, supplier order waves, and the week grain in Analytics — so a Sunday-start business finally sees its own calendar everywhere. The &quot;In-run landed-cost prediction&quot; switch is honored too: turning it off stops new predictions from being computed anywhere (proposal and PO screens, approvals, autopilot refreshes) while already-computed history stays visible, and the explicit refresh button says the feature is off instead of silently working anyway. And the container-fill annotation the Advanced settings advertised now actually exists: when your SKUs carry carton dimensions, each supplier wave proposal notes how the order packs into ocean containers — recommended container type, how many, and volume/weight utilization — as read-only context that never changes quantities. A sweep also replaced lazy &quot;3 item(s)&quot;-style counts across buy-readiness actions, planning explanations, transfer errors and system summaries with real singular/plural copy.</summary>
  </entry>
  <entry>
    <title>Settings lines up, and its controls say what they will do</title>
    <id>https://beamopilot.com/changelog#change-settings-lines-up-and-its-controls-say-what-they-will-do</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-settings-lines-up-and-its-controls-say-what-they-will-do"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Settings was built out of stacked cards and collapsed rows, and several things about how they were drawn made it harder to read than it needed to be. The screen now sits on one measure: the workspace title, the hub tabs, the tab strip and the panels all start and end on the same edge instead of five different ones, and the page no longer slides sideways when you switch to a tab short enough to lose the scrollbar. Every collapsed section now carries its marker next to its own title rather than a chip stranded at the far edge of the row, and that chip tells the truth: it says Open while the section is closed and Close once it is open, where before it said Open either way. Rows are shorter, so a tab that is a menu of sections reads as a menu rather than a wall. The Advanced tab now opens on the settings themselves instead of five closed bars, and every tab groups its sections under a heading, which two of the seven already did. Permission groups pack together instead of leaving holes under the short ones, unticked checkboxes are legible in both themes, and the planner settings show the same kind of number the same way, with each field's allowed range beside it rather than spelled out in its label.</summary>
  </entry>
  <entry>
    <title>Sell in more than the seven US marketplaces</title>
    <id>https://beamopilot.com/changelog#change-sell-in-more-than-the-seven-us-marketplaces</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sell-in-more-than-the-seven-us-marketplaces"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Channels no longer stop at seven US templates while Amazon and Walmart already knew the rest of the world. The Channels workspace now lists every Amazon SP-API country, Walmart Canada/Mexico/Chile, major eBay sites, TikTok Shop planning regions, and Mercado Libre sites as catalog rows you enable when you sell there — they are not dumped onto every workspace. WooCommerce and BigCommerce connect with store credentials over public HTTPS; Mercado Libre uses a seller token against api.mercadolibre.com; Faire and Target Plus are planning channels with CSV ingest because those seller APIs are still partner-gated. Walmart OAuth lets you pick United States, Canada, or Mexico instead of always posting walmart_us.</summary>
  </entry>
  <entry>
    <title>Amazon Ads now pulls Brands, Display, and search terms — and can pause ads before a stockout</title>
    <id>https://beamopilot.com/changelog#change-amazon-ads-now-pulls-brands-display-and-search-terms-and-can-pause-ads-b</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-amazon-ads-now-pulls-brands-display-and-search-terms-and-can-pause-ads-b"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Amazon Ads connector used to pull only the Sponsored Products advertised-product report, which understated ACOS and left Sponsored Brands, Sponsored Display, and search-term data out of Demand Attribution. Each six-hour sync (and Sync now) now requests the full reporting set. Product-level spend from Products, Brands, and Display is summed onto the same SKU/day; Brands campaign cost is allocated onto purchased ASINs by that day's sales share, and unknown ASINs stay skipped instead of inventing catalog rows. Search-term clicks annotate demand as a trend, not a buy-qty multiplier. If one report type fails, the others still land and the window is replayed. On the connector page you can opt into pausing campaigns that still advertise SKUs the latest plan says will stock out: pause-only is a dry-run preview, writes require a second switch, Beamo only resumes campaigns it previously paused after cover recovers by the threshold plus three days, unread campaign state fails closed, and a run caps at 50 writes. Disconnecting turns writes off.</summary>
  </entry>
  <entry>
    <title>Google and Meta ad spend now syncs on a schedule and reaches the demand model</title>
    <id>https://beamopilot.com/changelog#change-google-and-meta-ad-spend-now-syncs-on-a-schedule-and-reaches-the-demand-</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-google-and-meta-ad-spend-now-syncs-on-a-schedule-and-reaches-the-demand-"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Google Ads and Meta Ads spend used to live in a display-only snapshot you had to pull by hand. Connected accounts now sync every six hours (and still when you press Pull spend): Beamo stores the last-30-days campaign snapshot and a daily spend series from the platform's own API — it never fabricates those numbers. The daily totals annotate demand as a workspace-level off-Amazon spend trend. They are not allocated onto SKUs and they do not change recommended buy quantities. Reconnecting a platform clears that provider's prior daily rows so a replacement ad account cannot inherit another account's history.</summary>
  </entry>
  <entry>
    <title>EDI coverage now includes 855, 846, 852, 940/945, and 997</title>
    <id>https://beamopilot.com/changelog#change-edi-coverage-now-includes-855-846-852-940-945-and-997</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-edi-coverage-now-includes-855-846-852-940-945-and-997"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The Buy workspace EDI panel no longer stops at 850 purchase orders, 856 advance ship notices, and pasted 810 invoices. You can generate an 855 purchase-order acknowledgment (also created automatically when a supplier confirms in the portal), an 846 inventory advice from the latest on-hand snapshot, an 852 product-activity feed of units ordered, warehouse shipping 940/945 documents, and a 997 functional acknowledgment of any inbound document. Paste a supplier 855 or 856 and Beamo applies the same line decisions and shipments the portal already writes — unknown SKUs are refused, empty inventory or activity is refused rather than invented, and a successful inbound parse stores the 997 that trading partners expect.</summary>
  </entry>
  <entry>
    <title>Suppliers can confirm, change, split, or reject each PO line</title>
    <id>https://beamopilot.com/changelog#change-suppliers-can-confirm-change-split-or-reject-each-po-line</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-suppliers-can-confirm-change-split-or-reject-each-po-line"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Supplier portal confirmation used to be all-or-nothing: one click acknowledged the dispatch and left every line, date, and inbound receipt exactly as the buyer sent them. The confirm form now takes a decision per line — accept, change quantity or date, split across two arrivals, or reject — and those decisions write the units and target dates the planner, cash schedule, and inbound queue actually read. An ETA update can also set a line-level arrival that overrides the whole-order slip, including Amazon-received and sellable dates when they were empty. Accepting a supplier counter-proposal now copies the promised arrival onto the same planning dates instead of only the display ETA.</summary>
  </entry>
  <entry>
    <title>Purchase orders, vendors, and items can sync to QuickBooks and Xero</title>
    <id>https://beamopilot.com/changelog#change-purchase-orders-vendors-and-items-can-sync-to-quickbooks-and-xero</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-purchase-orders-vendors-and-items-can-sync-to-quickbooks-and-xero"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Beamo's purchase orders, receipts, and item costs used to stop at one aggregate inventory-valuation journal, so finance still had to re-key vendors, SKUs, and bills into the ledger. QuickBooks Online and Xero now have an opt-in Ledger push in Cash → Documents: map an item expense account, choose vendors, items, purchase orders, and receipt bills, then Push now or let the daily cash/AP sync send the same records after a successful pull. Writes are fingerprint-idempotent (QuickBooks request IDs and Xero idempotency keys, plus name/SKU/document-number recovery), skip a receipt bill when that purchase order already has a linked AP bill, stamp the purchase-order link that pay-run writeback uses, and surface per-record errors in the panel instead of failing the cash pull. Existing Xero connections need a one-time reconnect so Xero grants contact, item, purchase-order, and invoice write access; cash and AP pull stay read-only until you enable the push.</summary>
  </entry>
  <entry>
    <title>ShipBob, Flexport, and Deliverr are first-class 3PL adapters</title>
    <id>https://beamopilot.com/changelog#change-shipbob-flexport-and-deliverr-are-first-class-3pl-adapters</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-shipbob-flexport-and-deliverr-are-first-class-3pl-adapters"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>3PL connectors are no longer one generic HTTP shim wearing three names. ShipBob, Flexport Logistics, and legacy Deliverr each have a native adapter with that provider's authentication, inventory API, and outbound fulfillment-order API; a custom WMS contract remains for everyone else. Live inventory pulls still overwrite the bound warehouse position, and they now also write an unlinked 3PL transfer-origin lot so that stock is planning supply the replenishment engine can allocate — not Amazon FBA on-hand, and not something a later inbound-lot rebuild can wipe. You can create an outbound fulfillment order (ship-to plus catalog lines) from Settings: dry-run records a draft, live mode transmits with a stable idempotency key, and the hourly 3PL job (or Sync status on the order) tracks it from submitted through delivered, including tracking once the 3PL has a label. Quantity-adjustment pushes stay custom-WMS-only; native inventory remains provider-controlled.</summary>
  </entry>
  <entry>
    <title>See where you're signed in and sign out a device</title>
    <id>https://beamopilot.com/changelog#change-see-where-you-re-signed-in-and-sign-out-a-device</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-see-where-you-re-signed-in-and-sign-out-a-device"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>Settings → Access → Devices &amp; sessions now lists every live browser and Beamo Pilot app sign-in for your account: the device, last seen, IP, and a This device badge on the session you are using. Sign out one session, every other session, or everywhere. Signing out everywhere also signs this browser out. Admins and owners who can manage the team can open a teammate's devices from the same panel and sign those out without waiting for a password reset — the recovery path when a laptop is stolen or someone leaves.</summary>
  </entry>
  <entry>
    <title>Workspace ownership, a full archive, retention, and a guarded close</title>
    <id>https://beamopilot.com/changelog#change-workspace-ownership-a-full-archive-retention-and-a-guarded-close</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-workspace-ownership-a-full-archive-retention-and-a-guarded-close"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A workspace now has a real owner on the tenant, not an environment variable that made every workspace look like it belonged to the same person. Settings → Access → Workspace lifecycle is where the owner transfers ownership (the new owner must already be a member, confirms by email, and the previous owner stays as an admin), downloads a ZIP of the workspace's first-class tables with secrets omitted, or closes the workspace. Close asks you to type the workspace name, stops jobs immediately, and waits 7 days so you can cancel; after that the tenant rows are purged and the workspace remains as an archived tombstone. The default workspace and the shared demo cannot be closed. Data retention windows are per workspace too: owners edit them under Data retention, and a policy you have not changed still follows the deployment default.</summary>
  </entry>
  <entry>
    <title>Team admins can remove members, manage invites, and see last active</title>
    <id>https://beamopilot.com/changelog#change-team-admins-can-remove-members-manage-invites-and-see-last-active</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-team-admins-can-remove-members-manage-invites-and-see-last-active"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Team management could invite people and disable them, but not actually take a seat back: there was no way to remove a member, resend or revoke a pending invite, or tell a working teammate from a billed dormant account. Owners and admins can now Remove member (type the email to confirm; the owner and your own row stay protected, and the last remaining admin cannot be offboarded), Resend invite, and Revoke invite. Last active shows when each person last authenticated in this workspace — Pending invite, Never signed in, or a relative time — and Dormant seat flags accepted members with no activity for 30 days. Pending invites occupy a billed seat until they are accepted, revoked, or disabled; removing or revoking frees the address so you can invite it again.</summary>
  </entry>
  <entry>
    <title>Mute, digest, and Quiet hours are yours — and operational email is HTML with unsubscribe</title>
    <id>https://beamopilot.com/changelog#change-mute-digest-and-quiet-hours-are-yours-and-operational-email-is-html-with</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-mute-digest-and-quiet-hours-are-yours-and-operational-email-is-html-with"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Notification routing is still decided by role, but an individual person can finally mute a type, switch it from Immediate to Daily digest, or hold operational email during Quiet hours without asking an admin to change the workspace matrix. Those choices live on Settings → Preferences → Notification delivery. Digest and other operational mail now go out as HTML (with a plain-text part), carry List-Unsubscribe / one-click Unsubscribe links, and skip addresses that bounced or complained through SendGrid, Amazon SES, or Postmark webhooks. SMTP remains the default hand-off; production can set EMAIL_PROVIDER to sendgrid, ses, or postmark instead of the previous plain-text SMTP-only path.</summary>
  </entry>
  <entry>
    <title>Support help is a grant and a session, not an owner-email bypass</title>
    <id>https://beamopilot.com/changelog#change-support-help-is-a-grant-and-a-session-not-an-owner-email-bypass</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-support-help-is-a-grant-and-a-session-not-an-owner-email-bypass"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>Cross-tenant help used to be an implicit match on the platform owner email that silently granted owner membership in whatever workspace header a request carried. That path is gone. A workspace owner or admin now invites Beamo support with a time-boxed grant and a reason; staff can mint a shorter break-glass grant only with a ticket reference. Starting a session sits on the staff web cookie, lasts at most four hours (or until the grant ends), idles out after 30 minutes, pins the workspace switcher, and records every HTTP request plus a tag on every mutating audit row. A non-dismissible banner names the workspace and who they are acting as, with End session. Global operator tools stay blocked until the session ends. Mobile and bearer sessions cannot impersonate.</summary>
  </entry>
  <entry>
    <title>Stalled setup now follows up, instead of going silent</title>
    <id>https://beamopilot.com/changelog#change-stalled-setup-now-follows-up-instead-of-going-silent</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-stalled-setup-now-follows-up-instead-of-going-silent"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>If a workspace sits unfinished after a snag in Setup — a connector that did not connect, legal notices still to accept, or launch blocked by a missing step — Beamo used to remember the error and then ignore it. An hourly sweep now marks those sessions abandoned, emails the operator, and adds a bell notice that names the specific snag and links back to Setup. Opening Setup shows the same recovery banner; continuing any step clears the stall. The platform owner can see where people get stuck under Settings → Overview → Abandoned setup and send a follow-up immediately. Follow-ups are capped (three stages over a week) so a wave of signups cannot flood inboxes, and the public demo workspace is never nudged.</summary>
  </entry>
  <entry>
    <title>Analytics is a real hub, with charts, CSV, and PO spend</title>
    <id>https://beamopilot.com/changelog#change-analytics-is-a-real-hub-with-charts-csv-and-po-spend</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-analytics-is-a-real-hub-with-charts-csv-and-po-spend"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The metric builder and report studio used to live only under Settings tabs, with no route of their own, and every query rendered as a table while the time series the API already returned was thrown away. Analytics is now a top-level workspace on the Accuracy hub: open Accuracy → Analytics (or Ask Pilot's Open Analytics action) to query governed datasets as line, bar, area, or pie charts, keep the table beside them, and export CSV the same way the rest of the app does. Sales, inventory, profitability, and procurement can group by brand and category from the catalog, and procurement finally has a PO spend measure (units × unit cost on each line) so buying can be charted in currency, not only as order counts. Settings → Advanced still deep-links to the builder.</summary>
  </entry>
  <entry>
    <title>Every workspace SKU now has a catalog page</title>
    <id>https://beamopilot.com/changelog#change-every-workspace-sku-now-has-a-catalog-page</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-workspace-sku-now-has-a-catalog-page"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A SKU that was not on the current planning run had no in-app path: /skus/:sku existed, but typing /skus 404'd, and Planning only lists the latest buy list. All SKUs now lives at /skus: every product in the workspace, searchable by SKU, title, brand, category, ASIN, channel, or supplier, filterable by status and lifecycle, sortable on every column, and paginated with Load more. Each row opens the existing SKU 360 page, and a direct visit to a SKU 360 now returns to the catalog instead of Planning. Command palette → All SKUs (or SKU 360) jumps there; the catalog stays out of the sidebar so Planning's tab strip is unchanged.</summary>
  </entry>
  <entry>
    <title>Dual-sourcing splits now show up on Insights</title>
    <id>https://beamopilot.com/changelog#change-dual-sourcing-splits-now-show-up-on-insights</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dual-sourcing-splits-now-show-up-on-insights"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every planning run already scored cheaper-alternate split orders — how many units to keep with the primary supplier, how many to move, the dollar savings after the cash hurdle, and the lead-time trade-off — then wrote that into explainability and never showed it. Insights now opens with Dual-sourcing opportunities for the selected run: SKU count, total potential savings, and a table of recommended splits you can review on the buy, open on SKU 360, or export. The same split appears as a badge on Recommended buys and as a callout on the SKU's Why this buy explanation. It stays advisory: quantities, suppliers, and waves still do not change unless you place the second order yourself.</summary>
  </entry>
  <entry>
    <title>Suppressed buys now say which blanket PO to release against</title>
    <id>https://beamopilot.com/changelog#change-suppressed-buys-now-say-which-blanket-po-to-release-against</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-suppressed-buys-now-say-which-blanket-po-to-release-against"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>When an active blanket purchase agreement already covers a recommended buy, Planning used to hold the SKU with no instruction — operators saw a suppressed buy and had to hunt through explainability JSON for the agreement. Recommended buys, the SKU next-step, SKU 360, and Insights now spell out &quot;Release N units against BPA-X&quot; (or &quot;a blanket PO&quot; when the run did not record a number), with a badge on any residual buy and a Release link that opens Buy → Logistics on that agreement with the SKU and units already filled in.</summary>
  </entry>
  <entry>
    <title>Seasonal pre-build and FBA restock caps explain the buy on the plan</title>
    <id>https://beamopilot.com/changelog#change-seasonal-pre-build-and-fba-restock-caps-explain-the-buy-on-the-plan</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-seasonal-pre-build-and-fba-restock-caps-explain-the-buy-on-the-plan"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>When seasonal pre-build extends cover toward an upcoming season, the recommended-buys row, SKU detail, SKU 360, and the buy explainer now say how many extra days were added and when that season starts — so &quot;why did this buy triple?&quot; has an answer on the plan, not only in raw JSON. FBA restock-limit cuts show the same way: the badge and next-step copy include how many units were trimmed and how much headroom remained. Insights Plan details also reports how many SKUs in the run were pre-built or capped.</summary>
  </entry>
  <entry>
    <title>Connector rows show which data streams actually synced</title>
    <id>https://beamopilot.com/changelog#change-connector-rows-show-which-data-streams-actually-synced</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-connector-rows-show-which-data-streams-actually-synced"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A marketplace connector could fail settlements or stop inventory at a page limit and still look fully healthy, because Channels only painted the account as Active and the last success as Fresh. Each connector now shows sync health per data stream — catalog, inventory, orders, returns, multi-location inventory, and settlements — with an honest overall chip (Settlements failed, Partial sync, All capabilities synced) and the truncation warning in the row, not hidden in a tooltip. Fresh stays an age signal, but it no longer stays green when a stream is degraded. A later failed check does not erase the last successful snapshot: the row says the latest check failed and still shows what last succeeded. Sync toasts follow the same rule, so a truncated or partial pull is a warning rather than a credential-expiry error. Data checks humanizes those page-limit warnings and flags a failed latest check above the capability table.</summary>
  </entry>
  <entry>
    <title>Dashboards can snapshot and email on a schedule, and warehouse cadence is editable</title>
    <id>https://beamopilot.com/changelog#change-dashboards-can-snapshot-and-email-on-a-schedule-and-warehouse-cadence-is</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dashboards-can-snapshot-and-email-on-a-schedule-and-warehouse-cadence-is"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Custom reports &amp; exports could build a dashboard and a warehouse destination, but Snapshot now, email-me-this-board, and changing a destination's cadence after create had no controls — the APIs were already there. Each dashboard now has Snapshots and email schedule: capture the current widgets immediately, pick hourly through monthly (or Manual to stop), set recipients, and choose CSV, PDF, and JSON attachments. Recipients and formats save with the cadence, so Monday's list can change without deleting the board. Recent snapshots list status, trigger, widget and row counts, and any error. Warehouse destinations show cadence, next run, and last run on the row; Save schedule updates cadence after create; Preview export stays the dry-run, and Deliver now is the live warehouse push.</summary>
  </entry>
  <entry>
    <title>Scheduled reports are fully editable, with a delivery clock and run history</title>
    <id>https://beamopilot.com/changelog#change-scheduled-reports-are-fully-editable-with-a-delivery-clock-and-run-histo</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-scheduled-reports-are-fully-editable-with-a-delivery-clock-and-run-histo"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Adding a single recipient to a scheduled report used to mean deleting the definition and building it again, because Settings only exposed Enable/Disable even though the API already accepted name, cadence, subscribers, and formats. The Integrations scheduled-reports panel now opens an editor for all of those fields plus the delivery hour, weekly weekday, monthly day of the month, and timezone, and shows the next run beside the last result. Each completed snapshot — scheduled or run-now — is kept as run history so you can see what was delivered and when, without reconstructing it from the latest-run cache on the row.</summary>
  </entry>
  <entry>
    <title>The certified metric catalog is now complete and editable</title>
    <id>https://beamopilot.com/changelog#change-the-certified-metric-catalog-is-now-complete-and-editable</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-certified-metric-catalog-is-now-complete-and-editable"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Saving a governed metric used to keep only a key and a label, so the catalog's description, unit, format, and owner columns stayed empty even though the API already stored them. The save form now takes those fields, the catalog table shows them, and draft or deprecated metrics have an Edit action that patches them in place. Certified metrics stay locked until you Restore them to draft, which is the same rule the API already enforced.</summary>
  </entry>
  <entry>
    <title>Dashboard widgets can be edited, reordered, and removed</title>
    <id>https://beamopilot.com/changelog#change-dashboard-widgets-can-be-edited-reordered-and-removed</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dashboard-widgets-can-be-edited-reordered-and-removed"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Custom dashboards could only append widgets. Each tile now has Edit (title, type, refresh, and linked report), Move up / Move down (a full layout replace so snapshots keep the same order), and Remove (soft-archive, so the widget leaves the board and scheduled snapshots without a hard delete). The studio loads every widget on the returned dashboards instead of a 50-row workspace-wide slice that could drop tiles on a busy board.</summary>
  </entry>
  <entry>
    <title>Billing shows billed seats, in-app plan changes, invoices, and resume</title>
    <id>https://beamopilot.com/changelog#change-billing-shows-billed-seats-in-app-plan-changes-invoices-and-resume</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-billing-shows-billed-seats-in-app-plan-changes-invoices-and-resume"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Billing used to fetch the quantity Stripe actually invoices (billable seats) and then hide it, showing only live members and included seats — so a workspace could look like it was paying for four seats while the invoice still said one. The header now reports members, included seats, and billed seats separately, and billed seats stay on the Stripe-confirmed snapshot until seat sync catches up. Existing subscribers can upgrade or switch plans in the app: the compare dialog updates the live Stripe subscription with prorations instead of only opening the customer portal. Invoice history lists this workspace's Stripe invoices, and a subscription scheduled to cancel can be resumed in place so it renews as usual. The portal remains the path for payment methods and cancel.</summary>
  </entry>
  <entry>
    <title>TikTok, eBay, and Etsy can be synced and verified on demand</title>
    <id>https://beamopilot.com/changelog#change-tiktok-ebay-and-etsy-can-be-synced-and-verified-on-demand</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-tiktok-ebay-and-etsy-can-be-synced-and-verified-on-demand"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>TikTok Shop, eBay, and Etsy already synced on the six-hour marketplace job, but an operator had no HTTP path to trigger or verify those channels the way Amazon, Walmart, and Shopify already could. Channels → Connectors now shows capability health (inventory, orders, catalog) on each live connector, keeps the last Test result on the row, and offers Sync TikTok Shop now, Sync eBay now, and Sync Etsy now alongside Walmart and Shopify. Those buttons call POST /api/v1/sync/{provider}/run — the same CSRF-gated, ENABLE_MANUAL_SYNC-protected workspace job Amazon uses — and GET /api/v1/connectors/{tiktok|ebay|etsy}/status plus POST /api/v1/connectors/{tiktok|ebay|etsy}/verify list and verify the live marketplace accounts (not empty onboarding credential rows). Amazon settlements, the one date-windowed Seller Central stream with no backfill tool, now appear in Settings → Advanced → Amazon plugin tools as Backfill Amazon settlements window, with Start and End dates, using the same generic plugin-tool runner as orders and inbound reports.</summary>
  </entry>
  <entry>
    <title>Supplier health names the mix behind Route to review</title>
    <id>https://beamopilot.com/changelog#change-supplier-health-names-the-mix-behind-route-to-review</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-health-names-the-mix-behind-route-to-review"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Autonomy tightening used to ride on a single 0–100 supplier score, while the five weighted dimensions and their 7/30/90-day windows sat unused in the API payload. The Suppliers Health panel now shows the score mix: each dimension's 0–100, its share of the blend, 7/30/90-day windows (or Not windowed for reliability and invoice accuracy), a per-dimension trend, and a sentence on how that dimension moves Trusted / Reliable / Watch / At risk into Route to review, Review, or OK. Dimensions without data still appear as Not in blend, so a missing invoice history cannot quietly drag the score down. The directory keeps the overall score and on-time sparkline, and adds the weakest scored dimension under the 0–100 so a slipping row names its driver without dumping five numbers into every cell.</summary>
  </entry>
  <entry>
    <title>The approvals queue now shows the full request, not just a name</title>
    <id>https://beamopilot.com/changelog#change-the-approvals-queue-now-shows-the-full-request-not-just-a-name</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-approvals-queue-now-shows-the-full-request-not-just-a-name"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Approvals used to hide most of what the server already knew: no requested or decided time, no countdown to escalation, a purchase-order name that was not a link, a pending-only list capped at 100, and a client-side guess at who could act that marked delegates' cards read-only. The queue now uses the server's can-act flag (so covering for someone else still shows Approve), turns the subject into a link to the purchase order or pay run, prints requested and decided times plus the current step's escalation clock, and lets you filter history by status with Load more instead of a hard cap.</summary>
  </entry>
  <entry>
    <title>Cash forecast one-off events and shared scenarios</title>
    <id>https://beamopilot.com/changelog#change-cash-forecast-one-off-events-and-shared-scenarios</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cash-forecast-one-off-events-and-shared-scenarios"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Finance and Cash budget now share the same cash-assumption levers, so a refresh on either tab can no longer silently include different commitments. You can add one-off cash events (tax, payroll, a loan draw) onto the 13-week runway, edit the three canned scenarios or add a named custom one, and set the Cash budget planning horizon to any window from 1 to 52 weeks for weekly limits and variance.</summary>
  </entry>
  <entry>
    <title>Cash forecast assumptions and prediction toggles are in Settings</title>
    <id>https://beamopilot.com/changelog#change-cash-forecast-assumptions-and-prediction-toggles-are-in-settings</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cash-forecast-assumptions-and-prediction-toggles-are-in-settings"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Marketplace payout reserve buffer and payout cadence drove cash math and were written or snapshotted by the system, but they were the only settings columns missing from both GET/PUT /settings and the Settings UI. They now live under Settings → Advanced → Cash forecast assumptions, alongside payout lag, with copy that says what each number does and when the learning loop or observed settlements take over. In-run landed-cost prediction and container-fill annotation were already in the API contract and now have Planning intelligence toggles, so an Advanced save can no longer silently leave those flags off. Defaults stay 5% reserve, 14-day cadence, 14-day lag, and both prediction toggles on.</summary>
  </entry>
  <entry>
    <title>Notes, change history, and Open in now sit on every backed detail</title>
    <id>https://beamopilot.com/changelog#change-notes-change-history-and-open-in-now-sit-on-every-backed-detail</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-notes-change-history-and-open-in-now-sit-on-every-backed-detail"/>
    <updated>2026-08-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Entity notes, per-record change history, and the Open in handoff menu were already built — they just weren't on most of the records that already stored the data. SKU notes now appear on SKU 360 and Feedback as well as Planning; purchase-order notes sit on the Operations receiving panel; and the six change-history tables (purchase orders, PO lines, product returns, billing subscriptions, supplier actions, and settings) each have a place to read the field-level before/after trail. The supplier-agent autonomous edit log, which already wrote a full trail no screen showed, is on the action detail and on supplier-action-review exceptions. Open in is on the remaining detail surfaces so a SKU, PO, proposal, transfer, supplier, cash forecast, pay run, shipment, or clearance campaign can jump to the next workspace without a hash deep-link.</summary>
  </entry>
  <entry>
    <title>Find a setting without knowing which tab it is on</title>
    <id>https://beamopilot.com/changelog#change-find-a-setting-without-knowing-which-tab-it-is-on</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-find-a-setting-without-knowing-which-tab-it-is-on"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Settings is seven tabs holding around forty sections, and all but the first on each tab arrive collapsed, so finding something meant already knowing where it lived. There is now a search box above the tab strip that covers all seven tabs at once: type a word, pick a result, and it switches tab, opens that section and scrolls to it. It matches what a section is called, what it is for, and the words people actually type rather than the ones on screen, so &quot;2FA&quot; finds Account security, &quot;GDPR&quot; finds Data privacy, &quot;SAML&quot; finds SSO &amp; SCIM and &quot;spend limit&quot; finds Approval policies; every result names the tab it lives on so the next time you can go straight there, and the arrow keys move down into the list from the box. Each section now has its own address too, which makes it a bookmark or a link you can send a teammate: previously only fifteen of the forty sections could be linked to at all, and the rest quietly landed you on Overview. Account security was one of them, and it had a second problem, its anchor only existed once the panel had loaded for an owner, so a link to it did nothing while it was still loading or when you were not the owner.</summary>
  </entry>
  <entry>
    <title>Settings stops hiding things, and stops overstating them</title>
    <id>https://beamopilot.com/changelog#change-settings-stops-hiding-things-and-stops-overstating-them</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-settings-stops-hiding-things-and-stops-overstating-them"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Advanced was two collapsed rows on a blank page: everything but the metric builder sat behind a &quot;Deep system details&quot; wrapper that only held four more disclosures. Those four are sections in their own right now, so the tab is one flat menu like every other. Access groups its eight sections into three labelled runs, Getting in, What is kept and proving it, and This workspace, so you can skip two thirds of it at a glance. Read-only roles get the settings screen instead of a locked door: without Owner or Admin access Preferences now shows the saved timezone, week start and alert thresholds rather than a single sentence, and display language stays yours to set because it only ever lived in your own browser. Preferences and Advanced share one settings record, so each now says when a pending change came from the other tab, and Advanced warns before discarding an edit you made in Preferences. Several claims got more honest too: KPI cards no longer report a &quot;flat&quot; trend for metrics that have not accrued two measurements yet, the auto-healing tile shows a real zero instead of a dash, the system checklist no longer says &quot;Everything is running&quot; while a subsystem has never reported, and Advanced no longer advertises a deployment-flags panel that customers cannot see. Throughout, controls stopped stretching to fill their container, a two-digit day count in a 1348px box, a status chip rendered as a 624px green bar, &quot;Create task&quot; spanning the page, and the German, Italian, Indonesian, Japanese, Korean, Russian, Turkish, Vietnamese and Arabic builds no longer print &quot;Week starts on&quot; half in English.</summary>
  </entry>
  <entry>
    <title>Settings reads like a settings screen</title>
    <id>https://beamopilot.com/changelog#change-settings-reads-like-a-settings-screen</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-settings-reads-like-a-settings-screen"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Preferences is rebuilt: settings are grouped under Language and region, Alert thresholds, and Sign-in identity, each one a row with a plain-language explanation and a control sized to its content, a two-digit day count no longer sits in a field the full width of the page. &quot;Alert A/B stockout days&quot; now say what they mean: &quot;Top seller stockout warning&quot; and &quot;Steady seller stockout warning&quot;, in days, with the tier spelled out underneath. Business timezone covers every timezone in the world, with a search box and each zone's GMT offset, instead of eight US zones, so a workspace outside the US can finally state its own. The Settings landing page leads with system status rather than a grid of links repeating the tab strip right above it, the page stops printing its own title three times over, the health checklist lines up, and every dropdown in Settings now tells a screen reader which setting it belongs to.</summary>
  </entry>
  <entry>
    <title>One name for everything, and a calmer first run</title>
    <id>https://beamopilot.com/changelog#change-one-name-for-everything-and-a-calmer-first-run</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-one-name-for-everything-and-a-calmer-first-run"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The same place now has the same name everywhere: the sidebar, page headings, the tour, and these docs all agree on one plain name per hub, Ask Pilot, Planning, Buy, Cash, Accuracy, and Settings (retiring the old Pilot hub, Alert center, Pilot Memories, Results &amp; accuracy, and Imports &amp; Exports names). The Demo guide's five stops are renamed to plain tasks, &quot;Take the 60-second tour&quot;, &quot;See a product about to run out of stock&quot;, &quot;See which slow stock to mark down&quot;, &quot;See how far the cash goes&quot;, and &quot;Ask Pilot a question&quot;. A first visit to Home now greets you, &quot;Welcome, Pilot is watching for you&quot;, and in the demo &quot;Welcome, N decisions are waiting for you to try&quot;, instead of opening with what Pilot did &quot;since you last looked&quot;. The account menu, Team, Billing, Docs, theme, language, and logout, moved to the top right, opening from your initials at the right end of the command band. The command palette reaches Team, Billing, and Memories by name, jumps to named Settings sections (Integrations, Health, Alerts &amp; rules, Access), and lists the public pages, the docs, What's new, and the status page. In the setup wizard, the adjacent steps once called &quot;Platforms&quot; and &quot;Marketplaces&quot; now say what they are: &quot;Sales channels&quot; and &quot;Countries&quot;.</summary>
  </entry>
  <entry>
    <title>Sign-in, planning verdicts, and drill-down navigation now stay in sync</title>
    <id>https://beamopilot.com/changelog#change-sign-in-planning-verdicts-and-drill-down-navigation-now-stay-in-sync</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sign-in-planning-verdicts-and-drill-down-navigation-now-stay-in-sync"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Completing an MFA challenge now opens the requested workspace instead of leaving a consumed challenge on screen, and converting from the demo to a real workspace no longer bounces back into the demo session. SKU 360 now uses the actual order-by deadline, distinguishes a held zero-unit plan from a healthy no-buy, and returns to the alert, notification, or parent bundle that opened it. Setup-based planning prompts now require evidence of a successful connector sync or completed import, cash-budget Select all is idempotent, hidden Finance sorts are cleared with their columns, and the frontend and PDF-processing dependencies include their current security fixes.</summary>
  </entry>
  <entry>
    <title>A clearer, more honest demo, and a calmer app overall</title>
    <id>https://beamopilot.com/changelog#change-a-clearer-more-honest-demo-and-a-calmer-app-overall</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-clearer-more-honest-demo-and-a-calmer-app-overall"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The demo button no longer guesses: it stays disabled with a &quot;Checking demo availability…&quot; spinner until the app confirms the demo is up, and says so plainly when it isn't. The demo's ground rules are now stated up front: the ribbon and a new &quot;About the demo&quot; dialog explain that the workspace is shared with other visitors, filled with fictional data, and resets when refreshed, so changes don't stick and won't carry into a real workspace. The welcome tour always runs before the Demo guide, never on top of it, and guide stops whose data isn't in the current demo say so instead of leading to empty screens. Across the app: every workspace route now belongs to a sidebar hub (Creator reports included), workspace headers look and behave the same everywhere, short confirmations like &quot;Copied&quot; and &quot;Saved&quot; appear as tidy toast notifications in the corner, and the busiest workspaces show skeleton placeholders that match the final layout while data loads.</summary>
  </entry>
  <entry>
    <title>The demo now guides you instead of dropping you in cold</title>
    <id>https://beamopilot.com/changelog#change-the-demo-now-guides-you-instead-of-dropping-you-in-cold</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-demo-now-guides-you-instead-of-dropping-you-in-cold"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Opening the demo used to hand you a dense dashboard with a one-shot tour as the only orientation, skip it once (or revisit in the same browser) and you were on your own. A persistent &quot;Demo&quot; menu now lives in the top bar with Open demo guide, Replay tour, About the demo, and Create your workspace; a floating Demo guide points at five concrete stops, an urgent stockout to rescue, slow stock to mark down, the cash forecast, and Ask Pilot, checking each off as you visit it, and reopening itself if you skip the tour. &quot;Sample data&quot; is now just &quot;Demo&quot; everywhere: the landing page, sign-in, the banner, and the docs.</summary>
  </entry>
  <entry>
    <title>Fewer unexplained numbers, easier to find your way back</title>
    <id>https://beamopilot.com/changelog#change-fewer-unexplained-numbers-easier-to-find-your-way-back</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fewer-unexplained-numbers-easier-to-find-your-way-back"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>An info icon next to jargon terms, MAPE, WAPE, P90 delay, MOQ, FBA-limit and price-break badges, the censored-demand toggle, and more, now explains what they mean in plain language on hover or tap. SKU 360, the Amazon connector pages, and Creator reports (routes with no sidebar hub of their own) now show a &quot;← Back to…&quot; link instead of stranding you with no way back except the browser button. Planning's empty state now tells you to connect a channel first when there's genuinely no data yet, instead of offering a dead-end &quot;Update now.&quot; The weekly cash table uses the same &quot;Money in / Spending / Cash left&quot; wording everywhere, and Planning and Procurement's buy lists each link to the other with a one-line explanation of which is for deciding and which is for executing.</summary>
  </entry>
  <entry>
    <title>Navigation polish: pages open at the top, SKU tabs get their own title, select-all everywhere</title>
    <id>https://beamopilot.com/changelog#change-navigation-polish-pages-open-at-the-top-sku-tabs-get-their-own-title-sel</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-navigation-polish-pages-open-at-the-top-sku-tabs-get-their-own-title-sel"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Switching pages now scrolls back to the top and moves focus to the new page instead of leaving you part-way down where the last page left off (back/forward still restores your position, as expected). Each SKU 360 page now sets its own browser-tab title instead of every SKU sharing one generic title. The command palette's keyboard shortcut now reads &quot;Ctrl K&quot; on Windows/Linux instead of always showing the Mac symbol. Pay runs, invoice holds, the exception workboard, and the supplier agent's review queue all gained a select-all checkbox and the same bulk-action bar used elsewhere. The marketplace SKU-links list and the procurement orders tab can now be searched and filtered instead of scrolled by eye. Counts throughout the app now read naturally (&quot;3 alerts&quot;, &quot;1 hold&quot;) instead of hand-built singular/plural text.</summary>
  </entry>
  <entry>
    <title>Fixed bulk actions reaching rows hidden by the active filter</title>
    <id>https://beamopilot.com/changelog#change-fixed-bulk-actions-reaching-rows-hidden-by-the-active-filter</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fixed-bulk-actions-reaching-rows-hidden-by-the-active-filter"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Invoice-hold release, the exception workboard's bulk action, and the cash budget's funded-buy approval could retain a selection built before a filter change or data refresh, letting a bulk action apply to rows no longer visible in the current view. Selection is now pruned to what's actually on screen the moment the list changes.</summary>
  </entry>
  <entry>
    <title>Fixed the Transfers tab's detail panel overlapping the proposals list</title>
    <id>https://beamopilot.com/changelog#change-fixed-the-transfers-tab-s-detail-panel-overlapping-the-proposals-list</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fixed-the-transfers-tab-s-detail-panel-overlapping-the-proposals-list"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Selecting a transfer proposal on Operations → Transfers made its detail panel (metric cards, timing, approve/reject) visually overlap the proposals list beside it, colliding text and burying the actions under table rows. The detail column now correctly stays within its own space.</summary>
  </entry>
  <entry>
    <title>Dropdowns, sortable tables, and clearable filters: consistent across the app</title>
    <id>https://beamopilot.com/changelog#change-dropdowns-sortable-tables-and-clearable-filters-consistent-across-the-ap</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dropdowns-sortable-tables-and-clearable-filters-consistent-across-the-ap"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every remaining plain browser dropdown across Finance, Operations, Suppliers, Procurement, Planning, Settings, and the smaller workspaces is now the same styled, keyboard-navigable control used elsewhere in the app. Filter rows in the exception workboard, run controls, cash events, settlements, invoice matching, and inbound exceptions now show how many filters are active and offer one button to clear them. Several tables that could only be read top-to-bottom, supplier directory, price breaks, purchase orders, shipments, work orders, returns, background jobs, tasks, and the safety-stock buffer comparison, among others, can now be sorted by clicking any column. Saving or completing an action (contracts, price lists, freight bookings, cycle counts, purchase-order dispatch, approval decisions, automation review, and more) now confirms with the same brief toast used elsewhere, instead of an easy-to-miss note on a handful of screens.</summary>
  </entry>
  <entry>
    <title>Fixed the system-health badge's missing warning color and its disappearing act on tablet widths</title>
    <id>https://beamopilot.com/changelog#change-fixed-the-system-health-badge-s-missing-warning-color-and-its-disappeari</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fixed-the-system-health-badge-s-missing-warning-color-and-its-disappeari"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The topbar's &quot;N to check&quot; attention badge was missing a real CSS class and rendered with no warning color at all. Below 1024px wide, the whole system-health indicator used to vanish rather than shrink: it's now a compact color dot that stays clickable through to Settings. Also fixed: a settlements table's empty-state row spanning one column short of its actual width, and several ad-hoc &quot;No … yet&quot; table rows (SKU 360, Results, background jobs) that now use the same empty-state treatment as the rest of the app.</summary>
  </entry>
  <entry>
    <title>Toast confirmations, a real 404 page, and keyboard navigation for the account menu</title>
    <id>https://beamopilot.com/changelog#change-toast-confirmations-a-real-404-page-and-keyboard-navigation-for-the-acco</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-toast-confirmations-a-real-404-page-and-keyboard-navigation-for-the-acco"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Saving a supplier price break or contract, applying a mapping template or catalog bulk edit, reviewing or applying a cycle count, completing a putaway task, and connecting, refreshing, or disconnecting a bank account in Finance now all confirm with a brief toast: success clears itself after a few seconds (pause by hovering or focusing it), anything that failed stays until you dismiss it. A mistyped or stale link now lands on a plain &quot;page not found&quot; page with a way back in, instead of a blank screen or a silent bounce to the sign-in screen. The account menu's items are now reachable with the arrow keys, Home, and End, matching the mobile menu.</summary>
  </entry>
  <entry>
    <title>SKU 360 gets the same decision header as every other workspace, plus a round of correctness fixes</title>
    <id>https://beamopilot.com/changelog#change-sku-360-gets-the-same-decision-header-as-every-other-workspace-plus-a-ro</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sku-360-gets-the-same-decision-header-as-every-other-workspace-plus-a-ro"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>SKU 360's page header now uses the same verdict-and-signals layout as the rest of the app. Elsewhere: a few status colors and radii that had silently lost their styling now render correctly (a chart in Settings was painting its bars solid black), the Operations Bucket and Status filters are now dropdowns instead of free-text fields that required knowing the exact internal value, several dates and quantities that were rendering as raw numbers now format like their neighbors, a handful of statuses (bank-receiving scans, import jobs, inventory transfers) that fell outside the badge color vocabulary now show the right color, and &quot;P90 delay&quot; / &quot;MOQ units&quot; read as plain language. The Import mapping studio's save and apply actions no longer fail silently.</summary>
  </entry>
  <entry>
    <title>A calmer Home and an honest workspace switcher</title>
    <id>https://beamopilot.com/changelog#change-a-calmer-home-and-an-honest-workspace-switcher</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-calmer-home-and-an-honest-workspace-switcher"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The test drive no longer offers a workspace dropdown listing several identical “Beamo Pilot Test Drive” entries: demo sessions are pinned to one workspace, leftover duplicates from an old bug now retire themselves, and duplicate memberships can no longer produce repeated entries for anyone. The switcher itself is now a proper styled menu instead of a browser default dropdown. Home also sheds its repeated counters: the decision queue states each count once (in the tabs), filtered views no longer repeat the tab's own label as a heading below it, and when there's only one group the three queue buttons sit quietly under the header instead of floating in an empty full-width bar.</summary>
  </entry>
  <entry>
    <title>A consistency polish across every corner of the app</title>
    <id>https://beamopilot.com/changelog#change-a-consistency-polish-across-every-corner-of-the-app</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-consistency-polish-across-every-corner-of-the-app"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A sweep through the less-travelled screens so they match the polish of the main workspaces. The Imports &amp; Exports tab now opens with the same verdict-and-metrics header as every other workspace, and every file upload in the app (imports, onboarding, decision rooms) is a proper styled button instead of the browser's grey default. The supplier and RFQ portals validate your quote before submitting, show your bid's review status, describe PO status in plain supplier language, and keep column labels on phones. The privacy-request and quote forms gained field-level labels, hints, and inline errors. Change history now shows readable field names and values instead of raw data dumps, billing errors offer a retry, admin screens show errors in the standard alert style, supplier detail panels load with skeletons and proper empty states, and decision rooms use the same buttons, menus, and controls as the rest of Pilot.</summary>
  </entry>
  <entry>
    <title>Always know where you are, and less to dig through</title>
    <id>https://beamopilot.com/changelog#change-always-know-where-you-are-and-less-to-dig-through</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-always-know-where-you-are-and-less-to-dig-through"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The sidebar now lights up its hub on every page, including SKU 360, the Alert center, Team &amp; Workspaces, Billing, and the Amazon connector pages, and a small &quot;Hub › Page&quot; trail appears above the title on those secondary pages. Settings' Overview tab now opens with a directory linking every settings section and cross-hub destination in one place. On the busiest screens, Procurement's purchase-order detail, the supplier agent console, past-run review, and receiving, secondary stats, rules, and forms now collapse behind a closed &quot;show more&quot; instead of competing with the primary work, and duplicate or competing buttons were trimmed to one clear action.</summary>
  </entry>
  <entry>
    <title>Expansion readiness: know when to add products, and when to hold off</title>
    <id>https://beamopilot.com/changelog#change-expansion-readiness-know-when-to-add-products-and-when-to-hold-off</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-expansion-readiness-know-when-to-add-products-and-when-to-hold-off"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Home now answers &quot;is this a good time to expand my catalog?&quot; with a daily, evidence-backed verdict scored across five pillars: supply-chain stability, demand &amp; forecast health, cash headroom, operational load, and fulfillment headroom. Any pillar in critical condition forces &quot;Stabilize before expanding&quot;, each verdict comes with a plain-language explanation (AI-written from your numbers when an AI provider is configured) and a linked checklist of what to fix first. Also available in the test-drive workspace with its real seeded data.</summary>
  </entry>
  <entry>
    <title>A written &quot;why&quot; on every action Pilot takes or proposes</title>
    <id>https://beamopilot.com/changelog#change-a-written-why-on-every-action-pilot-takes-or-proposes</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-written-why-on-every-action-pilot-takes-or-proposes"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Copilot suggestions, autopilot executions, recommended buys, and supplier order proposals now each carry a short explanation grounded in that item's own numbers: what changed, why it matters, and what acting does. When an AI provider is configured the explanations are AI-written nightly from the item's exact facts; otherwise the built-in deterministic reasons remain, so nothing ever shows an unexplained action.</summary>
  </entry>
  <entry>
    <title>Fulfillment limits, ad spend, and calibrated lead times: wired all the way through</title>
    <id>https://beamopilot.com/changelog#change-fulfillment-limits-ad-spend-and-calibrated-lead-times-wired-all-the-way-</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fulfillment-limits-ad-spend-and-calibrated-lead-times-wired-all-the-way-"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The lead time the plan actually used (calibrated from your receiving history) now also drives cash-forecast payment timing, what-if simulation arrivals, and seasonal order-by dates. Observed FBA restock limits can be recorded and now genuinely cap buys, with capped buys surfaced in the attention digest and the seasonal advisor. And ad spend observed by your ad connectors projects into the cash runway even before an advertising bill lands in Finance.</summary>
  </entry>
  <entry>
    <title>AI demand review across every connected data source</title>
    <id>https://beamopilot.com/changelog#change-ai-demand-review-across-every-connected-data-source</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-ai-demand-review-across-every-connected-data-source"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A daily AI pass now cross-checks your highest-revenue SKUs' forecasts against everything your connectors report, per-channel sales, traffic and conversion, buy-box share, ad spend, returns, seasonality, and the forecast's own error bars, and can nudge planning velocity within strict, configurable bounds. Every review is persisted with its evidence and rationale, applications are recorded in the recommendation's &quot;Why this buy&quot; explanation, and each SKU's latest review appears on its SKU 360 page. Configurable (or off) in Settings → Planning intelligence.</summary>
  </entry>
  <entry>
    <title>Demand history now counts every connected channel, and survives connector outages</title>
    <id>https://beamopilot.com/changelog#change-demand-history-now-counts-every-connected-channel-and-survives-connector</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-demand-history-now-counts-every-connected-channel-and-survives-connector"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Channels that report through CSV uploads now count in the demand series alongside live-API channels (each channel through its own most-trusted source, never double-counted). And when a connected channel's feed goes dark, the affected days are corrected as partially observed instead of being read as a real sales drop, so a broken connector no longer quietly shrinks your forecast and under-orders your next buy.</summary>
  </entry>
  <entry>
    <title>Explore the mobile app with shared sample data</title>
    <id>https://beamopilot.com/changelog#change-explore-the-mobile-app-with-shared-sample-data</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-explore-the-mobile-app-with-shared-sample-data"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The Android sign-in screen now offers a credential-free live demo backed by Beamo Pilot's isolated sample workspace. The app clearly marks the shared, periodically reset data, keeps reviewer sessions pinned to that workspace, and never registers demo devices for push notifications.</summary>
  </entry>
  <entry>
    <title>A calmer, faster console layout</title>
    <id>https://beamopilot.com/changelog#change-a-calmer-faster-console-layout</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-calmer-faster-console-layout"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every workspace now opens with a single compact decision bar (verdict, key numbers as a quiet stat strip, and the next action inline) instead of a tall hero card, so your work list starts within the first screenful. Duplicate headings that repeated the tab name were removed, the sample-data notice is a one-line ribbon, and the top bar's two system chips merged into one.</summary>
  </entry>
  <entry>
    <title>Connect your Etsy shop</title>
    <id>https://beamopilot.com/changelog#change-connect-your-etsy-shop</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-connect-your-etsy-shop"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Connect an Etsy shop from Channels → Connectors with secure Open API v3 seller OAuth (Authorization Code with PKCE): no API keys to copy. Beamo Pilot verifies the shop, stores the rotating tokens encrypted, and syncs active-listing inventory and receipt-based orders into the unified SKU layer, feeding Etsy sales velocity into planning. Etsy rides the same six-hourly marketplace sync as the other live connectors. v1 is read-only sync (inventory + orders); price/inventory write-back and refund netting are not yet available.</summary>
  </entry>
  <entry>
    <title>Google Ads &amp; Meta Ads spend connector</title>
    <id>https://beamopilot.com/changelog#change-google-ads-meta-ads-spend-connector</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-google-ads-meta-ads-spend-connector"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Connect Google Ads or Meta Ads (Facebook &amp; Instagram) with your platform API credentials and pull your last-30-days ad spend on demand from Channels → Ad-spend connectors. Each pull shows total spend, impressions, clicks, conversions, and a per-campaign breakdown, every number comes straight from the platform's API, never fabricated by Beamo. Credentials are stored encrypted; one ad account is active per platform per workspace. v1 is connect + on-demand spend pull, it does not yet sync on a schedule or attribute spend into ACOS/TACOS.</summary>
  </entry>
  <entry>
    <title>Sales tax provider connector (Avalara &amp; TaxJar)</title>
    <id>https://beamopilot.com/changelog#change-sales-tax-provider-connector-avalara-taxjar</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sales-tax-provider-connector-avalara-taxjar"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Connect Avalara AvaTax or TaxJar with your provider API credentials and compute authoritative sales tax on demand from Cash → Documents. Enter a destination and a taxable amount to get the provider-computed total, effective rate, and per-jurisdiction breakdown, every number comes straight from the provider, never fabricated or hardcoded by Beamo. Credentials are stored encrypted and verified with the provider before saving; one provider is active per workspace. v1 is connect + on-demand estimate, it does not yet apply tax to every order or file returns.</summary>
  </entry>
  <entry>
    <title>Xero accounting connector</title>
    <id>https://beamopilot.com/changelog#change-xero-accounting-connector</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-xero-accounting-connector"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Connect one Xero organisation to keep bank cash and approved supplier bills current in Finance, with signed invoice webhooks, daily reconciliation, mapped-account payment writeback, and balanced inventory-valuation journals. OAuth tokens rotate encrypted, retries honour Xero limits, and every ledger write is separately confirmed and idempotent.</summary>
  </entry>
  <entry>
    <title>Time-limited access for guests and auditors</title>
    <id>https://beamopilot.com/changelog#change-time-limited-access-for-guests-and-auditors</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-time-limited-access-for-guests-and-auditors"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Set an access expiry on any non-owner member from Team, so external guests and auditors lose sign-in access automatically at a date and time you choose: no reminder to disable them later. Enforced on every request across web and mobile; clear the expiry any time to restore permanent access. The owner can't be time-limited, you can't schedule your own lockout, and the last remaining admin can't be put on a timer.</summary>
  </entry>
  <entry>
    <title>Multi-echelon positioning advisory</title>
    <id>https://beamopilot.com/changelog#change-multi-echelon-positioning-advisory</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-multi-echelon-positioning-advisory"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A read-only advisory (Planning → Insights) that shows where safety stock should sit across the two-echelon network, a pooled supplier-lead-time buffer at the hub warehouse and a shorter transfer-lead-time buffer downstream at Amazon, and flags each SKU's echelon as under-, over-, or aligned against the latest plan snapshot, with plan and inventory observation times shown for freshness. Advisory only: it never moves stock or changes the plan.</summary>
  </entry>
  <entry>
    <title>Cross-dock received units to open shipments</title>
    <id>https://beamopilot.com/changelog#change-cross-dock-received-units-to-open-shipments</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cross-dock-received-units-to-open-shipments"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Route just-received units straight to an open outbound transfer instead of putting them away. The Operations Inventory tab surfaces cross-dock opportunities (dock stock that matches an approved outbound line), then lets you stage the units to a dock bin against that shipment and complete or cancel the move. It's layered over normal receiving and never changes putaway; managing tasks needs the Inventory manage permission.</summary>
  </entry>
  <entry>
    <title>FX revaluation with unrealized gain/loss</title>
    <id>https://beamopilot.com/changelog#change-fx-revaluation-with-unrealized-gain-loss</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-fx-revaluation-with-unrealized-gain-loss"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Revalue open foreign-currency payables at current rates to book the unrealized FX gain or loss as the market moves. Each run snapshots per-currency open balances and rates and measures the movement since the previous run: a strengthening foreign currency reads as a loss on what you owe. Run it from Settings → FX rates (Owner/Admin); the history is kept period over period.</summary>
  </entry>
  <entry>
    <title>Velocity-aware directed putaway</title>
    <id>https://beamopilot.com/changelog#change-velocity-aware-directed-putaway</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-velocity-aware-directed-putaway"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Directed putaway now slots fast movers toward the pick face and the slow-moving tail toward reserve, using each SKU's ABC velocity class from the latest plan. Warehouse bins gained an optional pick sequence (golden-zone rank) so an A-item lands in the nearest pick bin, not just any pick bin. Every recommendation stays explainable with reason codes and scored candidates.</summary>
  </entry>
  <entry>
    <title>Allocate serial numbers to shipments</title>
    <id>https://beamopilot.com/changelog#change-allocate-serial-numbers-to-shipments</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-allocate-serial-numbers-to-shipments"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Commit specific serialized units to an outbound shipment from the Operations Serial-number tracking panel: select in-stock serials, enter a shipment reference, and allocate. Ship the whole reference at once, release units back to stock, and look up which serials are currently allocated or shipped on a shipment. Managing allocations needs the Inventory manage permission.</summary>
  </entry>
  <entry>
    <title>Damage &amp; shrinkage ledger</title>
    <id>https://beamopilot.com/changelog#change-damage-shrinkage-ledger</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-damage-shrinkage-ledger"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Record inventory loss (damaged, stolen, expired, or short at a count) from the Operations hub's Inventory tab, with an audit and cost trail rolled up by reason. It's a record only: it doesn't change on-hand stock (correct counts through cycle counts), so a logged loss never skews planning or cash. Recording needs the Inventory manage permission.</summary>
  </entry>
  <entry>
    <title>Dictate questions to Ask Pilot by voice</title>
    <id>https://beamopilot.com/changelog#change-dictate-questions-to-ask-pilot-by-voice</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-dictate-questions-to-ask-pilot-by-voice"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A microphone button next to the Ask Pilot message box lets you dictate your question by voice instead of typing: handy hands-free on the warehouse floor. The transcript lands in the box so you can edit it before sending. It appears only in browsers that support speech input.</summary>
  </entry>
  <entry>
    <title>Switch between workspaces from the top bar</title>
    <id>https://beamopilot.com/changelog#change-switch-between-workspaces-from-the-top-bar</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-switch-between-workspaces-from-the-top-bar"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>If your account belongs to more than one workspace, a workspace picker now appears in the command band. Choose a workspace and Beamo Pilot reloads with its data; the choice sticks until you change it. Single-workspace accounts don't see the picker.</summary>
  </entry>
  <entry>
    <title>Custom fields on suppliers, SKUs, and purchase orders</title>
    <id>https://beamopilot.com/changelog#change-custom-fields-on-suppliers-skus-and-purchase-orders</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-custom-fields-on-suppliers-skus-and-purchase-orders"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Capture data specific to your business: owners and admins can define custom fields (text, number, date, single-select, or yes/no, optionally required) on suppliers, SKUs, and purchase orders from Settings → Advanced → Custom fields. Values are edited on each record by whoever can edit it (a supplier's fields appear on the supplier). They're additive metadata and never change planning or cash math.</summary>
  </entry>
  <entry>
    <title>Bulk-import open purchase orders from a CSV</title>
    <id>https://beamopilot.com/changelog#change-bulk-import-open-purchase-orders-from-a-csv</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-bulk-import-open-purchase-orders-from-a-csv"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Onboard a book of open POs from a spreadsheet: one row per line, grouped by a PO reference (po_reference, supplier, sku, units, unit_cost required). Imported POs are created in the planned state so you can review and approve them, and the import is all-or-nothing with a per-line error list. Rounds out CSV import alongside suppliers and bundles.</summary>
  </entry>
  <entry>
    <title>Bulk-import bundles and kits from a CSV</title>
    <id>https://beamopilot.com/changelog#change-bulk-import-bundles-and-kits-from-a-csv</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-bulk-import-bundles-and-kits-from-a-csv"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Define bundles and kits in bulk from a spreadsheet: one row per component (bundle SKU, component SKU, quantity, optional type), grouped by bundle SKU. The Bundles import on the Imports &amp; exports page replaces each bundle's components in one all-or-nothing pass, with a downloadable template and a per-line error list: quantity defaults to 1 and type to virtual.</summary>
  </entry>
  <entry>
    <title>Bulk-import your supplier book from a CSV</title>
    <id>https://beamopilot.com/changelog#change-bulk-import-your-supplier-book-from-a-csv</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-bulk-import-your-supplier-book-from-a-csv"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Onboard or update many suppliers at once from a spreadsheet: the Suppliers import on the Imports &amp; exports page takes contact, minimum order value and quantity, order cadence, and notes. It has a downloadable template, only the supplier column is required, blanks keep the current value, and it's all-or-nothing with a per-line error list: the same email and MOQ validation the supplier form uses runs on every row.</summary>
  </entry>
  <entry>
    <title>Approve or reject spend straight from email</title>
    <id>https://beamopilot.com/changelog#change-approve-or-reject-spend-straight-from-email</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-approve-or-reject-spend-straight-from-email"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>When an approval-chain step activates, every eligible approver is emailed signed Approve and Reject links. Each opens a confirmation page that shows the request before you commit, then records your vote with the same eligibility and one-vote-per-step rules as the in-app queue. Links are time-limited and only work while the request is pending: no login required.</summary>
  </entry>
  <entry>
    <title>Task reassignment notifies the new assignee</title>
    <id>https://beamopilot.com/changelog#change-task-reassignment-notifies-the-new-assignee</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-task-reassignment-notifies-the-new-assignee"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Handing a task to someone now tells them: reassigning a task notifies the new assignee through the in-app bell, just like the original assignment at creation. Assigning a task to yourself stays silent, and status-only updates don't re-notify.</summary>
  </entry>
  <entry>
    <title>Saved views on the Exception workboard and Aged inventory</title>
    <id>https://beamopilot.com/changelog#change-saved-views-on-the-exception-workboard-and-aged-inventory</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-saved-views-on-the-exception-workboard-and-aged-inventory"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Two more list pages let you save the setup you keep rebuilding: the Exception workboard captures its SLA, owner-role, assignee, and workspace filters, and Aged inventory captures its search and sort. Name a view, share it with the team, or mark it default so the page opens ready to work.</summary>
  </entry>
  <entry>
    <title>Audit log console</title>
    <id>https://beamopilot.com/changelog#change-audit-log-console</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-audit-log-console"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The hash-chained canonical audit log gains a dedicated console under Settings → Access: filter every recorded change by action, entity type, actor, and date range, expand a row to see the before/after field values and request ID, and check each entry's chain-integrity badge at a glance.</summary>
  </entry>
  <entry>
    <title>Webhook notifications for Microsoft Teams</title>
    <id>https://beamopilot.com/changelog#change-webhook-notifications-for-microsoft-teams</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-webhook-notifications-for-microsoft-teams"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Webhook subscriptions gain a Microsoft Teams payload format alongside Generic JSON and Slack: deliveries arrive as Adaptive Cards with the event label, a one-line summary, and the event type, ready for a Teams incoming-webhook (Workflows) URL. The Developer lab's payload composer can preview the Teams card shape too.</summary>
  </entry>
  <entry>
    <title>Supplier and RFQ links keep access tokens out of request logs</title>
    <id>https://beamopilot.com/changelog#change-supplier-and-rfq-links-keep-access-tokens-out-of-request-logs</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-and-rfq-links-keep-access-tokens-out-of-request-logs"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="security" label="security"/>
    <summary>New supplier-portal and RFQ invitations carry their no-login capability in the browser fragment, remove it from the visible address immediately, and use stable API paths afterward. Existing emailed links remain compatible, while newly issued tokens no longer appear in Cloud Run or proxy request URLs.</summary>
  </entry>
  <entry>
    <title>Pilot anomaly investigations stay current and reviewable</title>
    <id>https://beamopilot.com/changelog#change-pilot-anomaly-investigations-stay-current-and-reviewable</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-pilot-anomaly-investigations-stay-current-and-reviewable"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Adverse anomalies are no longer swept into blanket acknowledgement, changed evidence refreshes the proposal in the same scan, and approval revalidates the complete statistical snapshot. Bulk review also reports expired items honestly and supports the full 50-item batch without oversized replay keys.</summary>
  </entry>
  <entry>
    <title>Planning, purchasing, and cash controls handle the hard edge cases</title>
    <id>https://beamopilot.com/changelog#change-planning-purchasing-and-cash-controls-handle-the-hard-edge-cases</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-purchasing-and-cash-controls-handle-the-hard-edge-cases"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Transfer planning now preserves feasible alternate-origin assignments without a search cutoff, supplier-wave freight uses identical cent rounding and complete solver bounds, shipment updates keep purchase-order state and SKU lineage consistent, and cash/profitability projections use only the right finalized settlement evidence.</summary>
  </entry>
  <entry>
    <title>Concurrent updates no longer revive stale operational state</title>
    <id>https://beamopilot.com/changelog#change-concurrent-updates-no-longer-revive-stale-operational-state</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-concurrent-updates-no-longer-revive-stale-operational-state"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Connector disconnects, carrier polls, outbound webhooks, governed alerts, onboarding, queue retries, web filters, mobile push registration, and offline putaway reconciliation now lock or sequence the authoritative state before publishing a result. Late work cannot overwrite a newer decision or silently disappear.</summary>
  </entry>
  <entry>
    <title>Graded return intake on the warehouse floor</title>
    <id>https://beamopilot.com/changelog#change-graded-return-intake-on-the-warehouse-floor</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-graded-return-intake-on-the-warehouse-floor"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The mobile Operations tab gains a graded-return station: scan a returned unit's barcode, grade its condition (A–F), pick a reason, and submit. Disposition rules run on intake so the handheld immediately shows where the unit goes (restock, refurbish, or scrap) and intakes queue offline and sync when connectivity returns.</summary>
  </entry>
  <entry>
    <title>Morning briefing and Ask Pilot, natively on mobile</title>
    <id>https://beamopilot.com/changelog#change-morning-briefing-and-ask-pilot-natively-on-mobile</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-morning-briefing-and-ask-pilot-natively-on-mobile"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The mobile API gains first-class briefing and assistant endpoints (GET /mobile/briefing and POST /mobile/assistant/ask), with the assistant gated by your real workspace-role permissions. Briefing pushes now carry their own notification category with an 'Open briefing' action that deep-links straight to the Pilot screen.</summary>
  </entry>
  <entry>
    <title>Kitting &amp; assembly work orders</title>
    <id>https://beamopilot.com/changelog#change-kitting-assembly-work-orders</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-kitting-assembly-work-orders"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Physically pre-assemble kits with work orders: pick a bundle, warehouse, and quantity; the order snapshots the BOM at creation and moves draft → released → completed. Completing runs the build as one availability-checked transaction (components consumed, finished bundles stocked) and a short component aborts the whole build with nothing touched.</summary>
  </entry>
  <entry>
    <title>Print labels to thermal printers (ZPL)</title>
    <id>https://beamopilot.com/changelog#change-print-labels-to-thermal-printers-zpl</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-print-labels-to-thermal-printers-zpl"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every generated label (GS1, FNSKU, SSCC carton/pallet, bin, and carton labels) now renders as ready-to-print ZPL for 4x2&quot; thermal printers, with a plain-text fallback. Download from the label list on the web, or fetch from a warehouse handheld via the mobile API for on-the-floor printing. SSCC labels emit proper GS1-128 with FNC1 and the (00) application identifier.</summary>
  </entry>
  <entry>
    <title>Supplier ASNs reconcile against warehouse receiving</title>
    <id>https://beamopilot.com/changelog#change-supplier-asns-reconcile-against-warehouse-receiving</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-asns-reconcile-against-warehouse-receiving"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>When a supplier marks an order shipped, each ASN line now registers as an expected-inbound record in the reconciliation engine, matched to its shipment line. Received-scan truth then reconciles against what the supplier said they shipped, and expected records can never fabricate a receipt, so the ASN only ever provides the &quot;expected&quot; side of the comparison.</summary>
  </entry>
  <entry>
    <title>Ask Pilot answers governed-metric questions by name</title>
    <id>https://beamopilot.com/changelog#change-ask-pilot-answers-governed-metric-questions-by-name</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-ask-pilot-answers-governed-metric-questions-by-name"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Ask a question that names any certified governed metric (&quot;show me net revenue for the last 30 days&quot;) and Ask Pilot runs the vetted definition from your Analytics catalog, formats the total by the metric's unit, and cites the governed metric it used. Strictly catalog-bounded: draft metrics never resolve and no SQL is ever generated from free text.</summary>
  </entry>
  <entry>
    <title>Bulk review for Pilot's proposal queue</title>
    <id>https://beamopilot.com/changelog#change-bulk-review-for-pilot-s-proposal-queue</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-bulk-review-for-pilot-s-proposal-queue"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A new bulk-review endpoint confirms or rejects up to 50 copilot proposals in one request, with each item decided independently so a stale proposal never sinks the batch. Home's 'Approve all' routine-upkeep button now uses it: one round trip instead of one per item.</summary>
  </entry>
  <entry>
    <title>Pilot proposes anomaly investigations</title>
    <id>https://beamopilot.com/changelog#change-pilot-proposes-anomaly-investigations</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-pilot-proposes-anomaly-investigations"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Adverse metric anomalies now surface as per-anomaly copilot proposals: approving one records a statistical drill-down (baseline, z-score, and the trailing two weeks of the metric) and marks the anomaly and its linked alert reviewed. The worst readings get a documented look instead of a bulk dismissal.</summary>
  </entry>
  <entry>
    <title>Nightly anomaly sweep covers governed metrics</title>
    <id>https://beamopilot.com/changelog#change-nightly-anomaly-sweep-covers-governed-metrics</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-nightly-anomaly-sweep-covers-governed-metrics"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Certified governed metrics now get a daily KPI snapshot and are included in the nightly statistical anomaly sweep. By default unusual moves are recorded without paging; add a KPI target with a direction and adverse moves raise inbox alerts exactly like built-in metrics.</summary>
  </entry>
  <entry>
    <title>Alert rules can watch your governed metrics</title>
    <id>https://beamopilot.com/changelog#change-alert-rules-can-watch-your-governed-metrics</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-alert-rules-can-watch-your-governed-metrics"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Threshold alert rules now accept any certified governed metric from the Analytics semantic layer alongside the built-in registry: pick it in the same rule form (marked '(governed)'), and it fires, cools down, and fans out to webhooks exactly like built-in metrics. Only certified metrics qualify, so alerts always sit on vetted definitions.</summary>
  </entry>
  <entry>
    <title>Forecast accuracy is now a tracked, alertable metric</title>
    <id>https://beamopilot.com/changelog#change-forecast-accuracy-is-now-a-tracked-alertable-metric</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-forecast-accuracy-is-now-a-tracked-alertable-metric"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Backtested forecast error (MAPE over 90 days) and forecast bias magnitude now register as first-class metrics: they appear in KPI tracking with daily history, can drive threshold alert rules, and are watched by the nightly anomaly sweep, so a forecast that quietly degrades raises its hand.</summary>
  </entry>
  <entry>
    <title>Markdown prices respect a margin floor</title>
    <id>https://beamopilot.com/changelog#change-markdown-prices-respect-a-margin-floor</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-markdown-prices-respect-a-margin-floor"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A new 'Markdown margin floor' setting (a percentage over landed cost) keeps clearance and markdown prices from dipping below cost: recommended and activated prices are held at the floor, held items are flagged, and floor-bound activations land in the campaign event log. Off by default.</summary>
  </entry>
  <entry>
    <title>Inventory valuation report with QuickBooks journal writeback</title>
    <id>https://beamopilot.com/changelog#change-inventory-valuation-report-with-quickbooks-journal-writeback</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-inventory-valuation-report-with-quickbooks-journal-writeback"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A new Inventory valuation view (Cash → Documents) values on-hand inventory at landed cost, FIFO from the newest receipt cost layers, with a labeled weighted-average fallback, with per-SKU detail, CSV export, and a subscribable scheduled report. Connect QuickBooks, map an inventory-asset and offset account, and record the valuation as an adjusting journal entry; repeated postings record only the delta.</summary>
  </entry>
  <entry>
    <title>Cash forecast reserves for refunds at your real refund rate</title>
    <id>https://beamopilot.com/changelog#change-cash-forecast-reserves-for-refunds-at-your-real-refund-rate</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cash-forecast-reserves-for-refunds-at-your-real-refund-rate"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Projected marketplace payouts now include a refund reserve derived from your settled payout history: once three or more settled batches exist, each projected payout deducts refunds at the observed rate: net of any per-SKU returns allowance already priced in, so nothing is double-counted. Cash runway stops looking rosier than your actual refund experience.</summary>
  </entry>
  <entry>
    <title>Capture supplier early-pay discounts</title>
    <id>https://beamopilot.com/changelog#change-capture-supplier-early-pay-discounts</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-capture-supplier-early-pay-discounts"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Record an early-pay discount on any supplier's payment terms (percentage plus days-before-due window). The payable-payments list annotates each payment with its savings and deadline and floats capturable discounts to the top, and the supplier-payables view totals the early-pay savings still available.</summary>
  </entry>
  <entry>
    <title>Cash budget shows budget vs. actuals per week</title>
    <id>https://beamopilot.com/changelog#change-cash-budget-shows-budget-vs-actuals-per-week</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cash-budget-shows-budget-vs-actuals-per-week"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The Cash budget tab now compares each week's spend limit with the cash that actually went out plus what's already scheduled: with remaining budget, an on-track / at-risk / over-budget status per week, and the top spending categories driving it. Reachable via the new budget-variance API as well.</summary>
  </entry>
  <entry>
    <title>Promotions can model cannibalization and halo, and safety stock learns real lead-time variance</title>
    <id>https://beamopilot.com/changelog#change-promotions-can-model-cannibalization-and-halo-and-safety-stock-learns-re</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-promotions-can-model-cannibalization-and-halo-and-safety-stock-learns-re"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Two forecasting upgrades. Demand events now carry related-SKU affinities: mark which SKUs a promotion cannibalizes (negative %) or lifts along with it (positive %), and planning adjusts those SKUs' demand for the event window with the same confidence weighting as the promotion itself. Separately, lead-time calibration now measures the true standard deviation of each supplier's observed lead times and feeds it to the statistical safety-stock model, replacing the coarser spread proxy whenever enough deliveries exist, so buffer stock reflects how your suppliers actually behave.</summary>
  </entry>
  <entry>
    <title>Channel allocation can now chase profit, not just cover</title>
    <id>https://beamopilot.com/changelog#change-channel-allocation-can-now-chase-profit-not-just-cover</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-channel-allocation-can-now-chase-profit-not-just-cover"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The channel allocation optimizer gained a third strategy: Maximize profit. It splits a SKU's pooled units across channels weighted by each channel's real profit throughput, demand velocity times the contribution margin per unit measured from your settlement-backed profitability facts, so more stock flows to the channels that actually earn. Loss-making channels get nothing, each row explains its share, and SKUs without margin history fall back to balanced cover with a clear note.</summary>
  </entry>
  <entry>
    <title>Planning now spots dual-sourcing opportunities</title>
    <id>https://beamopilot.com/changelog#change-planning-now-spots-dual-sourcing-opportunities</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-planning-now-spots-dual-sourcing-opportunities"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>When a second supplier publishes cheaper price tiers for a SKU you're about to reorder, the recommendation now flags the best split-order opportunity, how many units to move to the alternate, at what unit cost, the estimated savings after the cash hurdle, and the lead-time comparison, right in the recommendation's explainability. It's advisory: your assigned supplier and quantities never change without you.</summary>
  </entry>
  <entry>
    <title>Order quantities can now optimize your ordering cadence, EOQ-style</title>
    <id>https://beamopilot.com/changelog#change-order-quantities-can-now-optimize-your-ordering-cadence-eoq-style</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-order-quantities-can-now-optimize-your-ordering-cadence-eoq-style"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Tell Pilot what one supplier order costs you to place (admin, freight minimums, receiving overhead) and the order-economics pass weighs that alongside price breaks: a larger buy that means fewer orders per year earns its avoided per-order cost as savings, judged against the same holding-cost and cash-hurdle discipline as before. Every candidate quantity's cadence savings show up in the recommendation's explainability, and leaving the cost at zero keeps today's behavior exactly.</summary>
  </entry>
  <entry>
    <title>Cost of goods sold is now real FIFO consumption, not an average</title>
    <id>https://beamopilot.com/changelog#change-cost-of-goods-sold-is-now-real-fifo-consumption-not-an-average</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cost-of-goods-sold-is-now-real-fifo-consumption-not-an-average"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Profitability now costs every sold unit against your actual receipt history: units consume receipt cost layers oldest-first at each layer's true landed cost, producing a defensible period COGS with a full daily consumption ledger. Workspaces without receipt-level history keep the weighted-average basis, clearly labeled, and every margin number records which costing basis backed it.</summary>
  </entry>
  <entry>
    <title>Scheduled reports now land in your inbox as CSV or PDF</title>
    <id>https://beamopilot.com/changelog#change-scheduled-reports-now-land-in-your-inbox-as-csv-or-pdf</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-scheduled-reports-now-land-in-your-inbox-as-csv-or-pdf"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every scheduled report (replenishment summary, AP aging, supplier scorecard, KPI scorecard) can now email its snapshot straight to named subscribers with the data attached as CSV, PDF, or both, on the report's daily, weekly, or monthly cadence. Delivery is best-effort per recipient (one bad inbox never blocks the rest), every run records who got it, and webhook delivery keeps working exactly as before.</summary>
  </entry>
  <entry>
    <title>The what-if sandbox now saves scenarios and compares them side by side</title>
    <id>https://beamopilot.com/changelog#change-the-what-if-sandbox-now-saves-scenarios-and-compares-them-side-by-side</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-what-if-sandbox-now-saves-scenarios-and-compares-them-side-by-side"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The planning scenario sandbox grew from six presets into a full what-if workbench: eight presets (delayed receiving and marketplace outage joined the list), free-form demand, lead-time, safety-stock, and cash levers, a pin-to-compare table that lines scenarios up side by side, and named saved scenarios you can rerun or share with the workspace. Every run stays a dry run (nothing commits) and committed what-if runs can never masquerade as the live plan.</summary>
  </entry>
  <entry>
    <title>Set different stockout-protection targets for A-items and the C-tail</title>
    <id>https://beamopilot.com/changelog#change-set-different-stockout-protection-targets-for-a-items-and-the-c-tail</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-set-different-stockout-protection-targets-for-a-items-and-the-c-tail"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Safety stock can now target a different service level per product class. A new Settings matrix assigns each ABC/XYZ cell (profit importance × demand stability) its own service level (protect steady top earners at 99% while relaxing the erratic long tail) and the planning engine sizes every SKU's safety stock from its own class, using the previous plan's classification. Blank cells and first-ever runs keep the global target, and each recommendation's explainability shows exactly which class and service level applied.</summary>
  </entry>
  <entry>
    <title>Every marketplace now reports its real fees and payouts: not just Amazon</title>
    <id>https://beamopilot.com/changelog#change-every-marketplace-now-reports-its-real-fees-and-payouts-not-just-amazon</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-marketplace-now-reports-its-real-fees-and-payouts-not-just-amazon"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Connected eBay, TikTok Shop, Walmart, and Shopify stores now pull their actual settlements automatically: eBay Finances payouts, TikTok Shop statements, Walmart payment-reconciliation reports, and Shopify Payments payouts all flow into the same settlement ledger as Amazon. The cash forecast's inflows now include every marketplace's payouts (labeled by marketplace), the Finance settlements table shows which marketplace each payout came from, and SKU profitability uses each channel's real fees where its settlements provide them: per-SKU on Walmart and eBay, payout-level on TikTok and Shopify.</summary>
  </entry>
  <entry>
    <title>See what every SKU and channel actually earns</title>
    <id>https://beamopilot.com/changelog#change-see-what-every-sku-and-channel-actually-earns</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-see-what-every-sku-and-channel-actually-earns"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every SKU 360 page now has a Profitability section: contribution margin after marketplace fees, refunds, and landed cost, broken down by channel over the last 90 days, with ad spend and margin-after-ads shown separately. Amazon fees come from real settlement reports when available (a badge shows whether numbers are settlement actuals or estimates). The same daily margin facts appear in Analytics as a new profitability dataset: chart contribution margin by channel or SKU, save it as a governed metric, and a scheduled background job keeps it fresh.</summary>
  </entry>
  <entry>
    <title>The live demo now runs deeper: every screen, drill-in, and history filled with a coherent business</title>
    <id>https://beamopilot.com/changelog#change-the-live-demo-now-runs-deeper-every-screen-drill-in-and-history-filled-w</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-live-demo-now-runs-deeper-every-screen-drill-in-and-history-filled-w"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The one-click test drive got a full overhaul. Its sample workspace now carries 90 days of multi-channel history, a prior planning run you can compare against, supplier health scores backed by real on-time and invoice evidence (one deliberately unreliable supplier included), a live receiving queue, warehouse transfers in every state, landed-cost documents, freight tracking, supplier contracts and price breaks, Pilot memories, and decided approval history, so every tab and drill-in shows the product working, not an empty state. The demo also re-anchors its dates automatically, so charts always run to today and nothing reads stale.</summary>
  </entry>
  <entry>
    <title>Autopilot now runs twelve parts of the workflow: you set the policy, Pilot does the clicking</title>
    <id>https://beamopilot.com/changelog#change-autopilot-now-runs-twelve-parts-of-the-workflow-you-set-the-policy-pilot</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-autopilot-now-runs-twelve-parts-of-the-workflow-you-set-the-policy-pilot"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The Automation hub grew a Domains tab covering twelve independent parts of the workflow, replenishment approval, PO dispatch, inventory allocation, warehouse transfers, invoice hold release, routine copilot confirmations, feedback auto-apply, markdown campaigns, cycle counts, landed-cost refresh and reconciliation, and stale-connector refresh. Each domain is dialed independently to Off, Review, Shadow, or Auto, with its own per-item cap, daily total cap, daily action count cap, confidence floor, and &quot;human-confirm the first N runs&quot; training wheels; arming a money-touching domain to Auto walks you through its specific risk before confirming. A circuit breaker holds a domain that starts failing until you clear it. The new Activity tab shows everything Pilot has auto-executed across every domain, grouped by day; the pre-existing supplier agent keeps its own Review and Rules tabs unchanged. Workspaces with an armed domain now show an &quot;On autopilot&quot; notice next to the matching manual controls, the manual path never goes away, it just tucks behind a &quot;Run manually&quot; fold.</summary>
  </entry>
  <entry>
    <title>Busy screens now open with just the decision, not everything at once</title>
    <id>https://beamopilot.com/changelog#change-busy-screens-now-open-with-just-the-decision-not-everything-at-once</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-busy-screens-now-open-with-just-the-decision-not-everything-at-once"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A decluttering pass across the app's densest screens. The supplier agent's review panel now opens with the essentials, channel, confidence, dry-run status, blockers, order lines, and the editable draft, while decision evidence, screenshots, execution attempts, the message preview, and reconciliation collapse into clearly-marked expandable sections (which finally show an open/close chevron), and the panel scrolls into view when you open an action. The SKU 360 page opens with the hero, key numbers, and demand/inbound picture; the planning-inputs editor, commercial-signals table, and channel mapping fold away until you need them, and deep links still open the right section automatically. Procurement's decision packet leads with its recommendation and cash numbers, with the rationale, allocation, simulation, and approval tables one click away. Decision rooms keep notes and approvals front and center with watchers and files tucked behind counts.</summary>
  </entry>
  <entry>
    <title>Home decisions are grouped by what you need to do</title>
    <id>https://beamopilot.com/changelog#change-home-decisions-are-grouped-by-what-you-need-to-do</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-home-decisions-are-grouped-by-what-you-need-to-do"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Needs your OK is now one prioritized decision center: Act here for approvals you can complete on Home, Open reviews for decisions that need the full record, and Needs follow-up for blockers with a recovery path. Every card uses the same status-and-impact layout, action labels say exactly what happens, long routed queues keep an honest full count, and keyboard focus advances after you finish an item.</summary>
  </entry>
  <entry>
    <title>A guided tour on your first visit</title>
    <id>https://beamopilot.com/changelog#change-a-guided-tour-on-your-first-visit</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-guided-tour-on-your-first-visit"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>New accounts (and the test drive) now open with a short interactive tour: eight quick steps that spotlight Home, Planning, Buying, Cash, and Ask Pilot, then get out of your way. Skip it any time, or replay it from the account menu.</summary>
  </entry>
  <entry>
    <title>A calmer test drive</title>
    <id>https://beamopilot.com/changelog#change-a-calmer-test-drive</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-calmer-test-drive"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The test-drive workspace now seeds a focused catalog of 14 products with fewer sample orders, invoices, and payments: screens read like a tidy, real business instead of a wall of demo data.</summary>
  </entry>
  <entry>
    <title>Home is one page now: no tabs, and playbooks are a single card</title>
    <id>https://beamopilot.com/changelog#change-home-is-one-page-now-no-tabs-and-playbooks-are-a-single-card</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-home-is-one-page-now-no-tabs-and-playbooks-are-a-single-card"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Home dropped its Autopilot / Signals / Workspaces tabs, it's one scroll now: a headline verdict, an optional &quot;Finish setup&quot; checklist while onboarding isn't complete, a one-line notice if core services need a look, then &quot;Needs your OK&quot; and &quot;Needs your help&quot;. Playbooks (the multi-step workflows Pilot proposes, like a system-recovery run) used to render as a nested step list with a button per step; each one is now a single card, Confirm starts it or confirms just its current step, Dismiss cancels the whole playbook. A proposal or playbook that expired before you got to it no longer lingers as a stuck, unconfirmable card, it's dropped from the queue automatically. Routine housekeeping (marking alerts seen, refreshing a stale sync) is now mostly confirmed by Pilot itself with no click from you; whatever's left collapses into one &quot;Routine upkeep&quot; row with a single approve-everything button. At the time this shipped, every button on the page was just Confirm, Dismiss, or OK all (the labels have since been renamed, today they read Approve &amp; run, Confirm current step, Cancel playbook, and Approve all). The operator tools that used to live on Home's Signals tab, acknowledging and reconciling exceptions, previewing or running a self-healing repair, and the cross-workspace Attention digest, moved to Settings → System, where equivalent or better versions already lived; the old Workspaces launchpad tab is gone since it just duplicated the sidebar.</summary>
  </entry>
  <entry>
    <title>Restock recommendations get a lot smarter</title>
    <id>https://beamopilot.com/changelog#change-restock-recommendations-get-a-lot-smarter</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-restock-recommendations-get-a-lot-smarter"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every recommendation now draws on signals the platform already collected but never used: buy-box loss and ended markdowns are corrected out of the demand history, ad-dependent demand is flagged when spend trends shift, lead times auto-calibrate from actual PO receiving history, a detected upcoming season can pre-build cover ahead of it, order quantities can bump to a supplier's price break when the savings clearly beat the extra holding cost, buys are capped to a known Amazon FBA restock limit, and unreleased blanket-PO commitments are netted against new buys instead of duplicated. Every effect is visible in the recommendation's &quot;Why this buy matters&quot; explanation and toggleable under Settings → Planning intelligence.</summary>
  </entry>
  <entry>
    <title>Sign in and sign up with Google</title>
    <id>https://beamopilot.com/changelog#change-sign-in-and-sign-up-with-google</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sign-in-and-sign-up-with-google"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>One-click Google sign-in is live on the login and signup pages. New accounts get their workspace created automatically, and existing accounts link their Google identity on first use.</summary>
  </entry>
  <entry>
    <title>Home loads in a fraction of the time</title>
    <id>https://beamopilot.com/changelog#change-home-loads-in-a-fraction-of-the-time</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-home-loads-in-a-fraction-of-the-time"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Opening the app used to chain four round trips before anything useful appeared, sign-in check, then a legal check, then an onboarding check, and only then the actual page data, and if the service had been idle, a cold server start added many more seconds on top. That could stretch a first load past fifteen seconds. Now the sign-in check carries the legal and onboarding answers with it, so the page data starts loading immediately after one round trip, and a server instance is kept warm so there's no cold start to wait through. The result: Home appears in a small fraction of the time, especially on the first visit of the day.</summary>
  </entry>
  <entry>
    <title>Screens open calm, links land where they point, and dead ends explain themselves</title>
    <id>https://beamopilot.com/changelog#change-screens-open-calm-links-land-where-they-point-and-dead-ends-explain-them</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-screens-open-calm-links-land-where-they-point-and-dead-ends-explain-them"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A walkthrough of the five core operator jobs (approve buys, receive stock, check cash, handle an alert, explain a SKU) drove a cleanup of everything that stalled them. Buy and Operations no longer auto-load full detail consoles for orders you never clicked: pages open on the queue, and details appear when you pick a row. Planning's &quot;Open in Buy&quot; now lands on the tab that actually holds the buy, Home's &quot;Review proposal&quot; scrolls the approval card into view, and an empty Buy plan tab says when approvals are waiting one tab over. A plan you build from the Buy tab is built from the run on screen, so it no longer flags itself out of date seconds after you make it. Approve dialogs say what really happens (you dispatch to the supplier as a separate step), expired Home items link to where the work can still be done, repeat bell notifications collapse into one row, and receiving gained a visible &quot;Receive units&quot; button plus a scanner message that explains when an order is approved but not yet placed. The Cash budget page keeps one primary action instead of two identical buttons, System's overview says what needs attention once instead of twice, and SKU 360 now headlines the same demand number the plan actually uses.</summary>
  </entry>
  <entry>
    <title>Suppliers and Supplier Health are one tab now</title>
    <id>https://beamopilot.com/changelog#change-suppliers-and-supplier-health-are-one-tab-now</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-suppliers-and-supplier-health-are-one-tab-now"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>&quot;Who are my suppliers&quot; and &quot;can I trust them&quot; were two separate tabs about the same subject. They're now one: the supplier directory is a health table: every row shows the supplier's 0–100 health score, tier, trend arrow, and 90-day on-time rate, with at-risk suppliers sorted to the top and the one-click &quot;Route to review&quot; action right on the row. Selecting a supplier opens everything else about it below: a reliability panel (worst-case delay, delivery risk, invoice mismatches), then contacts, payment terms, and freight rules. Old /supplier-health links redirect automatically, and teammates without editing access still see the health view they had before. One less tab to learn, nothing lost.</summary>
  </entry>
  <entry>
    <title>Home's decision queue now reads like a person wrote it, and routine items OK in one click</title>
    <id>https://beamopilot.com/changelog#change-home-s-decision-queue-now-reads-like-a-person-wrote-it-and-routine-items</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-home-s-decision-queue-now-reads-like-a-person-wrote-it-and-routine-items"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Pilot's proposals used to read like machine output, &quot;Acknowledge 2 metric anomaly(ies)&quot;, &quot;Refresh stale shopify sync&quot;, &quot;Approve place_order&quot;, each followed by a line of audit metadata (&quot;Ready: … still actionable · Evidence: 2 records · Expires Jul 10, 3:11 AM&quot;). Every proposal is now written in plain language: unusual readings name the metric that moved, sync refreshes say &quot;last synced 3 days ago&quot; with the channel's real name, supplier approvals show the amount as &quot;$1,250&quot;, and held invoices state their combined variance. The metadata line only appears when something actually needs attention (a partial or out-of-date proposal). And instead of twenty equal-weight cards, low-risk housekeeping, marking alerts as seen, assigning waiting issues, refreshing a stale connection, collapses into one &quot;Routine upkeep&quot; strip with a one-click approve-all button (labelled &quot;OK all&quot; at the time; today it reads &quot;Approve all&quot;), so the headline count and the full cards are reserved for decisions that deserve your attention.</summary>
  </entry>
  <entry>
    <title>The supplier agent is now three simple tabs: Review, Rules, Activity</title>
    <id>https://beamopilot.com/changelog#change-the-supplier-agent-is-now-three-simple-tabs-review-rules-activity</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-supplier-agent-is-now-three-simple-tabs-review-rules-activity"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Agent workspace used to be one long page: the review queue, a mode banner, rollout stages, readiness grids, health stats, auto-send rules, and channel accounts all stacked together. It's now three tabs that each answer one question, Review (approve or reject what's waiting), Rules (what the agent may do on its own: auto-send rules, spend caps, and channels), and Activity (what it sent recently, plus any safety pauses). The agent's mode, Live, Review-only, or Paused, is stated once, in the header next to the pause switch, and the old wall of readiness metrics is one plain sentence: what would send on its own and what would still wait for you. Home got calmer too: the tile band that repeated the queue counts is gone, and a health notice appears only when core services actually need a look.</summary>
  </entry>
  <entry>
    <title>A Feedback tab: send product feedback in seconds, auto-sorted by AI</title>
    <id>https://beamopilot.com/changelog#change-a-feedback-tab-send-product-feedback-in-seconds-auto-sorted-by-ai</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-feedback-tab-send-product-feedback-in-seconds-auto-sorted-by-ai"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>There's a new Feedback tab in the Settings hub where anyone on your team can tell us what's working and what isn't. Pick what kind of note it is (something's broken, an idea, praise, a question) write it, and send; it saves in a couple of seconds and goes straight to the product team. A small, fast AI model then auto-categorizes every note (category, priority, sentiment, a one-line summary, and themes), so a long message becomes something the team can scan at a glance. Right after you submit, you'll see how Pilot filed it. Owners and admins get an “All feedback” inbox to read everything, filter by category or status, move items from New through Resolved, and re-run the AI on any note. Every submission is stored in your own workspace.</summary>
  </entry>
  <entry>
    <title>Home opens fast, and the decision list loads in place instead of popping in</title>
    <id>https://beamopilot.com/changelog#change-home-opens-fast-and-the-decision-list-loads-in-place-instead-of-popping-</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-home-opens-fast-and-the-decision-list-loads-in-place-instead-of-popping-"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The Home tab used to show a stalled &quot;Checking for decisions…&quot; line, flash a partial count, and then (many seconds later) pop the real approvals in with no loading state. Now Home loads its decision queue up front and serves it from storage on repeat visits instead of re-scanning every part of your account on every open, so it comes up quickly. While it's still working you see a proper loading placeholder shaped like the real cards (not a blank line), and the &quot;Needs your OK&quot; number holds a dash until it's final rather than jumping from one figure to another. The daily briefing build got the same speed-up, so the first open each morning is quicker too.</summary>
  </entry>
  <entry>
    <title>The mobile app, your emails, and the docs all speak the same plain language</title>
    <id>https://beamopilot.com/changelog#change-the-mobile-app-your-emails-and-the-docs-all-speak-the-same-plain-languag</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-mobile-app-your-emails-and-the-docs-all-speak-the-same-plain-languag"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The words you see outside the web app caught up with the words inside it. The mobile app's screens, buttons, and section notes now use the same plain, sentence-case language as the web, &quot;Refresh insights&quot;, &quot;Supplier agent queue&quot;, &quot;receiving issues&quot;, supplier (never vendor), across every workspace. Emails and push notifications got the same treatment: alert reminders say &quot;Reminder 2 of 3, still needs attention&quot; instead of &quot;⏫ Escalation #2 (unacknowledged)&quot;, incident emails read like a person wrote them with real dates instead of machine timestamps, and notifications never show you a raw ID or an internal code. The documentation was reconciled line-by-line with the current product, and another two dozen wordy explanations were cut to their point. The buy table's &quot;Wave&quot; column is now &quot;Order by&quot;, it always showed a date.</summary>
  </entry>
  <entry>
    <title>Half the words, and screens that show only what you need</title>
    <id>https://beamopilot.com/changelog#change-half-the-words-and-screens-that-show-only-what-you-need</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-half-the-words-and-screens-that-show-only-what-you-need"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every screen's intro copy was cut to what it actually adds: about 180 words removed from the most-visited pages, same information. Dense panes slimmed down: a purchase order's 17 detail sections are now three groups (order contents, supplier communication, money), bulk-action buttons appear only when something is selected, zero-value tiles render quietly, approval panels hide their machinery when there's nothing to approve, and the 17 webhook event checkboxes fold until you need them. Also fixed: standing alerts no longer duplicate on every planning cycle, relative times like &quot;5m ago&quot; keep ticking while a panel is open, filtered views say they're filtered with one click back to everything, the notification badge is readable again, and the top bar works at phone widths.</summary>
  </entry>
  <entry>
    <title>One &quot;Cash on hand&quot;: Planning, Buy, and Cash budget now tell the same cash story</title>
    <id>https://beamopilot.com/changelog#change-one-cash-on-hand-planning-buy-and-cash-budget-now-tell-the-same-cash-sto</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-one-cash-on-hand-planning-buy-and-cash-budget-now-tell-the-same-cash-sto"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>&quot;Can I afford this?&quot; now gets one answer everywhere. The cash input is called &quot;Cash on hand&quot; on every tab (it was &quot;Current cash&quot; in some places), and instead of starting blank it prefills from your QuickBooks bank balance when connected (or from the last cash figure you typed) with a hint that says exactly where the number came from. Planning runs launched with a typed cash figure now seed their linked cash forecast from that same figure instead of an older one, the approval wave reports your typed cash as &quot;Cash now&quot; instead of falling back to the spending cap, the Buy plan's verdict says what cash it started from and when the plan was made, and refreshing a buy plan without a cash figure now explains what to enter instead of doing nothing.</summary>
  </entry>
  <entry>
    <title>Numbers you can trust, buys that stay bought, and typed work that survives</title>
    <id>https://beamopilot.com/changelog#change-numbers-you-can-trust-buys-that-stay-bought-and-typed-work-that-survives</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-numbers-you-can-trust-buys-that-stay-bought-and-typed-work-that-survives"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>A deep behavioral pass driven end-to-end in a real browser. The counts now tell one story: Home's &quot;N things need you today&quot; comes from the real total (it was computed from the first page of items), superseded planning runs no longer stack duplicate &quot;approve this&quot; cards on Home, and Home, Alerts, and the Agent tab now agree on what's open. Approving a buy stopped creating phantom work, a freshly created purchase order no longer spawns a receiving problem, a $0 invoice on payment hold, or deposits that are born overdue. The Buy page can't invite a double order anymore: buys that already became purchase orders show &quot;Ordered, view PO&quot; instead of a live &quot;Create purchase order&quot; button, plans from older runs are labeled instead of silently shown, and clicking a proposal link never silently selects a different proposal. Placing an order now asks for confirmation just like approving one. Typed work survives a tab peek, staged dock receipts, supplier profile edits, and agent rules are all kept as drafts until saved. Bell notifications take you to the thing they mention, expired playbooks stop pinning the top of your queue, and muted text and status badges were darkened to meet accessibility contrast in both themes.</summary>
  </entry>
  <entry>
    <title>Errors speak plainly, empty screens explain themselves, and dates stop lying</title>
    <id>https://beamopilot.com/changelog#change-errors-speak-plainly-empty-screens-explain-themselves-and-dates-stop-lyi</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-errors-speak-plainly-empty-screens-explain-themselves-and-dates-stop-lyi"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>When something fails, you now read English instead of machine output: a lost connection says &quot;Could not connect. Check your internet connection and try again.&quot; instead of the browser's raw &quot;Failed to fetch&quot;, an expired session takes you back to sign-in instead of erroring on every click, double-clicks get a plain &quot;already processed&quot; note, and stale-tab errors like &quot;Cannot transition purchase order from approved to received&quot; now read &quot;This purchase order is approved, so it can't move to received, refresh the page.&quot; Empty screens explain what will appear and how to make it happen, a search with no matches offers &quot;Clear search&quot; instead of falsely declaring everything stocked, and a brand-new alert inbox no longer talks about filters you never set. Supplier-facing pages showed ship dates one day early in US timezones (fixed), raw dates like &quot;2026-09-01&quot; now read &quot;Sep 1, 2026&quot; everywhere, and timestamps drop the seconds. One word for one thing: the same button is &quot;Update now&quot; everywhere, day-to-day problems are &quot;issues&quot;, suppliers are never &quot;vendors&quot;, and rejecting a spend request now asks for confirmation just like approving one.</summary>
  </entry>
  <entry>
    <title>Every action answers back, numbers read at a glance, and setup speaks merchant</title>
    <id>https://beamopilot.com/changelog#change-every-action-answers-back-numbers-read-at-a-glance-and-setup-speaks-merc</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-action-answers-back-numbers-read-at-a-glance-and-setup-speaks-merc"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Clicking Approve or Confirm now always tells you what happened: Home decisions confirm in place (&quot;Confirmed, Pilot will proceed with this action.&quot;), the agent queue says what approving means, recording a receipt says &quot;Recorded, 40 units received&quot; instead of silently resetting the form to a warning, and one failed action no longer hides the whole decision queue behind a wrong error. Numbers lost their noise, &quot;51.87&quot; demand is &quot;51.9&quot;, &quot;11.0 days&quot; is &quot;11&quot;, big totals drop the cents on summary tiles, zeros that mean &quot;nothing here&quot; render quietly, and thousands get separators everywhere. The Setup wizard now explains where to find your TikTok, eBay, and Walmart credentials, talks about &quot;spreadsheet imports&quot; instead of &quot;CSV fallbacks&quot;, names your legal documents properly (a broken link that opened the wrong document is fixed), and the Home launch checklist says &quot;Database setup&quot; and &quot;Amazon connection&quot; instead of &quot;Supabase config&quot; and &quot;Amazon SP-API&quot;. The command palette's groups match the app's words (&quot;Issues&quot;, &quot;Purchase orders&quot;), and all of this pass's new phrasing ships translated in every supported language.</summary>
  </entry>
  <entry>
    <title>Cleaner sign-in, supplier pages that speak supplier, and one app in 22 languages</title>
    <id>https://beamopilot.com/changelog#change-cleaner-sign-in-supplier-pages-that-speak-supplier-and-one-app-in-22-lan</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cleaner-sign-in-supplier-pages-that-speak-supplier-and-one-app-in-22-lan"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The sign-in page lost its stray double &quot;or&quot; divider, hides social sign-in buttons that aren't set up instead of showing four dead ones, says &quot;Verification code&quot; instead of &quot;MFA Code&quot; (with a hint about your authenticator app), and drops signup jargon like &quot;verified workspace&quot;. The pages your suppliers see now talk to them like people: &quot;Waiting for your confirmation&quot; instead of an internal status code, &quot;Attach your invoice for this order&quot; instead of &quot;invoice evidence for matching&quot;, real dates in RFQ emails instead of computer timestamps, and plain field names like &quot;Invoice number&quot; and &quot;Payment due date&quot;. The mobile app now uses the same names as the web (Buy, Ask Pilot, Cash budget, Setup, Results) so nothing changes meaning between your desk and the warehouse floor. Buttons and labels across the whole app now share one sentence-case style (&quot;Save policy&quot;, &quot;Record partial receipt&quot;), pricing-page features read as plain English (&quot;Automated health checks&quot; instead of &quot;Synthetic Monitoring&quot;), and every recently improved phrase is now properly translated in all 21 non-English languages instead of falling back word by word.</summary>
  </entry>
  <entry>
    <title>Forms and lists ask less of you up front</title>
    <id>https://beamopilot.com/changelog#change-forms-and-lists-ask-less-of-you-up-front</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-forms-and-lists-ask-less-of-you-up-front"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The everyday surfaces now show only what the common case needs, with the rest one click away. Alert cards went from seven always-visible controls to three, the link, one clear action for the alert's state, and a &quot;More actions&quot; fold for notes, snooze, and the rest. The receiving queue dropped from 12 columns to 8 without losing a single value. Recording a receipt asks for the shipment, line, stage, and units, &quot;Report a problem (short, damaged, lost)&quot; opens only when something went wrong. Getting a freight quote asks for weight and two ZIPs, not sixteen fields. Supplier profiles, RFQ bids, and Pilot memories tuck their optional tails behind the same fold. And the Approvals page, whose cards were rendering as unstyled raw text, got its real design back, with plain-English actions like &quot;Approve a purchase order&quot; instead of database labels.</summary>
  </entry>
  <entry>
    <title>Every page now answers &quot;where am I?&quot; the same way</title>
    <id>https://beamopilot.com/changelog#change-every-page-now-answers-where-am-i-the-same-way</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-page-now-answers-where-am-i-the-same-way"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Navigation labels now match wherever you see them: clicking Buy opens a page called Buy (not &quot;Procurement&quot;), the Pilot tab opens &quot;Ask Pilot&quot; (not a page named after the whole product), &quot;Cash Budget Cockpit&quot; is simply &quot;Cash budget&quot;, and the Setup tab opens &quot;Setup&quot;. Tabs that shared a name with something else got their own: Planning's first tab is &quot;Recommended buys&quot; (the Buy hub has the actual buy plan), Results' supplier tab is &quot;Supplier scorecards&quot;, and the Settings alerts tab is &quot;Alerts &amp; rules&quot; so it can't be confused with the bell's Alert Center. The Home launchpad now mirrors the sidebar exactly: one map of the app, not two. And several &quot;open X&quot; buttons that dropped you on the wrong tab now land exactly where they promise: finance documents open the Documents tab, payment runs open Payables, and failed-sync links open the actual sync log.</summary>
  </entry>
  <entry>
    <title>A radically simpler Home: one headline, two lists</title>
    <id>https://beamopilot.com/changelog#change-a-radically-simpler-home-one-headline-two-lists</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-radically-simpler-home-one-headline-two-lists"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Home now answers the only question that matters the moment it loads: &quot;3 things need you today&quot;, or &quot;All clear, Pilot has it handled.&quot; What Pilot did since you last looked is one line under that headline, and the three tiles mirror the page exactly: Needs your OK, Needs your help, System check. Everything that repeated itself is gone, the status banner that previewed the same decision the list showed right below it, the separate &quot;What Pilot did&quot; panel, and the count that appeared three times. Exception cards read plainer too: &quot;(tier A)&quot; is now &quot;a top seller&quot;, and &quot;in 17 day(s)&quot; is just &quot;in 17 days&quot;.</summary>
  </entry>
  <entry>
    <title>Inventory on autopilot: your Home now flies the plane</title>
    <id>https://beamopilot.com/changelog#change-inventory-on-autopilot-your-home-now-flies-the-plane</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-inventory-on-autopilot-your-home-now-flies-the-plane"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Your Home used to be a to-do list, a wall of &quot;21 open, 10 overdue&quot; tasks telling you to go do everything by hand. But Pilot already runs the loop on its own: it forecasts demand, drafts your buy plan, three-way-matches invoices, and watches for risk around the clock. So the Home now leads with that. Up top, &quot;Autopilot is running your inventory&quot; shows what Pilot handled since you last looked, its current mode (Review-only, Live, or Paused), and your cash and health at a glance. Below it, &quot;Needs your OK&quot; gathers the few decisions Pilot drafted and is waiting on, approve or dismiss each in one click, with money always waiting for your say-so. And the old backlog is reframed as &quot;Needs your help&quot;: just the handful of things Pilot couldn't handle on its own, so an empty list reads as success. Planning, Buy, and Cash got the same treatment, they now say Pilot keeps the plan and forecast fresh for you, with the manual re-run demoted to a quiet &quot;Update now.&quot;</summary>
  </entry>
  <entry>
    <title>Try the product instantly: a one-click live demo from the homepage</title>
    <id>https://beamopilot.com/changelog#change-try-the-product-instantly-a-one-click-live-demo-from-the-homepage</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-try-the-product-instantly-a-one-click-live-demo-from-the-homepage"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>You no longer have to create an account to see what Beamo Pilot does. The homepage now leads with a “Try the live demo” button: one click drops you straight into a fully loaded sample workspace with real-looking inventory, suppliers, cash, and plans, no signup required. Previously every homepage button was “Open dashboard”, which sent visitors to a login wall, and the one-click demo was buried on the sign-in screen labeled only “Test mode”. The demo is now surfaced everywhere it matters (hero, closing call-to-action, and footer) and the sign-in shortcut is clearly labeled “Explore the live demo”, while returning users still get a direct “Open dashboard” path.</summary>
  </entry>
  <entry>
    <title>The “Review” tab is now “Results”, and much plainer</title>
    <id>https://beamopilot.com/changelog#change-the-review-tab-is-now-results-and-much-plainer</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-review-tab-is-now-results-and-much-plainer"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The sidebar tab that used to be called “Review” is now “Results”, a clearer name for what it does: it shows how your plans actually turned out. Inside, the same idea carries through: its sub-tabs are now Improvements, Accuracy, Past runs, and Suppliers, and the jargon is gone, “90d velocity bias” is “Avg forecast error”, “supplier risk lanes” are “Suppliers to watch”, and “quality defect lanes” are “Quality flags”. The Improvements tab explains in plain words how Pilot compares its past forecasts to what really happened and suggests small tuning changes you can review or auto-apply.</summary>
  </entry>
  <entry>
    <title>Pilot Memories: Pilot now remembers your business</title>
    <id>https://beamopilot.com/changelog#change-pilot-memories-pilot-now-remembers-your-business</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-pilot-memories-pilot-now-remembers-your-business"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Pilot now keeps a durable memory of the facts that make your business yours (supplier quirks, policies, preferences, and context) so you don't have to re-explain how you operate every time you ask a question. It saves important facts automatically as you chat (tell it to “remember” something, or just state a durable fact and it captures it on its own), and pulls the relevant ones into its answers, showing a “Recalled N memories” chip so you can see what it drew on. A new Memories tab in the Pilot hub gives you the full picture: search everything Pilot knows, add facts yourself with a category, importance, and confidence, edit or refine them, and delete anything that's no longer true (or just tell Pilot in chat to “forget” it).</summary>
  </entry>
  <entry>
    <title>Clearer, calmer Planning: real costs, suppliers, and fewer false alarms</title>
    <id>https://beamopilot.com/changelog#change-clearer-calmer-planning-real-costs-suppliers-and-fewer-false-alarms</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-clearer-calmer-planning-real-costs-suppliers-and-fewer-false-alarms"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>The Planning tab had a few things that made it hard to trust. Every recommended buy showed its cash as “$0.00” (it was quietly showing the deposit-due-now, which is zero until an order is batched), it now shows each buy's actual cost, which reconciles with the “Cash needed” total up top. Buys also showed “Unknown supplier” because the supplier wasn't being carried onto the plan, each product now shows who you'd order it from. And in the sample workspace, almost every product looked like an urgent “order today”: stock levels were sized against one sales channel while demand was counted across all of them, so everything read as under-stocked. Stock is now sized against true all-channel demand, so the plan reads like a real business, a handful genuinely need ordering soon, most are comfortably on track. The per-SKU drill-down was also tidied up with plainer language (“What to do next”, “Open in Buy”, “Cash impact”) instead of internal phrases like “execution review” and “procurement context”.</summary>
  </entry>
  <entry>
    <title>The Buy plan tab is drastically simpler</title>
    <id>https://beamopilot.com/changelog#change-the-buy-plan-tab-is-drastically-simpler</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-buy-plan-tab-is-drastically-simpler"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Buy plan tab used to be a wall of capital-planning jargon, “funded / deferred waves”, “immediate cash”, “protected profit”, “net benefit”, “penalties”, a ten-column cash table with “baseline in/out / reserved / cash floor / budget left”, and a “Capital Wave” panel showing “data coverage: 0 explicit · 0 mixed · 5 derived”. It was almost impossible to tell what you were actually supposed to do. It's now a plain answer to one question: what should I buy now, and can I afford it? A one-line verdict tells you how many orders to place and roughly how much cash they need, and whether your cash stays healthy. Below it, each order you can afford is a clean card, supplier, what it covers, cash needed, that you click to see its products and create the purchase order. A simple cash-outlook chart shows whether your projected cash holds up, orders being held off on move into a tucked-away “Waiting” list with a plain reason each, and all the technical figures, weekly limits, and older plans live in closed “Plan settings” and “Advanced” sections you can open only if you need them.</summary>
  </entry>
  <entry>
    <title>Ask Pilot's answers stream in, and you can watch it think</title>
    <id>https://beamopilot.com/changelog#change-ask-pilot-s-answers-stream-in-and-you-can-watch-it-think</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-ask-pilot-s-answers-stream-in-and-you-can-watch-it-think"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Ask Pilot answers now stream in word by word as Pilot writes them, instead of appearing all at once after a wait, so you get moving text immediately and can start reading right away. While it works, an honest &quot;thinking&quot; indicator shows what stage it's in (reading your data → thinking it through → writing the answer) in place of the old anonymous spinner. When the model returns a reasoning summary, Pilot shows its thinking live as it reasons and tucks it behind a &quot;Show Pilot's thinking&quot; toggle on the finished answer so you can review how it got there. It all degrades gracefully, if the live connection isn't available you get a normal single answer with the same grounding and citations, and every bit of motion respects your reduced-motion setting.</summary>
  </entry>
  <entry>
    <title>Test mode now fills every screen with realistic data</title>
    <id>https://beamopilot.com/changelog#change-test-mode-now-fills-every-screen-with-realistic-data</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-test-mode-now-fills-every-screen-with-realistic-data"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Exploring the sample workspace used to leave a run of screens empty: no warehouses, no supplier payments, no returns, no scorecard. Test mode is now populated end to end: a small multi-location warehouse network with on-hand stock, scheduled supplier payments spread across the aging buckets plus a completed payment run, product returns with real reasons and per-SKU quality scores, operator notes and a decision room on real orders, demand-planning promotions, a KPI scorecard and configured alert rules, an active plan with a month of usage on the billing screen, a connected Amazon Ads account, and a starter set of governed analytics metrics. Every navigable tab now reads like a real, working operation.</summary>
  </entry>
  <entry>
    <title>A cleaner Ask Pilot answer, and slightly larger sidebar tabs</title>
    <id>https://beamopilot.com/changelog#change-a-cleaner-ask-pilot-answer-and-slightly-larger-sidebar-tabs</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-cleaner-ask-pilot-answer-and-slightly-larger-sidebar-tabs"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Every Ask Pilot answer used to arrive buried under a heavy &quot;trust&quot; card, a three-column Confidence / Data freshness / Missing-information grid, which was then repeated in a right-hand Evidence panel and a third time in a technical Intent / Run ID line. The answer itself got lost. Now each reply is a clean, full-width message with one small confidence chip (a green &quot;High confidence · Evidence fresh&quot;, or an amber &quot;Needs review&quot; when something needs a second look) and a compact &quot;Sources (N)&quot; link you can expand to see exactly which live records the answer cites. Same grounding and citations, far less clutter. Separately, the left sidebar's tabs are now a touch larger, a bit more height, a slightly bigger label and icon, so the navigation is easier to read and click.</summary>
  </entry>
  <entry>
    <title>The Pilot tab is now just Ask Pilot, and the sidebar is cleaner</title>
    <id>https://beamopilot.com/changelog#change-the-pilot-tab-is-now-just-ask-pilot-and-the-sidebar-is-cleaner</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-the-pilot-tab-is-now-just-ask-pilot-and-the-sidebar-is-cleaner"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Pilot hub used to open on an inventory dashboard, a &quot;Monitor inventory posture&quot; header, metric tiles, and a big &quot;Priority SKUs&quot; table, with the Ask Pilot chat buried underneath. It's now a single, focused chat: open Pilot and you're talking to it, with a welcoming prompt, suggested questions, cited answers, and one-click follow-up actions. The same priority-SKU views still live in Planning, Home, and SKU 360, so nothing was lost, it just stopped competing with the assistant (and the tab loads faster now that it no longer pulls five dashboards). Separately, the left sidebar dropped the small gray one-liner under every hub, so the nav reads as a clean list of labels.</summary>
  </entry>
  <entry>
    <title>Test mode feels like the real thing, and plainer language everywhere</title>
    <id>https://beamopilot.com/changelog#change-test-mode-feels-like-the-real-thing-and-plainer-language-everywhere</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-test-mode-feels-like-the-real-thing-and-plainer-language-everywhere"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Test mode now opens straight into the full working console, a single small &quot;Demo&quot; ribbon (&quot;You're in the Beamo Pilot demo, real screens, sample data, nothing to break. It resets periodically.&quot;) replaces the old setup banner, and there's no login warning. The sample workspace is fully populated so nothing looks empty: the sales channels read Connected, the agent review queue and approvals have items waiting, the team has a few people, invoices tie out to their purchase orders, and the bundle products list their parts. Across the whole app, in and out of test mode, internal jargon is gone: &quot;observed/inferred truth&quot; became &quot;counted/estimated&quot;, &quot;stale sync streams&quot; became &quot;out-of-date feeds&quot;, &quot;reconcile / exceptions / waves&quot; became &quot;match / issues / batches&quot;, &quot;autonomy&quot; became &quot;auto-send&quot;, and technical internals are now described in plain words. The daily summary email and the mobile app got the same treatment.</summary>
  </entry>
  <entry>
    <title>A third speed pass: fewer requests, fewer repeated queries</title>
    <id>https://beamopilot.com/changelog#change-a-third-speed-pass-fewer-requests-fewer-repeated-queries</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-third-speed-pass-fewer-requests-fewer-repeated-queries"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Opening a SKU in Planning used to fire six-to-seven separate requests (demand, inbound pipeline, cost history, projection, feedback, supplier terms); it is now one bundled request, so the drill-down opens in a fraction of the time. Under the hood, the app stopped reading the workspace's business timezone from the database over and over, it was being re-read once per exception row and once per supplier on some pages, by caching it per request. The channel planning-policies page stopped re-provisioning defaults and re-checking a connection status it never used on every channel, and a couple of feedback panels now count rows instead of loading them. Same data everywhere, just fewer round trips to get it.</summary>
  </entry>
  <entry>
    <title>Test mode (and busy workspaces) load dramatically faster</title>
    <id>https://beamopilot.com/changelog#change-test-mode-and-busy-workspaces-load-dramatically-faster</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-test-mode-and-busy-workspaces-load-dramatically-faster"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The purchase-order list, the slowest read in the app, taking 8+ seconds in well-populated workspaces like the test drive, now loads each related record set for the whole page in a single query instead of ~18 queries per order, and no longer recomputes a workspace-wide receiving scan per order. The health check is far more efficient, cutting redundant database work. And the workspace-setup check that ran on every single page in test mode is cached for a minute, refreshing instantly when setup actually changes. Everything returns exactly the same data as before, it just arrives in a fraction of the time.</summary>
  </entry>
  <entry>
    <title>Every screen loads noticeably faster</title>
    <id>https://beamopilot.com/changelog#change-every-screen-loads-noticeably-faster</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-every-screen-loads-noticeably-faster"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A performance pass across the whole console. The status signals the shell checks on every page (system health, data freshness, unread alerts) are now served from a short-lived cache instead of being recomputed per view, and the system-status check no longer scans the full sync history. Procurement stops loading five heavy analyses (decision packet, cash impact, supplier terms and freight) until you actually open their panels: they were computed on every visit even though they sit behind closed disclosures. Saved views are fetched once and reused across pages, and the receiving queue no longer double-loads on arrival. In local measurement, cold page loads got 2–4× faster (Procurement 844ms → 189ms, Planning 783ms → 318ms) with everything behaving exactly as before.</summary>
  </entry>
  <entry>
    <title>Statuses in plain phases, numbers that explain themselves</title>
    <id>https://beamopilot.com/changelog#change-statuses-in-plain-phases-numbers-that-explain-themselves</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-statuses-in-plain-phases-numbers-that-explain-themselves"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>A second ease-of-use pass. Statuses now read as journey phases: agent actions show Needs review / Sending / Sent instead of internal state names, and purchase orders read Ordered, In production, In transit, Received. Every KPI carries a plain-language description shown right in the scorecard and trend cards, confidence and risk values render as percentages instead of mystery decimals, forecast tables spell out their acronyms (forecast error, over/under bias, demand swing), and notification times read like &quot;15m ago&quot; with the exact moment on hover. Work-queue buttons say what they open in plain words, the cash alert says &quot;Cash is projected to go negative&quot; with a real dollar amount, the public status page says &quot;Awaiting first check&quot; instead of &quot;No data&quot;, deployment flags are clearly labeled read-only, and cancelling a payment run now asks for confirmation just like executing one.</summary>
  </entry>
  <entry>
    <title>A simpler console: one bell, findable approvals, human pickers</title>
    <id>https://beamopilot.com/changelog#change-a-simpler-console-one-bell-findable-approvals-human-pickers</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-a-simpler-console-one-bell-findable-approvals-human-pickers"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>An app-wide ease-of-use pass with everything working exactly as before. The topbar now has one notifications bell that also carries your unread alerts (with an Alert center row inside). Approvals joins the Buy hub as its own tab. Every dashboard tab links to its &quot;How this tab works&quot; guide, and the Cmd+K palette can jump to hidden pages and search the docs. Forms stop asking for internal codes: the manual invoice match picks purchase orders and documents by supplier, filename, and reference; RFQs and the channel-allocation tool suggest SKUs by product name; and proposals gain a one-click Approve &amp; Create PO. System settings are grouped into labeled sections, and each channel's listings push is now a single Off / Log-only / Live choice instead of two checkboxes. Blocked auto-send reasons link straight to the control that fixes them, and everything that used to be branded &quot;Copilot&quot; is simply Pilot.</summary>
  </entry>
  <entry>
    <title>Pilot back in the sidebar, loading states everywhere, plainer language</title>
    <id>https://beamopilot.com/changelog#change-pilot-back-in-the-sidebar-loading-states-everywhere-plainer-language</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-pilot-back-in-the-sidebar-loading-states-everywhere-plainer-language"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Navigation is refined to nine hubs: Pilot is back as its own sidebar destination, so the Ask Pilot assistant is one click away instead of a tab inside Home (which returns to its three tabs: Today, Signals, and Workspaces). Every workspace and tab now shows a proper loading indicator on its first load instead of popping in blank or with placeholder zeros. And the content inside tabs reads plainer: run tiles show a readable created time and scenario instead of a raw run id, all-zero metric walls collapse into a calm sentence, repeated per-row table notes are said once above the table, and warnings are rewritten in plain language that says what happened and what to do next.</summary>
  </entry>
  <entry>
    <title>One console, eight hubs</title>
    <id>https://beamopilot.com/changelog#change-one-console-eight-hubs</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-one-console-eight-hubs"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The sidebar is consolidated from seventeen destinations into eight plain-language hubs (Home, Plan, Buy, Suppliers, Operate, Cash, Review, and Settings) and related pages are now tabs inside their hub (Cash, for example, switches between Cash, Budget, and Invoices). Ask Pilot now lives on Home as its own tab. Every page keeps its address, so old links and bookmarks keep working.</summary>
  </entry>
  <entry>
    <title>Seasonal restock outlook on every SKU page</title>
    <id>https://beamopilot.com/changelog#change-seasonal-restock-outlook-on-every-sku-page</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-seasonal-restock-outlook-on-every-sku-page"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every SKU 360 page now tells you whether a product's sales are seasonal, and what to do about it. A learned forecast reads the product's own sales history, shows its typical year as a simple 12-month strip, and turns the pattern into a plain-language verdict: when the next season starts, how many units it is expected to need, and the date to order by (season start minus the supplier's lead time and a one-week buffer). Steady sellers simply read &quot;No strong seasonality detected&quot;. December-only products finally get an order-by date early enough to actually be in stock for December.</summary>
  </entry>
  <entry>
    <title>Contact page with a working contact form</title>
    <id>https://beamopilot.com/changelog#change-contact-page-with-a-working-contact-form</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-contact-page-with-a-working-contact-form"/>
    <updated>2026-07-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A public Contact page at /contact makes it easy to reach the team. Email us directly at support@beamopilot.com, or send a message through the form: name, email, optional company and subject, and your message. Each submission is persisted first (so nothing is lost) and then emailed straight to the team, with your address set as the reply-to so we can respond directly. The form validates inline, is rate-limited, and carries a honeypot to keep out spam.</summary>
  </entry>
  <entry>
    <title>Faster dashboard and planning page loads</title>
    <id>https://beamopilot.com/changelog#change-faster-dashboard-and-planning-page-loads</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-faster-dashboard-and-planning-page-loads"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The hot dashboard and planning reads are now much faster to reload. Responses that are fully determined by a planning, allocation, or simulation run (the replenishment dashboard, inventory-allocation runs, inventory-simulation runs) let your browser confirm nothing has changed and reuse what it already has, instead of re-sending the whole page. The server also remembers the computed result, so repeat reads skip the expensive query entirely. Repeat page loads are served from cache instantly, and caching scales up automatically as traffic grows.</summary>
  </entry>
  <entry>
    <title>Faster, lighter pages across the app</title>
    <id>https://beamopilot.com/changelog#change-faster-lighter-pages-across-the-app</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-faster-lighter-pages-across-the-app"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Several request hot paths got materially faster and lighter on the database. The alert inbox now filters and paginates in the database and computes its summary with aggregates, instead of loading every alert in the workspace into memory. Bulk catalog edits batch-load their products in one query rather than one per SKU; the warehouse-wave list eager-loads tasks in a single query instead of one per wave; and the KPI scorecard computes its supplier aggregation once per request instead of two or three times. Database capacity is now tracked as the platform scales and flagged on the system status page before it becomes a problem.</summary>
  </entry>
  <entry>
    <title>Handles more workspaces and traffic at once</title>
    <id>https://beamopilot.com/changelog#change-handles-more-workspaces-and-traffic-at-once</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-handles-more-workspaces-and-traffic-at-once"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Two reliability and scale upgrades under the hood. Scheduled jobs can now fan out into one task per workspace, so a single busy tenant no longer holds up everyone else and background work runs in parallel across workspaces instead of one sequential all-workspaces sweep. And the platform now serves far more concurrent traffic, with background jobs kept isolated from live requests so they never slow down the pages you're using.</summary>
  </entry>
  <entry>
    <title>Carrier rate-shopping + native 3PL connectors</title>
    <id>https://beamopilot.com/changelog#change-carrier-rate-shopping-native-3pl-connectors</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-carrier-rate-shopping-native-3pl-connectors"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Freight is no longer tracking-only. Rate-shopping (in Procurement) quotes a shipment across carriers/services ranked by cost with transit times, highlights the cheapest and fastest, and buys the best label: the built-in estimator works out of the box and a live carrier provider plugs in behind it. And 3PL connectors (in System) let you register ShipBob / Flexport / Deliverr with encrypted credentials to pull provider-controlled positions; custom WMS connectors also support inventory-adjustment pushes. Every new connector starts in dry-run (sync intent recorded, nothing transmitted) until you deliberately go live. Gated by Dispatch order and Integrations manage respectively.</summary>
  </entry>
  <entry>
    <title>EDI ordering for enterprise partners</title>
    <id>https://beamopilot.com/changelog#change-edi-ordering-for-enterprise-partners</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-edi-ordering-for-enterprise-partners"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Exchange ANSI X12 EDI without a separate VAN tool. Generate a well-formed 850 (purchase order) from a PO or an 856 (advance ship notice) from a shipment, ISA/GS/ST envelopes, the load-bearing segments, a stored control number, and a transmit step (manual/SFTP/AS2/email). Parse an inbound 810 (invoice) into structured data, invoice number, line items, total, and link it back to the originating PO. New EDI panel in Procurement, gated by the Dispatch order permission.</summary>
  </entry>
  <entry>
    <title>Serial-number tracking + DC-to-DC rebalancing</title>
    <id>https://beamopilot.com/changelog#change-serial-number-tracking-dc-to-dc-rebalancing</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-serial-number-tracking-dc-to-dc-rebalancing"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Two operations additions. Serial-number tracking follows individual serialized units (electronics, regulated goods) through their lifecycle: receive one at a time or bulk-paste a list, then move each in stock → allocated → shipped → sold / returned / scrapped / recalled with an append-only ledger and invalid-jump guards. And DC-to-DC rebalancing moves on-hand stock between your own warehouses (draft → ship → receive, debiting origin and crediting destination), with suggested moves computed from per-warehouse availability imbalance. Both live in Operations and are gated by Inventory manage.</summary>
  </entry>
  <entry>
    <title>Blanket &amp; standing purchase agreements</title>
    <id>https://beamopilot.com/changelog#change-blanket-standing-purchase-agreements</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-blanket-standing-purchase-agreements"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Lock committed volume and price with a supplier up front, then call off stock with releases. Each release draws down the agreement's remaining balance and materializes a purchase order at the agreed line prices, so dispatch, receiving, and invoice matching work unchanged. Agreements move draft → active → closed, releases are blocked from exceeding a line's remaining balance (unless you allow overage), and the new Blanket agreements panel in Procurement shows committed/released/remaining at a glance. Gated granularly: managing agreements needs Suppliers manage, releasing needs Place order.</summary>
  </entry>
  <entry>
    <title>Granular permission enforcement on routes</title>
    <id>https://beamopilot.com/changelog#change-granular-permission-enforcement-on-routes</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-granular-permission-enforcement-on-routes"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Permissions from the 26-permission matrix are now enforced per route, not just by coarse role rank. A new reusable permission gate lets a route require a specific permission (e.g. Finance manage to edit the duty schedule) so granting one targeted permission to a lower role opens exactly that capability: owner and admin keep working unchanged because they already hold it. The app also reads your own effective permissions (new endpoint) and hides controls you can't use, starting with the tariff/reconciliation panel.</summary>
  </entry>
  <entry>
    <title>Tariff duty engine + landed-cost reconciliation</title>
    <id>https://beamopilot.com/changelog#change-tariff-duty-engine-landed-cost-reconciliation</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-tariff-duty-engine-landed-cost-reconciliation"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Importers can now maintain an HS-code duty schedule (longest-prefix matching, with origin-specific Section 301-style add-ons beating the any-origin default), classify SKUs by HS code and country of origin, and get a per-PO duty estimate. The schedule's blended duty rate also feeds the pre-buy landed-cost prediction when supplier terms carry no rate. And every PO can now be reconciled predicted-vs-actual: the pre-buy estimate is compared, component by component (product, freight, duty, other), against the realized cost from received lines and finalized landed-cost charges (flagged within tolerance, over, or under) so you can tune the inputs and land the next estimate closer. Manage it all from the new Tariff duty &amp; reconciliation panel in Finance.</summary>
  </entry>
  <entry>
    <title>Container load &amp; cube optimization for importers</title>
    <id>https://beamopilot.com/changelog#change-container-load-cube-optimization-for-importers</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-container-load-cube-optimization-for-importers"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>SKUs now carry master-carton dimensions and weight, and Procurement has a container load planner that packs an order (a purchase order or a quick SKU list) into 20/40 ft containers under real volume and weight limits: showing per-container fill, the limiting factor, and exactly what goes where. 'Auto' evaluates every container type and recommends the fewest, fullest cubes. A round-to-container helper rounds a buy quantity (honoring MOQ and case-pack) up or down to a full-container boundary so you stop shipping half-empty cubes, and any plan can be saved straight into the freight ledger as a booking.</summary>
  </entry>
  <entry>
    <title>Single sign-on and automated user setup are live</title>
    <id>https://beamopilot.com/changelog#change-single-sign-on-and-automated-user-setup-are-live</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-single-sign-on-and-automated-user-setup-are-live"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Single sign-on now actually works end to end, not just stored config: connect a SAML 2.0 or OIDC identity provider in System and your team signs in with &quot;Sign in with…&quot; on the login page. Logins are cryptographically verified (OIDC id-token signature + nonce, or the signed SAML assertion), members are provisioned just-in-time with a default or group-mapped role, and SSO never grants owner access. A standard SCIM 2.0 endpoint (/api/v1/scim/v2, Users + Groups) lets your IdP create, update, and deactivate members automatically with an issued bearer token.</summary>
  </entry>
  <entry>
    <title>Multi-step approval chains for spend</title>
    <id>https://beamopilot.com/changelog#change-multi-step-approval-chains-for-spend</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-multi-step-approval-chains-for-spend"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Spend approvals can now run through real multi-step chains instead of a single allow/deny: ordered steps, N-of-M quorum per step, time-based escalation that widens the approver set on stalled steps, and delegation so someone can approve on your behalf while you're out. Chains attach to a spend action and amount tier (bigger spend, more sign-off), and a pay run or PO they cover only executes once every step clears. Approve from the new Approvals workspace or your My-Work inbox; admins configure chains and delegations there too. Opt-in: without a chain, the single-tier policy is unchanged.</summary>
  </entry>
  <entry>
    <title>Deeper forecasting science in the per-SKU bake-off</title>
    <id>https://beamopilot.com/changelog#change-deeper-forecasting-science-in-the-per-sku-bake-off</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-deeper-forecasting-science-in-the-per-sku-bake-off"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The forecast bake-off now fits intermittent-demand models (Croston, SBA, TSB) for sparse long-tail SKUs and exponential smoothing (simple + Holt trend) for drifting demand, and auto-adopts whichever scores best per SKU. The winner also produces a demand prediction interval, and its residual σ now feeds the service-level safety stock for honestly-sized protection. Brand-new SKUs get analog-SKU cold-start: they borrow the demand shape of similar SKUs until they have history of their own. Controlled by one System toggle (on by default).</summary>
  </entry>
  <entry>
    <title>Amazon Ads connector: ad spend pulls itself now</title>
    <id>https://beamopilot.com/changelog#change-amazon-ads-connector-ad-spend-pulls-itself-now</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-amazon-ads-connector-ad-spend-pulls-itself-now"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Connect the Amazon Advertising API to pull Sponsored Products ad spend automatically every day instead of uploading a CSV. The daily spend lands in your commercial signals, so Demand Attribution stays self-updating, and the connector page now shows ACOS, TACOS, and ROAS for a rolling window with a per-SKU breakdown. ACOS/TACOS/ROAS and ad spend are also registered metrics you can set KPI targets and alerts on.</summary>
  </entry>
  <entry>
    <title>Bundles, kits &amp; multipacks</title>
    <id>https://beamopilot.com/changelog#change-bundles-kits-multipacks</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-bundles-kits-multipacks"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>You can now model a sellable bundle or multipack as a bill-of-materials of component SKUs from the Bundle composition panel on any SKU 360 page. Bundle sales explode into component demand, a bundle's availability becomes its buildable count (min across components), bundles are excluded from the buy plan (you order the components), and channel write-back pushes the buildable quantity, so demand, ATP, and replenishment are finally correct for multipacks and virtual kits.</summary>
  </entry>
  <entry>
    <title>Suppliers can mark a PO shipped with an ASN + tracking</title>
    <id>https://beamopilot.com/changelog#change-suppliers-can-mark-a-po-shipped-with-an-asn-tracking</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-suppliers-can-mark-a-po-shipped-with-an-asn-tracking"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The supplier portal gained a &quot;Mark shipped&quot; action: a supplier enters carrier, tracking number, route, ship date, cartons, and units shipped per line. Submitting it advances the purchase order to shipped, creates a real inbound shipment, and starts live tracking: closing a collaboration gap where suppliers could update an ETA but never actually push a shipment. Re-submitting the same ASN is idempotent.</summary>
  </entry>
  <entry>
    <title>Send RFQs to suppliers and collect bids on a portal</title>
    <id>https://beamopilot.com/changelog#change-send-rfqs-to-suppliers-and-collect-bids-on-a-portal</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-send-rfqs-to-suppliers-and-collect-bids-on-a-portal"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Sourcing events can now be transmitted: invite suppliers by email straight from the RFQ desk and each gets a unique, no-login link to review the request and submit (or revise) a bid. The desk tracks who's been sent, viewed, and responded, and every bid lands in the same ladder you award from, so RFQs are finally two-way instead of operators keying in quotes by hand.</summary>
  </entry>
  <entry>
    <title>Cash-runway chart + CSV export on the cash forecast</title>
    <id>https://beamopilot.com/changelog#change-cash-runway-chart-csv-export-on-the-cash-forecast</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-cash-runway-chart-csv-export-on-the-cash-forecast"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The cash forecast now renders as a cash-runway chart, each week's projected ending balance as a two-tone area (healthy above zero, danger below) with the lowest week highlighted and a hover read-out, on Finance, the Cash &amp; budget cockpit, and the procurement buying plan, where it had been a bare table. Every cash view also exports its weekly rows to CSV.</summary>
  </entry>
  <entry>
    <title>Custom reports use your shared, governed data model</title>
    <id>https://beamopilot.com/changelog#change-custom-reports-use-your-shared-governed-data-model</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-custom-reports-use-your-shared-governed-data-model"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>Custom reports now run through the governed semantic layer and honor the dimensions, measures, and date grain you choose (instead of a fixed breakdown). Warehouse exports do a real delivery, uploading when credentials are set, an honest dry-run with true row/byte counts otherwise, replacing the fabricated preview. And the metric builder gained row-level drilldown and dataset lineage.</summary>
  </entry>
  <entry>
    <title>Billing: plan prices, usage tracking &amp; a clearer subscription page</title>
    <id>https://beamopilot.com/changelog#change-billing-plan-prices-usage-tracking-a-clearer-subscription-page</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-billing-plan-prices-usage-tracking-a-clearer-subscription-page"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The Billing workspace now shows each plan's price, included seats, and features as comparison cards (the price you see is what Stripe charges), tracks your metered usage against plan limits with per-metric progress bars, and surfaces payment problems with a one-click link to fix them: replacing the old developer-facing placeholder.</summary>
  </entry>
  <entry>
    <title>Sort, filter, export &amp; bulk actions on every major list</title>
    <id>https://beamopilot.com/changelog#change-sort-filter-export-bulk-actions-on-every-major-list</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-sort-filter-export-bulk-actions-on-every-major-list"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The daily-driver lists, Recommended buys, Alerts, Invoice matching, Inventory aging, Supplier scorecards, and the cash-forecast events, now share one set of controls: click any column to sort, filter in place, export the current view to CSV, and act on many rows at once (bulk acknowledge/resolve alerts, release invoice holds, flag aged SKUs). Recommended buys also gains saved views.</summary>
  </entry>
  <entry>
    <title>Real-time Shopify orders &amp; inventory webhooks</title>
    <id>https://beamopilot.com/changelog#change-real-time-shopify-orders-inventory-webhooks</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-real-time-shopify-orders-inventory-webhooks"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Marketplace data no longer waits up to 6h for the next poll. Add your Shopify app's webhook secret and click &quot;Enable real-time&quot; on the connector to subscribe to orders/create + inventory_levels/update: orders and inventory now flow into planning the moment they change. Deliveries are HMAC-verified and deduped; the periodic sync still reconciles.</summary>
  </entry>
  <entry>
    <title>Connect TikTok Shop and eBay</title>
    <id>https://beamopilot.com/changelog#change-connect-tiktok-shop-and-ebay</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-connect-tiktok-shop-and-ebay"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The TikTok Shop and eBay sync engines are now reachable: pick them during onboarding or add a connector in Channels → Connectors with your platform credentials (TikTok app key/secret/access token/shop cipher; eBay access token). Catalog, inventory, and sales flow into the same canonical SKU layer and feed planning.</summary>
  </entry>
  <entry>
    <title>Price + inventory write-back now reaches Walmart and Shopify</title>
    <id>https://beamopilot.com/changelog#change-price-inventory-write-back-now-reaches-walmart-and-shopify</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-price-inventory-write-back-now-reaches-walmart-and-shopify"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Write-back is no longer Amazon-only. Push the platform's target price and live inventory to Walmart (Price/Inventory APIs) and Shopify (GraphQL Admin) too: same doubly opt-in, delta-only, dry-run-by-default contract, configured per channel in System settings and run from the Listings write-back panel.</summary>
  </entry>
  <entry>
    <title>Apply an allocation plan to create transfers automatically</title>
    <id>https://beamopilot.com/changelog#change-apply-an-allocation-plan-to-create-transfers-automatically</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-apply-an-allocation-plan-to-create-transfers-automatically"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>The allocation optimizer no longer stops at &quot;approved.&quot; Apply an approved plan and its warehouse→Amazon moves become real inventory transfers (clamped to the stock actually available at the origin) ready to dispatch from Operations. No more re-keying every move by hand.</summary>
  </entry>
  <entry>
    <title>Real-time notifications for every event</title>
    <id>https://beamopilot.com/changelog#change-real-time-notifications-for-every-event</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-real-time-notifications-for-every-event"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="fixed" label="fixed"/>
    <summary>Six advertised webhook events were never actually delivered: supplier_action.auto_approved and .sent, stockout.detected, cash.risk, purchase_order.created, and supplier_payment.dispatched. They now emit the moment each event happens, so subscribers get the full real-time stream.</summary>
  </entry>
  <entry>
    <title>Markdown &amp; clearance campaigns</title>
    <id>https://beamopilot.com/changelog#change-markdown-clearance-campaigns</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-markdown-clearance-campaigns"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Recover cash from aging inventory: recommend markdowns from stock that's aging out, approve and activate a sell-down campaign, and measure sell-through and cash recovered: with the result fed back into planning.</summary>
  </entry>
  <entry>
    <title>Analytics: shared metrics and BI exports</title>
    <id>https://beamopilot.com/changelog#change-analytics-shared-metrics-and-bi-exports</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-analytics-shared-metrics-and-bi-exports"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A metric builder over a governed semantic layer with a draft → certified → deprecated lifecycle, plus scheduled snapshot delivery to S3, BigQuery, or Snowflake, so everyone reports the same certified numbers.</summary>
  </entry>
  <entry>
    <title>Decision rooms</title>
    <id>https://beamopilot.com/changelog#change-decision-rooms</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-decision-rooms"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Bring watchers, files, approvals, and a full timeline together on any SKU, PO, supplier, invoice, exception, cash forecast, or shipment: with mobile push for high-signal events. Notes fold into the room automatically.</summary>
  </entry>
  <entry>
    <title>Payment rails</title>
    <id>https://beamopilot.com/changelog#change-payment-rails</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-payment-rails"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Close the loop on supplier payments: provider dispatch with asynchronous settlement, a signed settlement webhook, reconciliation against expected, NACHA/CSV remittance, and finance-gated QuickBooks bill-payment writeback.</summary>
  </entry>
  <entry>
    <title>Public Operations API v2 &amp; webhooks</title>
    <id>https://beamopilot.com/changelog#change-public-operations-api-v2-webhooks</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-public-operations-api-v2-webhooks"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A REST API for WMS/3PL integrators (shipments, transfers, putaway, cycle counts, bins, lots, and adjustments) with durable idempotency keys so retries are always safe, plus HMAC-signed webhooks for real-time events.</summary>
  </entry>
  <entry>
    <title>Wave mode for the warehouse floor</title>
    <id>https://beamopilot.com/changelog#change-wave-mode-for-the-warehouse-floor</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-wave-mode-for-the-warehouse-floor"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Batch putaway on mobile into route-ordered runs (serpentine, zone, or sequential) with bin scanning, mandatory lot/expiry QC, offline conflict resolution, and supervisor sign-off before a wave closes.</summary>
  </entry>
  <entry>
    <title>Demand attribution in Ask Pilot</title>
    <id>https://beamopilot.com/changelog#change-demand-attribution-in-ask-pilot</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-demand-attribution-in-ask-pilot"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Ask why a SKU's demand moved and Pilot explains it through commercial drivers (ad spend, price, promotions, sessions, conversion, buy-box, and rank) with confidence scores and cited sources.</summary>
  </entry>
  <entry>
    <title>Pilot actions &amp; playbooks</title>
    <id>https://beamopilot.com/changelog#change-pilot-actions-playbooks</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-pilot-actions-playbooks"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A registry of safe, human-confirmed operations across alerts, exceptions, receiving, suppliers, finance, and system health (each proposed, confirmed, executed, and audited) grouped into ordered playbooks.</summary>
  </entry>
  <entry>
    <title>Autonomous supplier agent: safety hardening</title>
    <id>https://beamopilot.com/changelog#change-autonomous-supplier-agent-safety-hardening</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-autonomous-supplier-agent-safety-hardening"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The procurement agent gained execution-time re-gating, an append-only decision audit, a circuit breaker, closed-loop outcomes, channel-send idempotency, and per-supplier pause, so nothing sends twice or without your sign-off.</summary>
  </entry>
  <entry>
    <title>Supplier health &amp; scorecard</title>
    <id>https://beamopilot.com/changelog#change-supplier-health-scorecard</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-supplier-health-scorecard"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Every supplier gets a 0–100 health score from on-time rate, delivery delay, stockout misses, reliability risk, and invoice discrepancies, with tiers and 7/30/90-day trends, and one-click autonomy tightening when health slips.</summary>
  </entry>
  <entry>
    <title>Native mobile app</title>
    <id>https://beamopilot.com/changelog#change-native-mobile-app</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-native-mobile-app"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>A native iOS and Android app reaching full parity with the web console: receiving, wave-mode putaway, exception resolution, and approvals on the floor, all in sync with the same backend.</summary>
  </entry>
  <entry>
    <title>QuickBooks Online sync</title>
    <id>https://beamopilot.com/changelog#change-quickbooks-online-sync</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-quickbooks-online-sync"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Keep invoices and payments aligned with QuickBooks on a schedule or on demand, with a separate, finance-gated payment writeback from Beamo Pilot to QuickBooks.</summary>
  </entry>
  <entry>
    <title>Inventory aging &amp; cash release</title>
    <id>https://beamopilot.com/changelog#change-inventory-aging-cash-release</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-inventory-aging-cash-release"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>See capital tied up in aging stock by age bucket and turn it back into cash: the on-ramp to clearance and markdown campaigns.</summary>
  </entry>
  <entry>
    <title>22-language localization</title>
    <id>https://beamopilot.com/changelog#change-22-language-localization</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-22-language-localization"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="improved" label="improved"/>
    <summary>The entire operator console and public site now translate at runtime into 22 languages, including six right-to-left Arabic variants with mirrored layout.</summary>
  </entry>
  <entry>
    <title>Searchable documentation site</title>
    <id>https://beamopilot.com/changelog#change-searchable-documentation-site</id>
    <link rel="alternate" href="https://beamopilot.com/changelog#change-searchable-documentation-site"/>
    <updated>2026-06-01T00:00:00Z</updated>
    <category term="new" label="new"/>
    <summary>Launched the public docs at /docs: every feature documented, with full-text search, a collapsible category nav, deep-linkable sections, and &quot;open in app&quot; links.</summary>
  </entry>
</feed>
