Skip to content

September 2026

  • Xero joins the native ERP connectors. Connect a Xero organisation in one click — sign in, approve the grant, pick the organisation, and you’re done; there’s no developer account, client id, or client secret to obtain, and PlaidCloud keeps the connection authorized from then on. A Xero: Import Entity step pulls eleven Accounting API entities — chart of accounts, contacts, invoices, credit notes, payments, manual journals, bank transactions, items, tracking categories, tax rates, and currencies — narrowed by status, a date range, and a modified-since cutoff, with no query to write. A Xero: Post Document step posts manual journals, invoices, bills, payments, and credit notes back from a header and lines table, in any mix within one batch, with a test mode that validates every document before anything posts and an idempotent write path that never posts a re-run document twice. Where an outcome is ambiguous, a document is only reported posted once Xero confirms it in a settled state — anything else is held for you to resolve rather than guessed at. Every attempt lands in ERP Post History alongside your other ERP posts. See Connect to Xero.

  • Oracle HFM/FCCS self-serve extract. Pull ad-hoc data slices from Oracle Financial Consolidation and Close (FCCS) directly in a workflow. Connect with a service account, pick a point of view (Scenario, Year, Period, Entity, Account, and more) from metadata-driven selectors, and get a result table back — no ticket to the HFM team. Repeat slices are served from cache, the landed table is row-level-security-ready, and any slice can be promoted to a scheduled recurring load. See Connect to Oracle HFM/FCCS.

  • Import a named range or a cell range from Excel. The Import Excel step can now read a workbook-defined named range or a specific cell range (Sheet1$A1:J100) as an alternative to reading a whole worksheet, and you can mix worksheets, named ranges, and cell ranges within the same import. The sheet picker lists named ranges alongside worksheets, so selecting one works the same way as selecting a sheet. A named range that refers to more than one disjoint area, or a cell range that’s out of bounds or inverted, is rejected with a clear error instead of being imported wrong. See Import Excel.

  • A workflow run can post live, simulate, or skip its ERP posting steps. Every run carries a posting mode, chosen when you start it. Live posts exactly as it always has. Simulate has every ERP posting step build and validate exactly what it would post, then commit nothing and never contact the ERP — the would-post entries land in ERP Post History marked simulated, so you can review them before running live, and clear them independently of real posts. Off skips posting steps entirely. A project also carries its own posting mode cap, which any member with write access to an unlocked project can set, and a run’s effective mode is always the more restrictive of the two — a project capped to Simulate stays simulated no matter what mode the run is started with. A sub-workflow, a macro, a model or loop run, and a run you resume after a stop all inherit their parent run’s mode, so a simulated run can’t post for real anywhere inside itself. SAP posting, attachment, and RFC steps don’t dry-run — under Simulate or Off they’re skipped outright, since SAP’s own test flags still open a real connection. See Choose a Posting Mode.

  • The Posting Register gives finance and accounting one place to review ERP postings across every project — and to act on them in bulk. A tenant-level console, outside any single project, opens straight to an exception queue — postings that are in doubt, unconfirmed, pending, or failed, oldest first, aged against the platform’s own timers rather than a guess, with simulated postings excluded from the queue and counted separately. A connection-health banner shows, for every connection you’re personally granted, the last successful post and whether it’s currently erroring. Beyond the queue, the full grid lists every posting from every project and connection you’re permitted to see, filterable by project, environment, connection, ERP type, entity, posting date, and state, and you can group the register by run, period, or connection for subtotals and a status roll-up — with uncaptured money always rendered blank rather than zero, and amounts in different currencies never blended into one total. From the grid you can also select postings in bulk — by ticking rows, or by matching everything your current filter finds across every page — and see an impact preview before anything runs: how many postings, how much money, and which connections and entities are affected, with anything the action can’t touch called out separately. Two actions are offered: clear simulated postings, a soft delete that never touches a live posting, and retry failed postings, which only reaches ones the ERP rejected or never received — checking with the ERP first, where it can, so a document the ERP already holds as posted is refused rather than resent; a bulk retry only runs against postings you’ve individually ticked, and the same retry is also available one row at a time from the detail drawer, behind the same preview and confirmation. A high-value or high-volume action asks you to type the affected amount before Apply unlocks, a safety prompt rather than an approval step — it authorizes nothing on its own. Simulated postings also get their own view, filterable the same way as the grid, with an Include Cleared toggle off by default so a clear’s own audit trail doesn’t crowd out what’s still live. AI Assist adds a search box that turns a plain-language question into the register’s own filters, seven proactive cards (outstanding to close, near-duplicates, an intercompany net-zero gap, changed vs. last close, confirmed in ERP, aging & owners, and already reversed) with an optional narrative sentence beside their figures, and per-posting advice — a reversal draft or, for a rejected or in-doubt posting, why it failed and what to do next. Every card and draft is computed live over your own grants, and none of it applies anything: reversing and retrying stay separate, gated actions. Trends breaks down failure rate and latency by connection or ERP type, Lineage drills a posting back to the workflow run that produced it and out to its document in the ERP, and Control Totals groups postings into batches and states a balanced, imbalanced, or indeterminate verdict for each, with a reason attached and money left blank rather than zero wherever it wasn’t captured or confirmed. Exports & Alerts downloads the register as CSV or JSON — masked, unless you hold the top security tier — and schedules a recurring export or an alert on a failed post, an aging authorization, or a reversal, sent to named recipients under each of their own grants; a schedule’s cadence now fires on its own, daily, weekly, or monthly, alongside Send Now for whenever you want it immediately. Closing a period seals its postings into a permanent, immutable snapshot you can read back as of that close, and requested closes are now picked up and sealed automatically on a daily schedule rather than waiting on us — a close that can’t be sealed on a given day is retried rather than left stuck, the exception being an unusually large close, over roughly 500,000 postings, which needs our help to close in smaller batches. The detail drawer covers the request and response, errors, the posting’s timeline, and an audit trail, plus a Reverse control that walks an eligible posting through a type-to-confirm challenge and, if an attempt ever stalls unresolved, a separate resolve step — the same reversal the API has always offered, now reachable without leaving the console — and threaded comments with @mention, a sign-off you can mark Reviewed, Cleared, or Needs Follow-up, and a watch toggle for a connection or a run, with every notification scoped to what the recipient can currently see and never carrying the posting’s money. A reversal at or above your tenant’s configured segregation-of-duties threshold now requires approval before it proceeds, and approval is something an approver does, not a name the submitter supplies on the request: it routes to every approver who holds a live grant on that connection, and an approvals inbox lets an approver open the queue of reversals waiting on their decision, see the posting’s detail, and approve or reject it, with a second queue showing the requests they’ve submitted themselves. An approval is bound to the exact posting, connection, reason, and target period it was granted for — change either of the last two and a fresh approval is needed — and it can be spent only once, with one open request allowed per posting. A short hold follows approval, during which either party can still cancel it, and everything is re-checked the moment the reversal is actually applied: the approver’s role, both parties’ access to the connection, and the tenant’s two-approver minimum, so an approval doesn’t survive the approver losing access in the meantime. Recent reversals on the same connection still count toward the threshold, so a large one can’t be split into several smaller ones to dodge it, and a refusal never reveals which of several possible reasons caused it. An approver can also delegate their authority to another member for a bounded window — self-delegation, reciprocal pairs, and delegation chains are all refused, a delegate can’t approve a request from the person who delegated to them or a request of their own, and a delegated decision is recorded in the audit trail as exactly that. Escalation alerts a recipient when an approval has been waiting too long, scoped so they’re told only about requests they could actually decide themselves, and carrying no amount or free text. Break-glass is unchanged: it remains the one path where the submitter names who authorized an emergency override directly, gated on a separate admin role and permanently audited. This covers reversals initiated from the Posting Register; ERP posting through the project-level API isn’t covered by it yet. Intercompany runs — the postings tied to one close day and sequence — now get their own reversal, tie-out, and pairing, run-wide instead of one posting at a time. Reversing a run checks every leg before touching an ERP, so one leg that can’t be reversed refuses the whole run rather than reversing it halfway; anything that can only be discovered once dispatch is already underway is instead reported leg by leg afterward, with nothing auto-corrected on your behalf, and re-running the same reversal finishes off whatever legs are still outstanding without re-touching the ones that already went through. A run’s legs are also tied to zero per currency and matched into payable/receivable pairs, with anything that can’t be verified — a missing counterparty, a currency mismatch, an amount not yet captured — named rather than guessed at, and a run too large to check in one pass reports its tie-out and pairing as unknown rather than computed over only part of it. Where your tenant requires segregation-of-duties approval, a run reversal still needs one approval per leg rather than one for the whole run, but a submitter can now open every leg’s approval request in one call and an approver can decide every leg they’re qualified for in one call, rather than working leg by leg; break-glass isn’t offered for a run — only for a single posting. This ships today over the API; nothing yet stamps a close day and sequence onto a posting as it’s made, so until that lands, it correctly reports zero runs. Four independent security scopes — view, operate, approve, and admin — control who can open the console and what they can do inside it, bundled into four built-in groups for convenience, and bulk actions additionally require the operate tier and your personal grant on the connection involved. Visibility follows your existing connection and project grants — an explicit personal, group, or ownership grant on the connection, not merely a connection open to the whole workspace — so a reviewer only ever sees postings they were already entitled to see. The register is built for data minimization: bank, routing, IBAN, tax-id and other personal-identifier fields are stripped from every payload, the ERP’s business key is withheld entirely in favor of the ledger id and the ERP’s own confirmation id, and free-text fields are scrubbed of dimension and worktag values. See Review the Posting Register.

  • A cost-trace answer’s year-over-year verdict now says what it is a verdict about. The word came first and the thing it judged came several clauses later — “YoY: normal — 62% the size of last year’s move in absolute terms” — so a reader scanning the line stopped at “normal” and took it as a verdict on the whole answer. It rates one thing only: how big this period’s change was against the last one’s, in currency. It says nothing about whether the money went where it should have, and nothing about the confidence in the rest of the answer. The verdict now carries that scope on the word itself — “YoY: normal in size” — the way it already did where the two periods moved in opposite directions, and it carries it on the shorter forms of the line too, including the one that withholds the percentage because the multiple is too large to read. This tells you what was weighed; it weighs nothing new, and no figure changes. See Analyze Allocations With an AI Agent.

  • A cost-trace answer that names a leading factor now says that figure is not a share of its member list. The answer gives the factor a percentage of the change — “the shift in this slice’s share of the pool … explains 73% of the move” — and prints, below it, a member list that accounts for the whole of the same change. Both are right, and that is what sends a reader hunting: the two are cuts of one change on different axes, one between the factors behind it and one between members, and neither is part of the other. On one tax model a reader chasing the 73% through four accounts at 55.6%, 23.9%, 12.7% and 7.8% found no combination of them that made it, because there is none. The list now says so above its rows, so it travels with them when they are copied out. It appears only where the factor percentage is under 100% — at 100% there is no remainder to go looking for — and where the rows shown account for the whole change; a list showing only the largest movers already says its rows do not add up. No figure changes. See Analyze Allocations With an AI Agent.

  • A cost-trace answer narrowed to one member now says whose change its list of movers breaks down. That list is the part of an answer most likely to be copied out whole, and it was headed by the breakdown alone — “All movers by account” — while the whole table’s change on the same column is printed above it. So the last scope you passed on the way down named the wrong population, and the rows below it did not add up to the figure above them. Nothing about that looks wrong: the rows are exact and they add to the narrowed change exactly, so reconciling from the top gives a self-consistent wrong answer with nothing to prompt a second look, and each member’s share of the wider move comes out wrong by whatever the rest of the table did. The heading now names the narrowing, between the breakdown and the column the rows are ranked on — “All movers by account within entity=EU_DIST”, “All movers by branch within lob=COMMERCIAL — net_contribution”. It reads within rather than for because the breakdown is often by account, and “by account for entity=EU_DIST” is read as the verb before it is read as the scope. An answer covering the whole table reads exactly as before, and no figure changes. See How the Assistant Stays Honest.

  • A cost-trace answer narrowed to one member now says where the rest of the table moved the other way. The answer already prints the narrowed change and, beside it, how the whole table moved on the same column — and left the subtraction between them to you. On one tax model a line was up $3,834,183.58 inside a table up $3,196,800.00, which means everything outside that line came down $637,383.58; on an insurance model a line was up $4,650,016.11 inside a book down $23,755,719.72. Both are the same story — the line gained share in a pool going the other way — and both read as ordinary growth to anyone who did not do the arithmetic. Where the movement outside the narrowed rows runs against them, the answer now states its amount and direction and names the column it belongs to. Where it runs the same way, which is the ordinary case, nothing is added. Both figures it is drawn from are printed above it, so the arithmetic can be checked on the page. No figure you already see changes. See How the Assistant Stays Honest.

  • A cost-trace answer covering several value columns now offers a next step where it had none. Its list of movers breaks one column down by member, while the other columns are reported for the slice as a whole — so what the page cannot tell you is what a single member did across every column: which branch took most of the funding-charge fall, and what its interest income did at the same time. On an answer whose only other content was findings, that left the page ending with nothing to run. It now suggests narrowing to one member of the list — the heading above the rows names the field they are cut by — and says the rows above cover one column. Where the answer already offers to narrow for a stronger reason, it keeps the offer it had. No figure changes. See Analyzing Allocations with AI.

  • A cost-trace answer whose upstream table is written by more than one step no longer offers to attribute the change to one of them. Where two steps write the same table the answer stops there and asks you to pick one, listing each step with the id to paste. The offer read as a way to get that step’s own number. It is not: picking a step decides which one the trace follows in, and where the steps’ rows overlap the figure that comes back covers all of them — which the answer’s own limits already said, and is why it would not pick a step for you. The offer now says what running it does, and the line describing that step of the trace states that more than one enabled step produces the table rather than that one of them might have. No figure changes. See Analyzing Allocations with AI.

  • A cost-trace member list cut by more than one field now says when every row it shows sits on the same value of one of them. Ask why a figure moved and you can have the change broken down by more than one field at once — account and sales document, say. Where the list shows only its largest rows, every one of those rows can land on the same account, so one of the two fields you asked for does no visible work and nothing said so — and on one model all twenty rows did, while other accounts existed. A reader could not tell whether that was the only account or merely the one with the biggest single rows, and those point at opposite next steps: the first says the account question is settled and the story is in the documents, the second says the rest of the movement sits on an account this list never reached. The list now names the constant field and its value, says which field the rows do differ in, and says that rows are ranked one at a time — so movement spread across many small rows does not reach a list of the largest. A list whose rows genuinely span its fields gains nothing, and a complete list is unchanged: there a single value is a fact about the data rather than an artefact of the ranking, and there is no unshown remainder for another value to sit in. No figure changes, and this says nothing the line sizing the shown rows against the whole change already says. See Analyzing Allocations With AI.

  • A cost-trace answer covering several value columns now says when those columns did not move at anything like the same rate. Ask why a figure moved on a table that reports several columns at once — revenue alongside cost, income alongside the charges deducted from it — and the opening line says which way the other columns went. On one automotive model the three columns moved 0.2%, 4.1% and 38.0%, and that line gave the leading column’s 38.0% and then said only that the other two were down. It is the line most likely to be forwarded on its own, and a reader given it alone came away believing every column had fallen by something like that much, when one of them had barely moved — a wrong size, not a vague one, and it points at a different problem and a different conversation. Where the column the answer leads on has moved several times further than the rest, the line now adds that the others moved by much smaller percentages; where the rates are far apart but the leading column is not the outlier, it says only that they differ. Columns that moved at comparable rates read exactly as they did, in one word, and the line is unchanged wherever the answer prints no percentages to check it against. No figure changes. See How the Assistant Stays Honest.

  • A cost-trace answer covering several value columns now states a second exact relation between them. An answer over several columns already says how they add up — that one column is another less two more, say — and stopped there. A second relation sitting in the same figures went unsaid: on a banking model the capital charge was exactly four tenths of the funding charge in both periods, and a reader told how the columns add up stops looking for further relations, reading two charges as independent cost lines when they are one quantity counted twice. The answer now names that ratio and says the two therefore moved at the same rate — or, where the ratio holds across a change of sign, that they moved in proportion; where a wider group of columns holds one, it names the group instead. The note that one column is small enough for a given dollar amount to be a larger percentage of it than of the others is now left out wherever the figures beside it already show that column moving at another’s rate — which is precisely where it set up a difference they then denied.

  • A cost-trace summary now says how much of the depth it reports actually carried a figure. Ask why a figure moved and the summary closes by saying how many steps back it traced. That count is the only thing on the line saying how far it got, and the summary is the part most likely to be forwarded on its own or read by an assistant with none of the page around it — so a reader takes the depth as corroboration. On one model the summary said it had traced two steps upstream while the step-by-step account below showed the second one returning nothing at all. The line now reads “Traced 2 stages upstream; only 1 of the 2 came back with a figure — no figure at all for the remainder”, which says that the second step was reached and came back empty rather than that its change was nil. A step whose change was measured but could not be pinned on a single producing step still counts, because a measured change is evidence, and that it could not be attributed is already stated under Honest limits. No figure changes, and a summary whose steps all returned a figure reads exactly as before. See How the Assistant Stays Honest.

  • A cost-trace answer that reports medium confidence now tells you what the limit is, under Honest limits. Where part of a change comes from several effects moving at once rather than from any one of them, that is the reason the answer is rated medium — and on an answer covering a single figure it was said only in brackets beside the rating, twice on the same page, with no Honest limits section at all. A reader was handed a grade, the same sentence twice, and nothing to act on, and could not tell an answer that had been checked from one that had not. The share and what it means are now stated once, where every other limit is stated, and the rating keeps its short label. Answers covering several columns are unchanged. No figure changes. See How the Assistant Stays Honest.

  • A cost-trace answer about a table that recombines several allocation branches now names each branch the same way throughout, and says what the branches are to one another. The list of branch figures named a branch by the step that builds it while the step-by-step account below named the same branch by the table that step writes, with nothing on the page linking the two — readable only on models where a step name happens to contain its table’s name, and guesswork everywhere else. Each branch figure now carries both names. The opening line also says the branches are separate paths that never feed one another, and, where the figures shown do come to the combined total, that they sum to it: “recombined” was the only word asserting that, and readers asked to draw the model from the headings alone drew a chain of four steps instead of four steps side by side. No figure changes. See Analyzing Allocations With AI.

  • A cost-trace answer narrowed to one slice of a recombined table now says how each branch’s whole table moved. Every branch line names the change in its own pool as the thing that branch’s move was measured against, and the size and direction of that pool appeared nowhere — so a slice falling inside a book that fell just as far read as a problem of its own. An unnarrowed answer over a single table has stated its whole-table comparison since it shipped; a recombined table was left out, because its branches are separate tables and there is no single whole table to name. Each branch’s own table is now listed over the same two periods, named on every line, with the narrowed rows included in it. No figure changes. See How the Assistant Stays Honest.

  • A cost-trace answer no longer offers to break a change down by a field whose breakdown is already on the page. Ask why a figure moved without naming a field and the assistant picks the one that best explains the change, then lists every member’s move under it. On an answer covering a single column, the field it picked is the field that member list is grouped by — so the suggestion to “break the change down by that field” came back with the same table, and the note beside it warned that the figures would not match the ones you had just read, when they match exactly. A warning you can check and find false is worse than none: it teaches you to discount the other suggestions on the page, including the one worth acting on. The suggestion is now left out where it would return what is already in front of you — and where the search scored a second field, the answer offers that one instead, so you get a view you do not already have rather than one fewer next step. Where nothing else scored it is simply dropped, unless it is the only next step on the page, in which case it stands rather than leaving you with none. Where the breakdown would genuinely answer on a different column — a table reporting several columns at once, where the assistant searched one and the answer leads on another — the suggestion is unchanged, because there it really does return something new. See Analyzing Allocations With AI.

  • A cost-trace answer no longer promises that a member’s percentage will differ from the figure it quotes. Where the assistant picks the field that best explains a change, the share it reports is that field’s shift in share of the pool, and a breakdown by the same field reports each member’s own change. Both are correct, they are different measurements, and the answer has always said so — but it went on to promise that “the number for a given member will not match this figure”, which set up a comparison that cannot be made: no member breakdown prints a per-member percentage in any answer, the rows are amounts. Follow the suggestion and you got money figures, found nothing to check the warning against, and reasonably concluded the honesty notes were noise. Both the limit and the suggestion now say only what the two measures are and stop there. No figure changes, and the distinction between the two measures is still stated wherever it was before. See How the Assistant Stays Honest.

  • A cost-trace answer no longer calls an offset “partial” where it cancelled most of the movement. Where one member’s rise or fall is larger than the whole net change, the line naming that member closed with “others partly offset”. That one word covered everything from a couple of per cent to over ninety: on an insurance model where one account moved $22,067,919.71 against a whole net change of $1,792,719.72, opposite moves had cancelled more than nine tenths of that account’s rise, and “partly” told a reader close to the opposite of what happened. The line now says the movement was offset by opposite moves elsewhere and characterises the size no further. No figure changes. See Analyzing Allocations With AI.

  • A cost-trace member list no longer includes members that did not move. Where the list shows every member, two accounts identical in both periods appeared as rows at $0.00 under a heading that says movers — so a list read as a ranking handed you rows carrying no movement, in the block most likely to be copied into a slide. Members whose change is exactly zero are now left out. A list where nothing moved at all is shown as it was, since the alternative is a heading with no rows under it, and a list showing only the largest movers keeps them, because there a $0.00 row tells you the ranking has reached the bottom of what moved. No figure changes, and the rows still add up to the change they break down. See Analyzing Allocations With AI.

  • Table Explorer’s column details panel profiles every column, flags data quality issues, and shows how numeric columns relate to each other. Select a column and its statistics include null count and percentage, and — for text columns — blank count and percentage (a blank being empty or whitespace-only, distinct from null), plus distinct values as a percentage of non-null rows. Numeric columns also get a skewness figure showing whether their values lean to one side of the average, a histogram showing the shape of their distribution across 10 buckets, and Pearson and Spearman correlation coefficients against up to 10 other numeric columns in view, scoped to the rows that have a value in all of them. Every column is also checked against a five-part data quality radar — outliers, format mismatches, duplicate values in a declared row key, dimension members not found in a linked dimension, and constant columns — with badges on the column itself and a ranked summary window opened from the Actions menu. All of it is computed deterministically, respects row-level security so you only ever see it for rows you’re entitled to, and — except for the correlation coefficients’ own row scope — is independent of any filter you’ve applied. The existing Min, Max, Mean, Sum, and Standard Deviation continue to appear for numeric columns and continue to respect your current filter. See The Details View.

  • A cost-trace confidence line no longer follows the column it rates lower with a reassuring word about all of them. Ask why a figure moved on a table that reports several columns at once — income alongside the charges deducted from it — and the answer names any column it is less sure of before giving an overall rating: “medium for the net_contribution column (gross offsetting); high overall across 4 columns”. The overall rating is an average weighted by how much each column moved, and a summary column is the difference between the others, so it is the smallest mover and carries the least weight in its own rating. On a real banking model the three columns outvoting it were the income and charges it is made of — the same movement counted twice — so “high overall” was reassurance about columns nobody had asked about, sitting on the one figure the whole answer is built on. A reader skimming to the end of the line took “high” away. Where the column rated lower is the one the answer is about, the line now states the stronger rating of the other columns — “high for the other 3 columns” — instead of claiming it overall. No rating changes, and the weaker column is still named first, as before. Where the lower-rated column is not the one the answer leads on — a column the assistant chose to search, say — the line is unchanged, because the overall rating is then about the column you asked for. See Analyzing Allocations With AI.

  • A cost-trace answer now says on the same line that a “100%” split is arithmetic rather than a cause. Ask why a figure moved and the step-by-step account at the end reads “dominant: the value coming in explains 100% of the move”. An allocation shares out a pool without changing its size, so where a whole-pool answer credits all of a movement to the value coming in, that figure is arithmetic and not a finding about what drove anything — which the answer said, in a different section, and in a short form beneath only one kind of step. Every other step’s line said only that the split describes the whole pool, which reads as a note about scope; so on a four-column banking answer the same 100% appeared four times and was called mechanical once, and the one marked step read as the only doubtful one. The line beneath every such step now says the split is arithmetic and not a driver finding. It quotes no percentage of its own, because that one line also prints where an answer withholds the split entirely, and beside a different column’s figure in the opening summary. No figure changes, and steps that measured a genuine leading factor — a question narrowed to one member — read exactly as before. See Analyzing Allocations With AI.

  • Templated emails gain variables and one-click formatting. The Notify Via Email step’s template editor now reaches your project and workflow variables — insert any of them from the Insert menu, or reference them as variables['<name>'], alongside the built-in project, model, and run-date values. A new Style menu wraps the selected text in email-safe HTML formatting — bold, italic, underline, headings, bulleted and numbered lists, block quotes, and links — without hand-typing tags. See Send Templated HTML Email Notifications.

  • A cost-trace answer now says in full which of two measures a member’s share is on. Ask why a figure moved and the answer can name one branch, programme or entity as most of the change — and that share is measured one of two ways. Either the member moved on its own, or it took a larger slice of a pool that was moving anyway, and on a transfer-pricing or allocation model the difference is whether the member’s own conduct explains its figure or the basis moved underneath it. The first of those closed on three words, “its own change”, tagged onto the end of the figure. Readers could not tell which measure it named, and the reading it most invited was the other one — that the member had barely moved and merely gained share. The answer now says the share is the member’s own change and not its share of the pool shifting. The second measure’s wording is unchanged, and no figure changes. See How the Assistant Stays Honest.

  • A cost-trace answer now reconciles a charge concentrated in one member with a ranking that puts that member last. Ask why a figure moved on a table that reports several columns at once, and the answer can name one branch, programme or entity as most of the change in a charge column while the member list beside it ranks that same member last of four. Both are true — a member whose charges fell alongside its income nets out to almost nothing — but nothing on the page said so, so the two blocks read as contradicting each other, and the natural conclusion was that one of them must be wrong. The member list now says, above the rows, which columns the ranking subtracts, so a member large in a charge and small on the net reads as arithmetic rather than as a mistake. The answer does not claim that is what happened in your figures — only that it can — because saying so needs a measure the answer does not always have. It says nothing at all where the columns do not add up to one another, since there is nothing in those figures that identifies a charge, and nothing where no member is reported as concentrated. See How the Assistant Stays Honest.

  • A cost-trace confidence rating covering several columns no longer says it is rating a breakdown only one of them has. Ask why a figure moved on a table that reports several columns at once and the answer can break one of those columns down by a field — programme, line of business, branch — and list its members. The rating above that list named the field and then counted every column: “in this breakdown by programme, high across 3 columns”, while telling you a few lines below, under Honest limits, that two of the three describe the whole pool only. Read as written it promised three member breakdowns where there is one. The rating now says it is in the figures, and the member list keeps naming both the field and the column its members belong to, in its own heading. An answer covering a single column is unchanged and still names the field: there the rating and the breakdown cover the same thing. See Analyzing Allocations With AI.

  • A cost-trace summary’s confidence rating now says it covers the breakdown, not the cause — and what qualifies it stands apart from it. Ask why a figure moved and the answer opens with a one-line summary that can name a likely cause, point at the member behind most of the movement, and size the change against last year, before closing with a confidence rating. That rating has only ever covered how the change was broken down and traced back through the steps behind it — never whether the causes above it hold — but nothing on the line said so, and a reader who stopped at “high” took the lot as settled. The line now reads “Confidence in the decomposition, not in why it moved: high”, and leaves off the second half where the summary named no cause, so it never disowns a claim it did not make. Anything qualifying the rating now follows as its own sentence under Caveats:; previously a dash joined the two, and a dash reads as because, so a high rating appeared to rest on the very limit standing beside it. This is the part of an answer most likely to be forwarded on its own, or read by an assistant with none of the page around it. Nothing about the rating itself changes, and the qualifications are unchanged and still set out in full further down. See Answers You Can Trust.

  • A cost-trace confidence rating now says what it is rating where the answer has already withdrawn the cause. An allocation shares out a pool without changing its size, so on an answer covering the whole pool the split between “the value coming in” and “the driver” is forced by that arithmetic rather than measured — which the answer sets out twice, once under Honest limits and once against the traced stage. The rating above all of that read “high (clean attribution)”, so a reader who stopped at the confidence line — which is where a reader in a hurry stops — took the cause as settled while the same page was withdrawing it a few lines further down. The rating now reads “high across 3 columns (clean attribution — rated on the arithmetic, not on why it moved)”, so the line refuses that reading on its own rather than relying on being read alongside the limits. The rating itself has not changed: the figures still tie out, and they are still rated high. Where the split was genuinely measured, and where only some of the columns cover the whole pool, the line reads exactly as before. See How the Assistant Stays Honest.

  • A cost-trace answer no longer rates several columns with one reassuring word when it has set out a limit on one of them. Ask why a figure moved on a table that reports several columns at once and you get a single confidence rating covering them all. Where the columns all rate the same there is no weaker one to name — but one of them could still carry a limit under Honest limits, and on a real banking model the line read “medium across 4 columns” twelve lines above a limit on the very column the answer leads with. The rating now closes by naming any column carrying such a limit, so the two are read together rather than one contradicting the other a screen later. The limit itself is not repeated in the rating — it is a statement about how a change divides between its causes, not about the figure being weak, and it stays in full under Honest limits. Where every column carries the same limit the rating is unchanged, because the breakdown already says so once above the figures; and where a column is already named as less confident, that naming stands as before. See How the Assistant Stays Honest.

  • A cost-trace answer no longer sums up several columns as all moving the same way when some of them are charges. Ask why a figure moved on a table that reports several columns at once — income alongside the charges deducted from it, or revenue alongside cost — and the opening line used to close with a count: “with all 4 columns down”. Two of those four falling were charges, and a charge falling is relief rather than more bad news, so a single count made four different movements read as one story. Where the columns add up to one another exactly, the opening line now names them instead and says which of them the headline figure subtracts, so a fall in a charge reads as what it is. Columns that all count the same way are unchanged, and so are columns that do not add up to one another — there is nothing in those figures that identifies a charge, and the answer does not guess. See How the Assistant Stays Honest.

  • A narrowed cost-trace answer now shows how the whole table moved. Ask why a cost moved for one line of business, entity or programme and you get that member’s own figures — which mean little on their own. A line that grew 4.2% inside a book that shrank 6.2% is a different story from one that grew inside a book that grew, and the same number describes both. The answer now lists, beside its own figures, how the whole table moved over the same periods on each column it reports, and says that the narrowed rows are part of that total. Where the two disagree in sign — the member negative at both ends of the period while the table is positive at both — the answer says so in words rather than leaving it to a minus sign. Nothing new is measured: those figures were already what the narrowed change was compared against, and were simply never shown. An unnarrowed answer is unchanged, since it already reports the whole table. See How the Assistant Stays Honest.

  • A cost-trace answer now says whether it covers the whole table or one member of it. Ask why a cost moved and you get a figure; ask the same question narrowed to one line of business, entity or programme and you get another. Read one after the other, the two used to look alike, so the narrowed figure could be taken for a component of the wider one — and it need not be, because the members left out can move the other way. Each answer’s opening line now says which it is: a narrowed answer states that it is that member’s own totals in each period with the rest of the table set aside, and an unnarrowed one states that its figures are the table’s own totals in each period with every member included. Where a narrowed answer’s figures are negative at both ends, its percentage carries no extra note, because the answer already says the balance went further below zero. The unnarrowed statement is left off where the answer has already reported a gap in its own working — a table that recombines several allocations, one of which could not be attributed — so it is never read as a claim that nothing was left out. See How the Assistant Stays Honest.

  • Builder-seat limits are now enforced. Inviting a new Builder, promoting an existing member to Builder, or reactivating a disabled Builder is blocked with a clear message once your plan’s builder-seat limit is reached, instead of being silently allowed past it. Viewers remain free and unlimited on every plan. See Viewer vs. Builder.

  • Loading a hierarchy into a dimension is much faster on large dimensions. Each row of a load re-read the whole membership of the hierarchy it was loading into, and of the main hierarchy, just to answer three yes/no questions about that row’s own parent and child. Most of a load’s time went on that reading, and the cost grew with the dimension — roughly quadrupling each time the number of members doubled — so a load did not merely take longer on a larger dimension — it got slower as it went. Those three questions are now asked about the two members concerned rather than by fetching every member, so the work per row no longer depends on how many members the dimension already holds. Nothing about what a load does changes: the same rows are added, moved, or refused, with the same messages. The gain is largest on a dimension whose main hierarchy is empty or sparse, where every row took the slowest path.

  • A cost-trace answer that names the leading factor behind a change now tells you what to ask next. Ask why a figure moved and the step-by-step account can name what most of the movement came from and put a percentage on it — “the shift in this branch’s share of the pool explains 60% of the move”. Those were the answers with the most worth following up and the ones that ended with nothing suggested, because the usual next steps did not fit: narrowing to one member is advice an already-narrowed question has taken, and breaking the change down by a field needs a field that explains it, which this shape does not have. The answer now closes by saying that each such percentage is measured once, across the whole of the period you compared — so a move that happened in one jump and one that built steadily give the same figure — and offering to re-run over several narrower periods and compare those against each other, since one narrower period on its own is the same two-point comparison again. It adds that those narrower figures will not sum to the one above, because each period is measured on its own. It names no particular period, because which part of the range matters is yours to choose. No figure changes; an answer already suggesting a period fix because a step could not be aggregated keeps that more specific suggestion, and an answer comparing two scenarios, versions or budget against actual gets no such suggestion, since there is no narrower range to run. See Answers You Can Trust.

  • A cost-trace answer that says its figures cover every step writing a table no longer offers to measure one of those steps by itself. Where a second step writes rows into the same column the answer is summing, it says so, withholds the split between the factors behind the change, and offers you a look at each of the other writers. That offer said it would measure the named step on its own — and the overlap that made the answer withhold the split in the first place is exactly what stops it: the change that comes back still covers every writer. So the page promised and denied the same thing, three lines apart, and the promise was the half carrying the id you paste. Both the offer and the limit beside it now say the same thing — running it follows the change back in through that step instead, and what comes back is a separate measurement rather than that step’s share of the change shown. The answer still leads on its figures being exact. No figure changes. See Analyzing Allocations with AI.

  • Copying a folder in Document now copies it, on OneDrive and SFTP accounts. Dragging a folder onto another offers Move Folder or Copy Folder, and on those two account types both choices were carried out as a move. On an SFTP account, choosing Copy renamed the source folder away — so the folder you asked to copy stopped existing, and the browser reported success either way, including when the move itself had failed. If you have copied a folder on an SFTP account and later found it missing from where it was, it was moved to the destination rather than lost — look for it there. On a OneDrive account neither choice worked at all: Copy Folder, Move Folder and renaming a folder each failed outright. All three now work, Copy leaves the original where it is, and a move that cannot be completed says so instead of reporting success. Copying and moving a folder on a OneDrive account also work now for AI assistants connected over MCP, where they had never run. Amazon S3, Google Cloud Storage, Wasabi and Azure accounts were never affected. See Using Document.

  • Copying and moving a file on an SFTP account work again. Both ended in an error every time, and the error was not the whole story. Where the destination folder already existed the file had in fact been copied, so a copy reported as failed had happened, and a move left the file in both places instead of moving it; where the destination folder did not exist, nothing was copied and nothing created the folder. Worth checking: an SFTP file move you were told had failed may have left the file at the destination as well as where it started. Both operations now do what they say, and create the destination folder where one is needed.

  • A cost-trace summary now says its figures are changes, and over which two periods. The one-line summary an answer publishes for forwarding — into a chat reply, a dashboard tile or an automated step — listed each value column’s change as a bare figure, interest_income=$6,177,792.16, and named no period anywhere. Read on its own it was taken for the period’s closing balance, and on a table where one column is the others netted the figures still balance under that reading — so a reader who checked them against each other got a self-consistent wrong answer, with nothing prompting a second look. Given only that line, three independent readers each reported a line of business losing $3.0m, where it was $12.9m down already and had fallen a further $3.0m. The line now leads its figures with the window they are a change over and signs the ones that rose. It also no longer gives one blended rating over columns the answer below it rates differently: where a column is rated lower, that column is named first with its rating and the reason for it, and the rating for the rest follows. An answer about a single value column is unchanged, an answer whose columns agree reads as it did, and no figure moves. See How the Assistant Stays Honest.

  • The faithfulness check now reports on an answer whose fields arrive in the wrong shape, instead of failing outright. Every cost-trace answer comes with a check your assistant can run on the version it reworded — did it keep the confidence rating, keep every limit, invent no figure? The check is handed the original answer alongside the rewrite, and an assistant that rebuilds that answer rather than passing it through can get a field’s shape wrong. Two of those fields brought the check down with an error rather than a verdict: the answer’s opening summary arriving as a number, a list or a structure in place of text, and one of its stated limits arriving labelled with a list or a structure in place of a name. Every other misshapen field was already reported around. Now these two are as well — a summary that isn’t text is left out of the report rather than printed as one, and a limit with an unusable label still reaches Honest limits word for word, with only the label dropped. A well-formed answer is unchanged, and so is everything the assistant writes. See How the Assistant Stays Honest.

  • A cost-trace answer no longer says a change was offset by opposite moves and then rates that same breakdown a clean one. The line naming the member behind a change said movement in both directions had canceled out as soon as that member’s own change edged past the whole net change, while the confidence beside it only counted the offsetting as material a good deal further on. So an answer whose largest line came in a fraction over the net said both things on the same page, with nothing to say which to believe — and the identical sentence had earned a lowered rating on two other answers. That line now says moves offset each other only where the offsetting is large enough to lower the rating, and below that gives the member’s percentage instead. The percentage is given to one decimal place where it goes above 100%, so the small excess over 100% is not distorted by rounding. Answers where the offsetting is material are unchanged, the separate line naming which factor moved is untouched, and no figure moves. See How the Assistant Stays Honest.

  • A cost-trace confidence rating no longer describes the cleanest of several columns while a worse one goes unmentioned. Where an answer covers several value columns graded alike, it took whichever column came first and gave that column’s reason, and its own residual share, as the answer’s — so an answer whose worst column had 91% of its movement in the part no single factor accounts for was published as mostly clean, with 6%. Where any column’s movement is dominated by effects that cannot be separated, that is now the reason the rating gives, and no share measured over the other columns is quoted with it. An answer whose columns agree is unchanged, and no figure you see moves. See How the Assistant Stays Honest.

  • A cost-trace summary now states its confidence wherever the answer carries a limit. The rating was left off altogether where no step behind an answer raised a warning of its own, even where the answer as a whole carried one — a four-column answer that could not be sized against last year ended on its figures with no rating at all, while the report below it carried both the grade and the limit. That summary is the line most often forwarded on its own, into a chat reply, a dashboard or an automated step, where silence reads as nothing to say. It now states the rating and names the limit. A summary that already stated a confidence is unchanged, and an answer with nothing to flag still closes without one. See How the Assistant Stays Honest.

  • A cost-trace answer no longer suggests narrowing a period it has just asked you to check. Where one of the two periods holds far fewer rows than the other, the answer says so and asks for the load to be checked before the change is relied on — and then, a few lines further down, used to offer splitting that same period into narrower ones as the next thing to try. Narrower windows scatter a shortfall rather than resolving it, and the row count that raised the doubt gets weaker in every one of them, so the suggestion is now left out there. It is also left out where an answer covers several value columns and the column it leads with carries no percentage of its own: every percentage the suggestion would qualify then belongs to a column you did not ask about, so it read as a limit on your answer while touching none of it. Answers whose own leading figure the suggestion is really about are unchanged. See How the Assistant Stays Honest.

  • A cost-trace member list says two members are shown at the same amount, not that they moved by exactly the same amount. The comparison is of the figures as printed, to the cent — and the line can sit directly beneath one saying those same figures are rounded and do not add up to the change. Read together, one claimed an exactness the other had just qualified, leaving a reader to work out which to believe. No figure changes and no row is reordered; what the line asks of you is the same. See Analyzing Allocations with AI.

  • A cost-trace member list no longer reads as a ranking where two members tie. A list of members is a ranking, so where two rows show the same amount the one printed first reads as the bigger problem — and nothing separates them. On one automotive model two cost centres each moved -$1,738,461.53 and the page gave no way to tell that from a genuine first and second, so the wrong one would be briefed off it. The table now names those members above the rows and says the order between them is not a ranking. Where a table shows only the largest movers and the cut itself fell on a tie, it also says a member just as large was left out, which is the case where the tie decides not merely the order but which member you see. It does not claim how the order was chosen, since that is not always checkable. No figure changes and no row is reordered, and members that did not move at all are not described as tied — there is no ranking between two nothings to disown. See Analyzing Allocations with AI.

  • A cost-trace answer’s stated change now agrees with the two levels stated beside it. An answer opens with where a figure started and finished and gives the change between them, and all three were rounded to the cent from their own exact totals — so where two of those roundings fell either side of a half cent, the three did not agree. One tax answer read from $25,999,193.60 to $29,833,377.18 and gave the change as $3,834,183.59: a cent more than the difference between the two figures printed with it, and a cent more than the account rows underneath added to. Each figure was within half a cent of its own exact total and nothing on the page said which was the odd one, so a reader who checked by hand came away certain something was wrong and unable to say what. The change is now the difference between the two levels as printed, so subtracting them gives the figure the answer states. Nothing else moves — not the two levels, not the member rows, and not the percentage, which is taken from the exact totals rather than from the rounded ones. See Analyzing Allocations with AI.

  • A cost-trace member table now adds up to the change it breaks down. Each row is rounded to the cent for display while the change itself is rounded once, so on a large movement the column you add up by hand could land a cent away from the figure the answer opens with — with nothing on the page to say whether that was rounding or a mistake. Where the two differ, the table now carries a line above its rows giving both figures and saying the difference is the rounding. No figure changes: no row is nudged to force the tie, so every row still matches its source exactly. A table showing only the largest movers is unaffected — its rows are meant not to add up, and it already says by how much and why. See Analyzing Allocations with AI.

  • The faithfulness check now catches a rewritten answer that deleted its limits. Every cost-trace answer comes with a check your assistant can run on its own reworded version: did it keep the confidence rating, keep every limit, and invent no figure? An answer’s opening summary closes with a short form of the same limits set out below it — by design, so that line still carries them when it is forwarded on its own — and the check read the whole answer. So a rewrite that kept the summary and deleted the Honest limits section it summarizes came back clean: the shortening an assistant is most likely to make, and the one thing this check exists to catch. Lines the answer itself wrote and the rewrite passed through word for word — its opening summary, its step-by-step account of how the change was traced, and the matching next-step suggestion — no longer count as stating a limit. A rewrite that puts a limit in its own words still passes, so does one that keeps the section, and so does one that states the limit somewhere else in the answer. No answer changes — nothing the assistant writes moves, only what the check will accept. See How the Assistant Stays Honest.

  • Trying to run a workflow that’s already running now tells you so. Clicking Run on a workflow that’s still running used to fail with a bare “Internal Server Error” and no explanation, in both the Workflow Detail window and the Workflow Canvas — it now tells you the workflow is already running, and a REST API client hitting the same endpoint gets an HTTP 409 Conflict with the same message instead of a 500. The fix covers the same “nothing was changed” class of condition everywhere it comes up — stopping an already-stopped workflow, editing a locked dimension — not just starting a workflow twice. See Run a Workflow.

  • A cost-trace answer comparing two scenarios no longer describes them as periods. Asking why a figure moved means naming two things to compare it between, and those need not be periods — point the comparison at a scenario, a version, a case, or budget against actual and you get a sound account of the difference between them. The wording around it, though, was written for a calendar. Comparing version 7 with version 8, the answer stepped back one and reported a year-over-year verdict sizing the change against version 6 — “275% the size of last year’s move; 6 → 7 moved -$400,000” — with every figure in it correct and the subject of the sentence wrong. It called the two versions periods, and called the one with fewer rows possibly still loading. An answer now works out whether the column it compares across is a period at all, from the column’s type, its name and the shape of the values you gave it. Where it is not, the opening line names the values compared rather than periods, no year-earlier verdict is offered and the answer says why under Honest limits, and a difference in row counts is described as a difference in what each side covers rather than as an incomplete period. No figure changes. The test is deliberately cautious — a column counts as a period if its type says so, or its name does, or the values look like dates, months, quarters or years — so a whole-number fiscal_year and a text 2026-03 are both still read as periods, and comparisons across a date, period, month, quarter or year column are unchanged. See Answers You Can Trust.

  • Connection fields display correctly — credentials masked, everything else visible. Twelve single-line credential fields across a dozen connection kinds — among them a Stripe access token, a Monday.com access token, a Bill.com password and developer key, several OAuth2 client secrets, and a Workday API refresh token — used to render as plain visible text in the connection dialog; they’re now masked the same way every other password field already was, and a saved value is never redisplayed once you leave the field. Three multi-line credentials (a Postman API key, a Slack incoming-webhook URL, a Teams incoming-webhook URL) are write-only the same way, though they stay visible while you’re actively typing them, since that kind of field can’t be masked. Separately, well over a hundred ordinary configuration fields — a database’s read-only flag, a Snowflake account name, a Postgres database, schema, or hostname, an SSL mode, an SSH port, among others — no longer show as __REDACTED__ the moment you set them, in the connection dialog or over the API; each now shows its real saved value. See Create and Manage a Connection.

  • An ERP posting step now previews instead of posting live when its own Validate Only setting is left unset. Every ERP posting step carries its own Validate Only setting (labeled Preview or Test Only Mode on some steps), separate from a run’s posting mode. The step editor has always saved this setting explicitly, but a step configuration written another way — over the REST API, over MCP, or through a workflow bundle import — that left the setting out entirely used to post live by default. It now defaults to preview instead, matching what the step editor has always done; setting it to post live on purpose still posts live. See Choose a Posting Mode.

  • A workflow can no longer end up with the same step listed twice. A workflow step can only appear once. A workflow’s structure used to be able to gain one step in two places — most often by retrying an attach or copy that looked like it had failed, when it had actually already gone through — and that duplicate was silently fatal to a run: a Standard Serial run, and a Standard Parallel run stopped at a chosen end step, got stuck in Running forever, with no error, nothing to stop or resume, and disabling the duplicated step didn’t help. (A Standard Parallel run to completion tolerated the duplicate and simply ran it once — that’s unchanged.) Every way of changing a workflow’s structure — inserting steps, copying a step, cloning a workflow, importing a workflow bundle, and the same operations through the REST API and MCP — now refuses a change that would create the duplicate, naming the step so you know what to fix. A workflow that already has a duplicate from before this fix now fails immediately with a clear error instead of hanging, and reordering it (including drag-and-drop) tells you the same thing rather than letting you keep working with it stuck. Delete the duplicate step to repair it — removing steps was never restricted. See Choosing a Workflow Type and Copy & Paste Steps.

  • Filtering a dimension hierarchy finds members by their property values again. The Filter: box at the bottom of the hierarchy window searches the alternate, alias, property and value columns you have showing, not just the member’s name in the tree — so typing an account code finds the members carrying it in a property. On the main hierarchy pane this had narrowed to matching the name alone, which is why a code plainly visible in a property column returned no rows; the alternate pane was never affected, so the same box behaved differently in the two panes. Choosing Alternate Hierarchy now also clears the filter from the main pane instead of leaving it filtered. See Finding Nodes in a Hierarchy.

  • The Advanced dimension filter can filter on properties, not only aggregations. Its Column list now offers every property column alongside the aggregations, and a property is compared as text — =, != or contains, ignoring case — against either a value you type or another column. Previously only aggregation columns were offered and any non-numeric value was refused, so a property could not be filtered at all; on a dimension with no aggregations the column list came up empty with nothing to pick. Advanced criteria also keep applying after the hierarchy refreshes, rather than lapsing without saying so. See Advanced Filters.

  • An AI agent tracing an allocation is no longer told a second, independent check confirmed the answer when no such check was possible. When you ask why a cost moved and narrow the question to one slice — a single programme, product line or legal entity — the answer carries a cross-check of that slice against the driver behind the split. Where you narrowed by the very thing the allocation shares out within (a programme whose cost is spread across cost centres, say), that cross-check was comparing a figure with itself, so it agreed every time and could never have done otherwise. Nothing you read on the page said so, but anything reading the answer’s underlying data — a dashboard, or an AI agent judging how far to trust the answer — took the agreement as independent confirmation. The answer now states that the check could not be made there, and why. Where the driver genuinely no longer accounts for the slice, the disagreement is still reported as before, and narrowing by any other column still gets the real check. The written answer is unchanged. See Tracing Allocations.

  • Sample project content is visible to the whole workspace, and viewers get a welcome. The guided sample project, its workflow, and each sample’s auto-built dashboard are now shared workspace-wide the moment they’re created, so a viewer sees the finished sample the same way a builder does, with no separate sharing step needed. Sample dashboards created before this fix pick up the same workspace-wide visibility automatically. And a viewer who lands in a workspace with no visible content yet now gets a welcome offering a short how-to introduction, a guided tour of the app, and quick access to help — so there’s always a next step. See Start With the Sample Project.

  • Single-sign-on invites no longer send a password-setup email. In a workspace that enforces single sign-on, inviting a new member no longer sends the set-your-password welcome email, since the member signs in through your identity provider and has no PlaidCloud password to set. Workspaces that don’t enforce single sign-on are unchanged. See New Member Welcome Email.

  • The Identity tab no longer appears for members who don’t administer identity. Every signed-in member carries a marker saying they are logged in, and that marker was being read as though it granted access to Identity administration — so the Identity tab appeared in the sidebar for everyone, regardless of their security groups. Opening it showed an empty screen: every screen inside it (Members, Member Directory, Distro Lists, Security Groups, the Security Log) has always been individually permission-checked, so a member without those permissions saw nothing there and no member, group, or security data was reachable. The tab is now shown only to members who hold at least one Identity administration permission. Nothing about your own account moves — your profile, options, View My Current Effective Security, and gravatar settings are in the user menu in the upper right, not in that tab, and are unchanged. A member who holds no application permissions at all now lands on the Home page explaining that, instead of on an empty Identity tab. See Managing Security Groups and Assignments.

  • Asking an AI agent the same “what if” question twice now returns the same answer. Asking what happens if an input rises returns the list of results that change, each with an estimate. That list came back in whichever order your project happened to hold its steps in, so the same question, on a model nothing had touched, could return the same results in a different order the next time it was asked — and anyone reading the first entry as the largest was reading whichever one came out first. The same ordering decided two more things. Where two allocations write the same result and each contributes the same amount to it, the answer names one of them as that result’s source; which of the two got named was decided by that ordering as well. And where a table is fed by more than one route — two allocations feeding it, or an allocation alongside a transform step — the answer followed only one of those routes onward, and that ordering chose which. These are now settled, so two identical runs return an identical answer and a difference between this week’s answer and last week’s is a real change in your model rather than a reshuffle. One thing worth knowing as you compare: an estimate for a result that sits below a table fed by more than one route is now measured along the same route every time, which may not be the route an earlier run happened to take, so such an estimate can differ from one you saw before. Estimates for results whose tables are each fed by a single route are unaffected. See Tracing Allocations.

  • Dash apps open for signed-in users again. Opening a Dash app could fail with “Request Header Fields Too Large” before the app itself was ever reached. Once you were signed in, your browser sent a sign-in cookie larger than the app host would accept, so the request was turned away at the door — and because it never got as far as your app, nothing in the app’s own logs explained why. The host now accepts a much larger cookie. An app that is already published picks this up the next time it is built, so use Rebuild on its row if you are still seeing that error. See Rebuilding a Dash App.

  • Setting a project or workflow variable shows you what each variable holds right now. The Project: Set Variable Values and Workflow: Set Variable Values steps list every variable in scope again — one row each, with its Current Value and Memo read fresh every time you open the step. Tick Set on the rows you want the step to write and leave the rest alone. Until now the step showed only the rows already saved on it, and the Current Value beside them was not the current value: it echoed whatever that variable held the last time that step was saved, which could be months ago — and on a step built since the step forms were rebuilt it had never held anything at all, so the column sat blank. Either way it was no help in deciding what to set, and with no list to pick from you had to type a variable’s name from memory and go to another screen to see its value. Nothing about what the step writes has changed — only ticked rows are ever written — so an existing step goes on doing exactly what it did. See Set Project Variable and Set Workflow Variable.

  • A dimension’s “Referenced in Tables” list shows every table that uses it. Select a dimension and the panel on the right lists the table columns mapped to it. It only ever listed columns on tables built by a workflow step, so a dimension used on a table that no step builds — one created directly with New Table, one restored from a snapshot, or one whose step has since been deleted — came up empty, and the mapping looked as though it had been lost. Every mapped column is now listed, with the step and workflow columns left blank where there is no step that builds the table. Double-clicking the table or column still opens it in Table Explorer.

  • Setting a column’s dimension through the API or the assistant now checks that the dimension exists. You can give the dimension’s name, its folder path and name, or its id — any of the three is accepted, as it is everywhere else a dimension is named, and stored correctly. Where two dimensions share a name, the path tells them apart. A value that doesn’t resolve to exactly one of the project’s dimensions is refused with a clear message instead of being accepted and then quietly ignored: the column would not show in the dimension’s “Referenced in Tables” list, would be left behind when the dimension was deleted, would be invisible to the row-level security coverage check so a real gap went unreported, and would be dropped when the table was brought into another project as a bundle. Setting or clearing the dimension from the column properties panel is unchanged.