Skip to content
QortexOS Documentation
Reference

QortexOS changelog

Release notes for every QortexOS version.

  1. 0.13.0-alpha

    QortexOS v0.13.0-alpha
    Changed
    • A deactivated user can no longer be newly named as an owner, reviewer, assignee or decider; records that already name one keep the name.
    Fixed
    • A connection test that cannot reach the provider now says why: the host could not be resolved, refused the connection, could not be reached, or presented a certificate that is not trusted.
    • A connector's server address can be pasted as copied from the browser: setup reads its host, and a ConnectWise Manage sign-in address is refused with the API address to use.
    Security
    • A workload remediation decision now records the signed-in user as the person who recorded it; a decider sent in the request is ignored.
    • When an administrator resets the multi-factor authentication of your account, you now receive an email that says so.
    • Connectors reach a provider only over HTTPS on port 443 at a public address: a server address on a private network or on another port is refused when the connection is tested, with the reason.

    Release Notes →

  2. 0.12.0-alpha

    QortexOS v0.12.0-alpha
    Added
    • When repeated wrong passwords pause sign-in to an account, the account's address now gets an email saying so, with a link to reset the password.
    Improved
    • On Connector Health, a tenant with no connectors yet now finds a Configure connector button in the empty table, which opens Connector Setup; it shows only to users who can open Connector Setup.
    Fixed
    • Subscription Management now shows how your current plan is billed, and the plan list opens on your subscription's billing interval and currency.
    • On Strategy Pulse, the Variances needing attention card's info text now names the two levels it counts: significant or highly significant in the latest period.
    • The Vendor Center's heading and browser tab now read Vendors, the name of the section it sits in.
    • An invitation link that was already used now says so on the onboarding page and offers sign-in, instead of reporting the invitation as expired.
    • When a sign-in request is blocked, the sign-in page now says it could not be processed and shows a Contact support link with the request ID to quote, instead of a generic error.
    • When a request is blocked in user management or department setup, the screen now says it could not be processed and shows a Contact support link with the request ID to quote, instead of a generic error.
    • When a budget's status cannot be reloaded after a refused POR import, the page now says so and offers a retry, instead of still showing the budget as a draft.
    • On Demand Forecast, each recommended action now says when its forecast's trailing error could not be loaded, with a retry under the list, instead of showing no accuracy line.
    • On Team members, a keyboard or screen-reader user who presses Reactivate now keeps their place on the button while the request runs, and the focus moves to the Team members heading once the member is reactivated; before, the focus was lost and the next Tab started again from the top of the page.
    • In the Invitations list, a revoke confirmation no longer stays open under an invitation that was accepted or revoked meanwhile: it closes when the list is read again, so it never offers a revoke that can only be refused.
    • Remediation campaign items now require only the contract compliance permissions their endpoints already ask for, instead of an extra lifecycle grant on top.
    • A plan of record imported with a department on its lines now keeps each line's department, and an import or a line edit that names a department outside your organization is refused before anything is written.
    • License tier downgrade savings are now the price difference between the current and recommended tiers.
    • License tiers and tier downgrade savings now read published catalog prices only.
    Security
    • After several failed email verification attempts, only email verification pauses, for an hour; the rest of the product keeps working from that network.

    Release Notes →

  3. 0.11.0-alpha

    QortexOS v0.11.0-alpha
    Added
    • On the Contract Intake screen, an upload that matches a file already backing a contract is now held for duplicate review: it cannot be recorded until a reviewer approves it, and reviewers approve or reject held uploads in the new Duplicates in review section.
    Changed
    • On the Renewals console and in the benchmark participation settings, a refused action now says why when you can do something about it: a contract that changed since the page loaded, a data category, GDPR consent or cross-border approval that participation needs, a change that was refused, or too many attempts.
    • A new connector's first sync now says why it was refused (another sync, connection test or configuration change is running, the connector reached today's sync limit, the change was refused, or there were too many attempts), and an action on the Connector Console refused for too many attempts now says so.
    • Vendor lock-in and vendor risk now count only what was measured, and read not available when nothing was.
    • The data platform health on Connector Intelligence now counts only the parts that were measured.
    • Activating a new connector and saving its data selection now say why they were refused (the change was refused, or there were too many attempts), as its first sync does.
    • Platform Maturity now counts only what was measured, and reads not available when nothing was.
    Fixed
    • On the Benchmark Center, the participation card no longer shows before its link to Enrollment is ready, the benchmark count and average percentile say they count each metric once per peer group, and the screen list names the Peer Benchmark screens it covers.
    • On the Benchmark Center, a screen card's percentile now takes the same tone as the Benchmark Explorer: success above the peer median, warning from the 25th percentile to the median, and danger below the 25th percentile, so a card above the median no longer reads as a warning.
    • On Benchmark Enrollment, the baseline step now says, when no month is published yet, that months below the contributor floor publish nothing by design.
    • On Benchmark Enrollment, figures outside every peer group's bands no longer show a Best match at 0%; the cohort step says no cohort matched and offers the catalog.
    • In Benchmark Enrollment's data validation step, each contribution now lists its categories by name, such as Financial or Sales & marketing, rather than by internal code.
    • On the Lifecycle Center, the Lifecycle events card now keeps its title while its events load and when they fail to load.
    • On the Vendor Scorecard, the German label of the total spend tile now names the vendor scope, as the English label does.
    • The vendor scorecard's Risk score now comes from the vendor risk assessment of each of your vendors.
    • The Ingestion Flow's first-run picker now offers only the contracts recorded through Contract Intake.
    • Revenue invoiced before a client was matched to its accounting customer now counts under that client's contracts, so it can show as recurring revenue. Invoices whose accounting customer is no longer matched to a client count as project revenue. Recurring revenue for past months is recalculated on this basis.
    • On the Runway Planner, the empty scenario list now says that the standard scenarios are created with your first stress run or with the first stress-tested forecast.
    • Net present values in the strategic scenario technology investment and partnership analyses now land on the exact cent, instead of dropping up to a cent for each discounted cash flow.
    • The Forecast Runs, Service queues and Support burden panels now keep their title and frame while they load, when they are empty and when their data cannot be loaded.
    • Tenant Configuration now shows the time zone the same way everywhere: the picker, the saved setting and the review step each show the zone with its current UTC offset.
    • In German, the Vendor Scorecard now uses the word Anbieter for a vendor, as the other vendor screens do.
    • On the Contract Center, the renewal band and the Renewals count now cover every contract renewing in the next 90 days, not only the newest 100 contracts, and the window counts whole days.
    • On Connector Analytics, a performance insight now shows the platform uptime it cites and that uptime over the 30 analysis days up to the insight, with the sync success rate chart kept below as related context.
    • On the Lifecycle Center, the 90-day renewal count now leaves out contracts that are not renewing (archived, completed, draft, expired, in review, in negotiation, pending signature and terminated), as the Contract Center does, so both Centers count the same contracts.
    • On the Renewal Console, the Mark renewed confirmation now says that a new draft version of the contract starts on its expiration date, with the same terms and no end date yet.
    • On Benchmark Enrollment, the cohort step's employee, client and managed-endpoint counts take whole numbers only, so a negative, decimal or mistyped count is refused before matching, and a count written with thousands separators reads in full.
    • A vendor whose latest health prediction fails a quality check now keeps its vendor risk assessment.
    • On Benchmark Enrollment, the cohort step refuses a revenue or a count too large to be stored before it matches, with a message of its own, instead of asking for a retry with figures that can never pass.
    • Cost per GB on Connector Intelligence reads Not available, not $0.00, for a period with no data processed.
    • Revenue metrics now add up after a month with no active contract: each month compares with the month before.
    • The Renewal Console's pipeline figures no longer count archived contracts.
    • Data quality scores and Platform Maturity no longer count quality reports that were deleted.
    • On Contract Pulse, the Campaigns card's caption and the empty Needs attention line no longer send readers to the Remediation Workbench, which is not available yet.
    • An invitation link that matches no invitation now opens as an invalid link on the onboarding page, not as an expired invitation.
    • On the Extraction Workbench, the retry buttons for contract names, a field's contract and decision reasons now say they are loading while they run, and when the details load the keyboard focus moves to the field's heading or the first queue row instead of the page.
    • On the Data Rules Engine, the message saying a run, pause or resume failed now clears when you change the filters, search, sort, page or page size.

    Release Notes →

  4. 0.10.0-alpha

    QortexOS v0.10.0-alpha
    Added
    • For users who can view analytics data, the Data Rules Engine's KPI strip now shows how many policies are due for a run and how many need attention, from the latest daily compliance statistics, and names the day they describe.
    Changed
    • The Template Vault no longer sorts by type, since that order followed internal codes rather than the type names you see.
    • Sign-up now lists every country: continuing with one we do not serve yet explains that we cannot create an account there and links to a form where you can register your interest, instead of leaving the country out of the list.
    Fixed
    • On the Benchmark Center, benchmark insights are now listed by importance, and no longer show a time that was the same for every insight.
    • On the Benchmark Center, the Participation tile of a tenant that has never enrolled in peer benchmarking now reads Not enrolled in the warning tone, the same as a tenant that switched participation off, where it read Not available.
    • On the Benchmark Center, the benchmark count now counts your current benchmarks exactly, on the date the average percentile beside it covers, and reads Current benchmarks where it read Benchmarks tracked.
    • On the CDC Console, each stream now shows its last successful sync in your time zone, the freshness SLA its breaches are counted against, and an Auto-recovery off badge when repeated failures will not trip its circuit breaker.
    • On Connector Analytics, a data quality or cost insight now shows the figure it cites and that figure over the 30 analysis days up to the insight, with the charts it showed before kept below as related context.
    • On the Engagement Center, the early-warnings timeline now lists the breached warnings of the latest analysis day, each dated by that day.
    • On the Engagement Center, the early-warnings timeline now shows the most severe warnings first, and the recent growth opportunities list shows the latest analysis day's most confident opportunities, with a count of how many it shows.
    • On the Hiring Pipeline Console, each requisition now shows the latest milestone it has reached and the day it reached it.
    • On the Hiring Pipeline Console, the latest applications now show each application's status and candidate source as a label in your language.
    • On the Hiring Pipeline Console, requisitions can now be searched by number, job description or quality assessment and narrowed to a skill and an urgency.
    • On the Lifecycle page, each entry in the Lifecycle events timeline now names its event type in your language.
    • On the Lifecycle page, the Lifecycle events timeline now orders and dates each event by when it happened, not by when it was recorded.
    • On the Lifecycle Center, a contract count or renewal figure that fails to load now says so, with a button that retries it.
    • On the Lifecycle Center, the count of contracts renewing within 90 days now covers every contract, not only the newest 100.
    • The Lifecycle Center now says which month its renewal pipeline figure is as of, and when that month's statistics were computed.
    • On the Profitability Benchmark, the peer cohort list now offers every cohort you are a member of, and no longer offers a cohort you have left.
    • On the Profitability Benchmark, the cohort line now shows the range of peer counts, such as 60 to 94 anonymous peers, when the metrics are compared against different numbers of peers.
    • On the Profitability Benchmark, the breakdown table now sorts only by metric name and by significance, with the most significant gaps first.
    • On the Profitability Benchmark, improvement opportunities now show their estimated impact in money.
    • On the Profitability Benchmark, each improvement opportunity now describes itself in your language, with the metric's own name and formatted values.
    • On the Quality Console, the report table can now be searched by table name and narrowed to reports with or without invalid records.
    • On the Renewals page, the line that dates the pipeline figures now also says when they were computed, in your time zone.
    • On the Renewals page, the contract registry can now be narrowed by risk level and searched by title, counterparty, jurisdiction or governing law.
    • On the Vendor Scorecard, a KPI card with no figure to show now reads Not available in a lighter style, so it no longer looks like a number.
    • On the Service Lifecycle Console, the Monthly revenue and Average offer price cards now explain what they measure and in which currency.
    • On the Service Lifecycle Console, the note under the offer table and the Active offers card now explain which kind of active the filter, the status badge and the card each mean.
    • On the Service Lifecycle Console, the offer table can now be searched by offer and tier name and narrowed to a pricing unit.
    • On the Service Lifecycle Console, the Clients mapped card now shows how the mapped clients split by the tier of their offer.
    • On Shadow Deployments, a run still deploying can now be completed without promotion, and counts as live.
    • In the Template Vault's card grid, you can now choose the page size and the order, as in the list view.
    • When a Template Vault variant cannot be created, the message now names the reason when it is a name already in use, the template limit, or a source template that is not valid.
    • Only the platform's master account can now mark a contract template as a system template; any other account gets a clear refusal.
    • The Validation Workbench now names each check's severity, status and phase in your language, where it showed raw codes such as MAJOR, OPEN and P1_STRUCTURAL.
    • In the Validation Workbench, a check's decision history now says whether you or another user decided it.
    • On the Vendor Scorecard, the vendor table can now be narrowed to distributors or direct vendors and searched by your own vendor names, account managers and notes.
    • On the Vendor Scorecard, each figure from a monthly snapshot now names its own month.
    • On the Vendor Scorecard, the vendor table now shows each vendor's share of your total vendor spend and can be sorted by it.
    • On the Vendor Scorecard, the support-burden list now shows the entries with the highest support burden first.
    • On the Vendor Scorecard, each support-burden entry now shows its burden score and the mean time to resolve its tickets.
    • On the Vendor Scorecard, a new card shows how concentrated your vendor spend is, with the largest vendor's and the top three vendors' shares and your diversification target.
    • On the Vendor Scorecard, a vendor you have not named yourself now shows its catalog name instead of Unnamed vendor.
    • In GDPR Compliance, a record's legal hold now shows the same end day that was picked for it, whatever your time zone.
    • In GDPR Compliance on a narrow screen, a retention record's details now open in a near-full-width panel instead of a narrow one.
    • In GDPR Compliance, the record details panel now has a close button that clears the selected record.
    • In GDPR Compliance on a wide screen, a line now separates the records from the record details, with a handle to resize the details panel.
    • On the Hiring Pipeline Console, a KPI card with no figure yet now reads as not available instead of looking like a count.
    • On the Hiring Pipeline Console, the latest-applications panel keeps its title while it loads, when it is empty, and when it fails to load.
    • On the Hiring Pipeline Console, the note under the requisition table now says in plain words what the screen cannot do yet.
    • On the Hiring Pipeline Console, a screen reader now meets the latest-applications panel once, on the page and in the mobile sheet.
    • On the Hiring Pipeline Console, the KPI cards and the latest-applications panel each show one loading placeholder instead of changing shape twice.
    • On the Renewals page, the first figure is now named Due for renewal, since it counts contracts expiring within 180 days and those already past their date.
    • On the Renewals page, an empty list no longer blames a filter that the list never applied.
    • On the Renewals page, a renewal dated yesterday now shows as Overdue at any hour, and each renewal's window badge now agrees with the date beside it.
    • In Subscription Management, the Current plan and Default payment method cards now show 'Unavailable' in the quieter absence style instead of the large figure style, so it can no longer be mistaken for a plan or a payment method.
    • The Template Vault now shows its current order in the list view too, including the default newest-first order that no column shows.
    • In Tenant Configuration, someone who can view the settings but not change them now sees which permission they need, instead of a page with no way to edit and no reason given.
    • In Tenant Configuration, each settings section now shows its values as soon as they load, instead of every section waiting for the slowest one.
    • In Tenant Configuration, the IP allowlist now shows its addresses with a note that the list is saved but not enforced yet, instead of only a count.
    • In Tenant Configuration, a company logo address the server would refuse is now caught on the Appearance step with a message saying what to enter, instead of failing at save.
    • On the Vendor Scorecard, an empty vendor list no longer blames a filter that the list never applied.
    • Budget guardrail checks and strategic scenario simulations now round a daily burn, a daily spend velocity and a daily cash flow to the nearest cent instead of dropping the fraction.
    • The vendor commit tier guardrail now measures spend velocity from the last full month of consumption, or from the current month so far, instead of adding up every month recorded in the last 30 days.
    • On Team members, a keyboard or screen-reader user who presses Deactivate, or Cancel in its confirmation, now keeps their place on the member's Deactivate button; before, the focus was lost and the next Tab started again from the top of the page.
    • In the Invitations list, a keyboard or screen-reader user who cancels or confirms a revoke now keeps their place: Cancel returns the focus to the invitation's Revoke button, and on wide screens a confirmed revoke moves it to the Invitations heading; before, the focus was lost.
    • On User Management, the Pending invitations and Roles in use cards now show exact figures however large the team; before, past 100 invitations or 100 team members they counted only the most recent 100 and said so under the figure.
    • Metric strips across the portal now lay out their cards evenly: where a pane is wide enough for one row, a three-card strip fills it instead of leaving a gap, and six cards sit three and three instead of five and one. The five-card strips on Home, Strategy Pulse, Data Quality, GDPR retention and the License Utilization Lens show their cards three and two, with their labels and amounts in full.
    • On the Renewals page, Mark renewed is now offered only on the latest version of an active contract, the one a renewal can start from.
    • On Strategy Pulse, a card's full explanation now opens from the info button beside its label, leaving only a short note, if any, under its figure.
    • Contract intake now classifies each clause and extracts its obligations with one model call per clause, so each clause gets its own type and risk rating, and each obligation is linked to the clause it came from.
    • On several consoles, a search typed again right after Clear filters is now applied instead of being ignored.
    • The vendor commit tier guardrail now counts the days left to the quarter's checkpoint from today's date, so the count no longer drops by one partway through the day or reads the checkpoint as reached a day early.
    • Recording a contract from an uploaded file that already has one no longer creates a second contract for the same file.
    • The time zone set in Tenant Configuration now applies to the whole workspace. Saving it signs everyone out, and the page says so before the save.
    • Tenant Configuration's Notifications step now sets what the workspace is sent: in-app and email notifications, and each notification category, can be switched off for everyone. Security and system notices are always sent.
    • On the Extraction Workbench, each queue row and the selected field's header name their contract, however many contracts and document versions the tenant holds.
    • On screens where the filters and the list sit in separate panels, two quick changes in a row no longer undo each other.
    Security
    • A contract template's platform figures (content fingerprint, drift, house standard path, update eligibility, usage counters and version lineage) are now set only by the platform, and a variant's parent must be one of the account's own templates; a request that sends a platform figure is turned away with a message naming it.
    Limitation
    • The Orchestration Console's materialized view refresh queue no longer offers Configure until saving a view's refresh settings is supported.

    Release Notes →

  5. 0.9.0-alpha

    QortexOS v0.9.0-alpha
    Added
    • Workforce labor analytics now report the average loaded compensation, the employer benefit cost total, the loaded-cost coverage share and basis, and a daily capacity utilization status.
    • The labor analytics gain the employer statutory cost coverage share, the disclosure of how much of the headcount the modelled statutory cost total covers, so that partial sum is always read beside its coverage.
    • An address that does not exist now shows a QortexOS page in your language with a way back to the home page, instead of a bare browser-style error.
    • On Department Setup, you can now search your departments by name. The search reaches every department, including those beyond the first 100 the page loads.
    • On the Contract Intake screen, every uploaded file can now be downloaded from the Uploaded files table; when a download is not possible the row says why, for example that the file has not passed its virus scan yet or is under a legal hold.
    • On the Budget Center, the Rolling Forecast card says when the forecast was refreshed if that happened this month, and the Patch Sets card, where available, shows how many patch sets are pending.
    • The Data Rules Engine can now find policies by name and filter them by enabled state and by schedule, beside the type.
    • In GDPR Compliance, the data policy now also shows the export record limit and the allowed export formats.
    • The Profit Center lets users who manage profit optimization adopt or reject each pending recommendation.
    • Revenue Forecast can now narrow its table to the days the forecasts were generated, with a from and a to date beside the revenue stream.
    • Exchange rates are now stored as dated, versioned sets that are never edited: a correction arrives as a new version, so any converted figure can still be explained by the rates it was computed from.
    • Contract timelines now show resolved findings and material health score changes detected by the analytics platform.
    • On the Connector Health screen, you can now search connectors by name or last error, and filter them by sync state and by whether they have errors.
    • The Rolling Forecast adds Refresh data, which recomputes the forecast figures, for users who can update budgets.
    Changed
    • Four create requests of the API (signature envelopes, prompt execution feedback, tenant subscriptions and gold standard examples) no longer accept a tenant id: the tenant always comes from the signed-in session, and a tenant id that is still sent is ignored. Creating a signature envelope through the API now succeeds; it failed at the database before.
    • Security and system notifications can no longer be switched off for a whole workspace.
    • Adding an integration now stops at the workspace's integration limit; reconnecting an existing integration is never blocked by it.
    • Inviting users now stops at the workspace's user limit, counting pending invitations, and an invitation accepted after the limit is reached is refused with a message to ask the administrator.
    • The assumptions behind an acquisition recommendation are now written down in one place each: what counts as strong synergies, what counts as fair and as overpriced, what financing score counts as feasible, and what client retention the platform assumes survives an integration. No recommendation changes; the numbers simply stop being scattered.
    • In Finance, a refused action now says why when you can do something about it: a GL code whose allocations would pass 100%, a budget or a forecast run that changed since the page loaded, a file type or size the upload does not take, a file that has not passed the virus check, a mapped column missing from the file, a change that was refused, or too many attempts.
    • In Tenant Settings, a refused action now says why when you can do something about it: an address that already belongs to a member or already has an invitation, an invitation that changed since the page loaded, a deactivated member, the last administrator or access level, a department name already in use, a change that was refused, or too many attempts.
    • On Tenant Configuration, the Limits step now proposes 250 users and 25 integrations for a tenant whose limits are not saved yet.
    Improved
    • The Extraction Workbench now asks for a field's correction history newest-decision first, so a field decided more than once keeps reading the reason from its latest decision.
    Fixed
    • The manual refresh trigger for a materialized view marks the view for refresh again.
    • Benchmark intelligence reports now recognise your strengths: a top-quartile peer percentile is reported as a competitive advantage and your overall position is ranked on the right scale, instead of every metric reading as an improvement opportunity and the position always showing as lagging.
    • Signing in with an email address that has not been verified yet now offers a link to send a new verification email, a server error during sign-in no longer tells you to check your connection, and the two-factor steps no longer call every failure a wrong code or an expired code a server error.
    • Benchmark Enrollment now shows a tenant's revenue, employee, client and endpoint snapshot as soon as a cohort is assigned, with the currency the revenue was recorded in.
    • A sign-up that is refunded because it could not be completed is also unsubscribed, so it is not billed again.
    • After a rate limit, the sign-in and sign-up screens can now tell you how long to wait.
    • Revoking a sign-up invite from the staff screen now takes effect.
    • A refund of your sign-up payment also ends the subscription, so you are not charged again.
    • You stay signed in while you work: the session now ends after 30 minutes without activity (12 hours at most), not 30 minutes after sign-in, and a session that ended sends you to sign in again.
    • When your session ends, the portal now takes you to the sign-in page, tells you that you were signed out, and returns you to the page you were on once you sign in again. A temporary server problem no longer sends you to sign in.
    • Deactivating a user now ends their sessions under every way their id can be written, and tells you when the sessions could not be ended, so you can try again, where it could report success with a session still live.
    • A deactivated user is signed out everywhere at once, including a session opened in a second tab or a request that was under way when they were deactivated.
    • When a page fails to load, the Try again button now asks the server again, so it can recover from a temporary problem without reloading the browser tab.
    • Hiring requisition analytics now cover every requisition of the tenant, report a real average time to fill per skill category, and count only live requisitions as active.
    • On Subscription Management, a problem loading your default payment method no longer hides your plan, status and renewal date: only that one card reads Unavailable.
    • In Account Settings, a save that fails now explains what happened in your own language, instead of showing technical text such as "Bad Request".
    • On Department Setup, the Hierarchy depth card now counts the levels across all of your departments, not only the ones shown on the page.
    • On Department Setup, a department shown at the top level because its parent is inactive or not in the loaded list now says so under its name.
    • Saving a department under a name that is already in use, or a budget whose fiscal year or date windows are not valid, is now answered with a specific reason instead of a general server error.
    • On Contract Intake, a failed upload or a failed Record intake now explains what went wrong in your language, and the Recently recorded list says when it could not load instead of looking empty.
    • On Ingestion Flow, a pipeline run that fails to start or finish now explains itself in your language instead of showing the server's English error text.
    • Changes to a user's roles, to feature access, to the navigation menu and to settings, users and roles now reach everyone within minutes; before, the previous state could sometimes stay for up to an hour.
    • On the Extraction Workbench, the Correct form no longer offers a Save that the server always refuses, and a decision that cannot be saved now explains itself in your language instead of showing the server's English error text.
    • On the Extraction Workbench, when contract names or decision reasons cannot be loaded, the queue now says so and offers a retry, instead of showing a dash or a bare status code as if there were nothing to show.
    • On Contract Intake, the Recently recorded list now shows only contracts recorded through that screen, not contracts created from a template or imported elsewhere.
    • The one-time organization setup page now opens its form for an organization that has no details on file yet, asking you to choose your currency, language and time zone, instead of showing a loading error.
    • On the Ingestion Flow, a person who may view pipeline runs but not start them no longer reads an instruction to pick a contract and run the pipeline; the page now says that they do not have permission to run it.
    • On Contract Intake, the Uploaded files table now has pages, a page-size choice, sorting by file, size and upload time, a search box and filters for virus scan and processing status, so files past the first 25 can be found and recorded; an open Record intake form is kept while you change pages.
    • On the Ingestion Flow, the Recent runs list now has pages and two filters, by run status and for the contract on screen only, so runs older than the newest 25 can be found and opened; the run you picked stays on screen while you change pages.
    • On the Ingestion Flow, the Changed since panel now says when its changes could not be loaded and offers a retry instead of reading as no changes, names each change by its type in your language instead of a code, and says when a version has more changes than the panel lists.
    • On Contract Intake, when some files of a selection do not upload, the upload area now keeps each of those files listed by name with the reason, instead of showing only the last file's result; and files added while an upload is running wait their turn instead of starting a second upload beside the first.
    • On the Ingestion Flow screen, a run's contract is now always shown by its title in the run summary, even for older contracts; where a title is not available in the recent runs list the screen says so and labels the value as a contract ID instead of showing a bare number, and the empty screen no longer says that no contract is recorded while the contracts are still loading or could not be loaded.
    • When one figure in a Data Platform KPI strip cannot be loaded, that card now says so and offers a retry, and the figures beside it stay on screen.
    • When a background refresh fails on Department Setup, the departments and counts already on screen stay there instead of being replaced by an error.
    • On the Contract Intake screen, the virus scan, OCR and processing statuses of uploaded files now update by themselves while a file is still being processed, so Record intake appears without reloading the page. A Refresh button re-reads the list at any time, and when an update fails the screen says that the statuses may be out of date.
    • On the Contract Intake screen, Word 97-2003 files (.doc) are no longer accepted for upload, because the document reader cannot read them; the screen says so and asks for the file to be saved as .docx instead of accepting an upload that could never be processed.
    • On seven console summary strips, figures already on screen now stay there when a background refresh fails, instead of being replaced by an error message and a retry button.
    • A feature-flag catalog row that targets a cohort an older app build does not know no longer switches off every flagged screen on that build; only that row stays off on that build (a tenant's own override still applies) until the build catches up.
    • Changing your plan or details during sign-up no longer ends with a message that an account with this email already exists.
    • Sidebar links now follow the current navigation catalog: retired gates no longer hide or expose items.
    • A paid sign-up no longer gets stuck when another company with the same name already has an account.
    • Changing the workspace time zone in Tenant Configuration no longer resets the saving administrator's own language and time zone, and a time zone the platform does not list is refused.
    • Account Settings labels your theme preference as the saved theme, since the theme in effect can differ on each device.
    • On At-Risk Signals, the account list now pages through every analyzed account, 100 at a time, in the whole ranking and within each risk band, instead of stopping at the first 100.
    • On At-Risk Signals, the evidence panel's driver chart now draws each driver's contribution as a signed bar from zero, in relative units, instead of a percentage waterfall whose driver steps drew flat.
    • On At-Risk Signals, with no account picked, the list you are looking at now selects its first account, under a risk-band filter or on a later page, and the evidence panel explains that account instead of the top account of the whole ranking.
    • On the Platform Maturity screen, the platform views needing refresh card now counts every view in the refresh registry, instead of stopping at the first 100, and warns when any of them is failing.
    • On the Platform Maturity screen, the data quality score now averages every quality report in its 30-day window, weighting each data layer by how many reports it had, and the card says what the score covers.
    • On the Budget Center, the Guardrails card no longer keeps its warning colour for variance events that no screen can mark reviewed yet.
    • In Budget Setup, a mapping or line that cannot be removed now says so; Remove used to leave the row in place with no message.
    • In Budget Setup, the fiscal year field now takes only the years a budget can be created for, 2020 to 2050, and a year that already has a budget now says where to find it.
    • In Budget Setup, the header now says that each step saves when you add or submit it, instead of saying that changes save automatically.
    • Budget Setup now opens for people who may only view budgets: they can walk its four steps, and the controls that change a budget appear only for people allowed to use them.
    • In Budget Setup, the account mapping step now shows whether each mapping is active or inactive.
    • In Budget Setup, the account pickers on the mapping and lines steps now offer every postable account in the chart of accounts; accounts past the first 200 were missing from them.
    • On the Cash Center, the portfolio line now says which day its figures are from and that they are in your company's currency.
    • On the Cash Center, the date an alert was raised and the date an insight was generated now read in your own time zone, so a late-evening alert no longer shows the next day.
    • On the Connector Console, the health strip now shows the success rate across all syncs, which agrees with the sync counts beside it, names the 30-day window each figure covers, covers every connector, and drops the uptime tile that repeated the success rate.
    • On the Data Platform Center, the attention band shows its Pipeline Console link only to readers who can open that screen; every reader still sees how many lakehouse layers are below their health threshold.
    • On the Data Platform overview, the sync success rate and the quality score now say they cover the last 30 days.
    • The Data Rules Engine's violations card now says it counts policies that have found violations at any time, and no longer shows that count as a warning.
    • When two reviewers decide the same extracted field at the same moment, the second is now told the field was already decided instead of seeing a generic save error.
    • On Feature Store, the link under the recently updated pipelines now opens the Orchestrator, where feature pipelines are listed, instead of the Performance Console, which lists none.
    • In GDPR Compliance, a retention record the anonymization run has processed now reads Anonymization: Completed instead of Required.
    • On the Hiring Center, the Open positions card no longer shows a warning just because positions are open; it is marked only when its figures could not be loaded.
    • The Industry Stress console lists the insights of the analysis its figures quote, without a repeat per analysis day.
    • On Model Experiments, an experiment awaiting a decision now offers Record decision: choose Promote treatment, Keep control or Extend test and give a rationale, and the rationale shows under the recommendation.
    • In POR Import, a file still being checked for viruses no longer fails validation at once: the Upload step says the check is running, and the validation waits up to about a minute for it.
    • In POR Import, the account column's field now says it takes the chart of accounts system id, not the account code or your GL code.
    • In POR Import, the checks table now says what each check points at (a CSV line, an account, a GL mapping or the whole run) instead of heading every reference as a row.
    • In POR Import, the page head's exit now reads "Exit to Validation Workbench": it never saved the wizard's progress, and no longer says it does.
    • In the Payment Terms Optimizer, a comparison figure that did not change now reads as unchanged instead of being shown in green as an improvement.
    • On the Privacy Budget Console, New operation creates a differential-privacy operation with its epsilon budget and, optionally, its ad-hoc reserve, automated query cap and next reset date.
    • The Revenue Center says when an amount is shown in the tenant currency, and shows MRR in its own recorded currency once one is recorded.
    • In the Revenue Forecast, a KPI card with no reading now shows 'Not available' in the quieter absence style instead of the large figure style, so it can no longer be mistaken for a value.
    • In German, the Revenue Forecast's confirmation for cancelling a batch run now labels the button that keeps the run going as such, instead of a word that read like discarding the run.
    • Revenue Forecast's table can now be sorted by the point forecast, largest first on the first click.
    • Revenue Forecast's table now shows each forecast's point forecast, the figure its error is measured against, beside the P10, P50 and P90.
    • Revenue Forecast's detail card now shows the model accuracy, and each forecast's error and bias once its actual is recorded.
    • The Service Catalog's header now names the day of the catalog statistics as well as the day of the queue performance figures.
    • A benchmark category you leave unchecked in the enrollment consent step now stays out of newly computed benchmark peer numbers: your metrics of that category are neither contributed to nor ranked against the benchmark peer aggregates, and unchecking any category also takes your data out of the training set of the cross-MSP strategic benchmarking model.
    • On the Service Catalog, clients without a tiered offer are listed as No tier, after the named tiers.
    • Each workspace can now send up to 100 employee invitation emails an hour, resends included; past that, invitations and resends are refused until the hour is over.
    • On User Management, a member's roles now list the access level first with a +N control that opens the full list, the invitations list says when it shows only the newest invitations, and internal staff roles no longer show on a member's row.
    • On the Validation Workbench, saving a decision now keeps the confirmation on screen, announces it to screen readers and keeps the keyboard focus on it.
    • On the Validation Workbench, a decision refused because the check changed elsewhere now refreshes the check, and decision errors are shown in your language.
    • Account Settings now tells you when you need the update permission to change your preferences.
    • Account Settings now says when the time zone list could not be loaded, instead of reporting that no time zone matches your search.
    • Time zone pickers now show each zone's current UTC offset, daylight saving time included.
    • On At-Risk Signals, revenue at risk is stated in each account's own currency when the analysis records one, the total is never summed across currencies, and a note says when amounts are shown in your tenant currency.
    • On At-Risk Signals, the evidence panel's contributing factors now list only the factors the analysis scores; the price sensitivity and growth stage context rows no longer read as drivers.
    • On At-Risk Signals, the KPI tiles now say that their figures cover scored accounts, beside the count of unscored clients.
    • On At-Risk Signals, before a tenant's first churn analysis has run, every KPI tile now explains beneath its value that no accounts have been analyzed yet.
    • On the Budget Center, a health card with no value now says so in plain text instead of in the size and style of a figure.
    • On the Budget Center, the plan-of-record card keeps the fiscal year when a budget carries a status the page does not recognise.
    • On the Budget Center, the data-through line names the month the figures cover, for example "Data through January 2026", instead of that month's first day.
    • On Budget Setup, the Refresh KPIs button now appears only for people allowed to refresh the figures.
    • On Budget Setup, the chart of accounts mapping step no longer labels its counts with a currency.
    • On Budget Setup, the planned gross margin tile says how many months its figure covers when the plan does not yet fill the year.
    • On Budget Setup, the review step now says that Refresh KPIs recomputes every budget in your organization, not only the one on screen.
    • On Budget Setup, the planned gross margin tile writes its percentage the same way as the KPI table beneath it, in every language.
    • On Budget Setup, the COA coverage row of the budget card now says that it counts your whole organization's mappings.
    • On the Data Rules Engine, people who can view policies but not run or change them no longer see an empty Actions column.
    • On the Data Rules Engine, the line confirming a run, pause or resume now clears when you start the next action or change the filters, search, sort, page or page size.
    • On the Data Rules Engine in German, the page and browser tab title now read "Regel-Engine".
    • On Department Setup, a failed reactivation now shows under the department it failed on.
    • On Department Setup, a parent or a deleted department is always named, never shown as a long number.
    • On Department Setup, a department on the tenth level of the hierarchy is no longer offered as a parent, and the screen says why.
    • On the Industry Stress Console, Clear filters shows only while a severity filter is set.
    • On the Industry Stress Console, a KPI tile that shows Not available now says why when the reason is known: no churn analysis yet, or the tenant currency not set.
    • The Industry Stress Console now says under its table that external sector intelligence is not available yet.
    • On the Industry Stress Console, a KPI tile with no figure now reads as an absence, not as a number.
    • On the Industry Stress Console, an empty table no longer blames a severity filter that was never applied.
    • On the Industry Stress Console, the note that amounts are in the tenant currency now sits under the KPI tiles it qualifies.
    • On the Industry Stress Console, the Recorded date now reads in your profile's time zone.
    • On the Industry Stress Console, the Category and Severity columns no longer offer a sort that ordered by code, and the severity filter lists the severities from most to least severe.
    • On the K-Anonymity Console, the line saying a re-run was recorded now clears when you change the page, sort, band or search, or open a Re-run again. The Re-run confirmation is announced with its question, focus moves to its Cancel when it opens, and back to the row's Re-run button when it closes while that row is still on the page.
    • On Payment Terms Optimizer in German, the recommendation band now names the early-payment discount and the net benefit as the rest of the page does.
    • On Payment Terms Optimizer, sorting the recommendation table by annual revenue now starts with the largest client, as the other figure columns do.
    • On Payment Terms Optimizer, the comparison cards now show a plus sign on a money change that rises, as the day changes beside them do.
    • On Payment Terms Optimizer, each scenario on the net benefit line now shows whether it meets its own DSO target, and the Recommended badge goes to the highest net benefit that does.
    • On Payment Terms Optimizer, the live DSO trend no longer draws the illustrative DSO target, and its scale now follows the trend alone.
    • On Revenue Forecast, Clear filters now appears only while a filter is set.
    • On Revenue Forecast, a link with an unknown revenue stream now shows the unfiltered empty message, matching the unfiltered list it shows.
    • Revenue Forecast's Forecast Runs list now says when it shows only the most recent runs.
    • Revenue Forecast's table columns no longer shift when the rows load.
    • On Revenue Forecast, the Business value card now says its amount is in the tenant currency.
    • On Revenue Forecast, the validated forecasts card now says it counts all time.
    • On Runway Planner, the stress-scenario definitions now read in your language, named by their scenario type.
    • On Runway Planner, the intelligence narrative now always belongs to the forecast whose facts it sits beside.
    • On Runway Planner in German, the hiring-pace unit now reads FTE, as the rest of the page does.
    • On Runway Planner, the stress test's net cash flow impact and maximum financing need now say they cover 91 days.
    • On Runway Planner, the comparison table's 18-month row now says it shows the cumulative growth cash flow.
    • On the Service Catalog, a figure that could not be loaded now says so, with a button to try again, instead of looking like missing data.
    • On the Service Catalog, the attention band links to the Service Lifecycle console only when you can open it.
    • On the Service Catalog, the Coverage & Tier Mix card lists your tiers by name, in the same order every day.
    • On the Service Catalog, the portfolio line and the Lifecycle card name one offer, mapping or queue in the singular.
    • On User Management, the page readout that a narrow team table footer shows in place of the page numbers now reads in your language.
    • On User Management, a KPI card whose figure could not be loaded now says so, and the strip offers a retry, instead of reading as not available.
    • On Team members, when an action on a member fails, the message now appears directly beneath that member's row.
    • On User Management, the confirmation line an action leaves behind (such as "Cleo Marsh reactivated.") now clears when you start your next action, instead of staying on screen until the page reloads.
    • On User Management, when the window is too narrow for the full layout, invitations now open in a side panel from the envelope button at the bottom right, and the Team members table leads the page.
    • On Team members, the Deactivate confirmation now opens directly beneath the member's row, and the Deactivate button tells screen readers which confirmation it controls; the same holds for revoking an invitation.
    • On User Management, a pending invitation's expiry date now reads in your time zone, so an invitation that expires in your evening no longer shows the next day's date.
    • On User Management, Active accounts now counts every active member, and Pending invitations and Roles in use now say which records they count once their list runs past 100.
    • On User Management, you can now sort the Team members table by name, email or last sign-in, search it by name or email, and filter it by status or role; the view you set stays in the page address, so a reload or a shared link opens it again.
    • Signing in with an account whose setup was never finished now explains that clearly and points to support, instead of showing a generic error.
    • On the Data Platform's pipeline, CDC, backfill, orchestration and data rules consoles, Backfill Setup and the connector screens, a failed action now names what it failed on in your language (the stream, backfill window, view, pipeline, policy, connector or provider), and on the connector screens a refusal from the connector service keeps its reason after that sentence; it used to print the server's English text alone.
    • In Finance, a failed action in Budget Setup, the POR import, the Validation Workbench and the forecast runs now names what it failed on in your language (the fiscal year, month, GL code, file or run); it used to print the server's English text.
    • On Renewals, Service Lifecycle, the Vendor Scorecard, the HRIS Sync conflict queue and Benchmark Enrollment, a failed action now names what it failed on in your language (the contract, service offer, vendor and its new status, conflicted field, cohort or contribution); it used to print the server's English text.
    • On the Federated, K-Anonymity and Privacy Budget consoles, Model Experiments, the Serving Console and Shadow Deployments, a failed action now names what it failed on in your language (the session and its round, the dataset, the operation, the experiment and its new status, the model version, the alert or the shadow run); it used to print the server's English text.
    • In Tenant Settings, a failed action now names what it failed on in your language (the member, invitation, role, department, retention schedule, billing portal session or settings group); it used to print the server's English text.
    • On Contract Intake, pressing Tab in the upload area now lands on Browse, instead of first stopping on a hidden file control with no label.
    • A data connector whose health has not been measured yet is reported as unmeasured rather than critical, and its availability is no longer reported against an uptime nobody measured.
    • A zero you send or store is now used as the number you meant. Where a zero would leave a run with nothing to do, the platform says so instead of quietly substituting its own figure.
    • Rates now apply at the rate you set them. A tax rate of 26.25 percent, an adoption probability of 5.5 percent or a growth target of 7.5 percent is carried through the money it multiplies instead of being cut back to a whole percentage point.
    • Computed money now rounds to the nearest cent, the same way the database does, instead of being cut downward. Forecast bands, loan schedules, price recommendations and risk figures no longer drift a cent low each time they are computed.
    • Averages, counts and verdicts across forecasting, quality, retention and workforce analytics are now taken over the rows the platform has actually measured, so one unmeasured row no longer drags a whole average down or decides a verdict, and the assumptions the platform does apply are named in one place each.
    • A payout preview now shows the same figures as the payout run it previews, to the same precision the platform records, so a leader who reproduces a payout from the preview reaches the number on the record.
    • Platform deployments are unblocked: two database changes that had been prepared out of order are re-issued in order, so the queued changes behind them apply again.
    • A model type's first evaluation is reported as having no baseline to compare against, instead of being compared against a score of zero that nobody measured.
    • Shadow-deployment analytics report a model type's validation confidence over the runs that were actually scored, so one unscored run no longer drags a whole model family's figure down.
    • In the Profitability Benchmark header, figures that could not be loaded now say so and offer the screen's retry, instead of reading as a tenant with no benchmark records.
    • Budget Setup and Benchmark Enrollment now wait for your permissions to load before asking the server for their data, so neither screen can read as empty while that answer is still on its way.
    • Optimization analytics report each figure over the periods and analyses that were actually measured, and a solve with no recorded time is no longer counted as one that finished instantly.
    • Model serving analytics and the model portfolio drift score are now averaged over the snapshots and models that actually carry each reading, so a snapshot the serving telemetry landed without a metric no longer halves the reported utilization, latency or error rate, and a model whose drift was never scored no longer reports the portfolio as drift-free. A portfolio with no evaluated model now reports no accuracy, no industry percentile and no maturity score, instead of being recorded as a mid-range performer scored at zero accuracy.
    • Model portfolio analytics now read only the figures an analysis actually recorded, so a portfolio whose ROI, automation rate or maturity was never measured is no longer reported as zero, is no longer placed at the bottom of its industry, and no longer receives advice to fix a number the platform never took. The analytics also read the series in the right direction: the industry benchmark position now comes from the most recent analysis that measured one instead of the oldest, and the automation and incident-resolution trends no longer report an improvement as a decline.
    • The average performance improvement reported for model retraining now counts only the retrainings whose improvement was actually measured, so a model family with an unscored retraining is no longer reported as having improved less than it did.
    • Document processing reports now read only the figures the platform actually recorded: a document whose pages were never scored is no longer listed as low confidence, and a job whose processing time was never recorded no longer pulls the reported average speed down.
    • Document processing metrics now report the jobs that failed. The failure count read zero and the success rate read one hundred percent no matter how many documents had failed, because the report only ever looked at the jobs that succeeded.
    • Budget KPI analytics now average only the months that recorded each figure, so a month with no margin, revenue or EBITDA to report no longer drags those averages down or invents a margin trend.
    • The model bias analytics no longer read a detection whose demographic parity was never scored as a score of zero: each model type now averages only its scored detections, and a type or a trend point with no score reports none instead of the most biased value.
    • A failed refresh on the Platform Maturity, K-Anonymity Console, Model Experiments and Shadow Deployments screens now keeps the entries already listed instead of replacing them with an error message.
    • A failed refresh on the Rolling Forecast, Covenants, Serving Console and Subscription Management screens now keeps the entries already listed instead of replacing them with an error message.
    • The payout explanation now prints the same figures the payout run records, so a leader who reproduces the calculation from the steps reaches the number on the record.
    • An acquisition price split into a down payment, a loan and a seller note now adds up to the price exactly. The three shares used to total a cent more than the price they divide, so a buyer was told to fund a cent that did not exist.
    • An average of money amounts now rounds the half cent the way the rest of the platform does, instead of always dropping it, so a reported average no longer sits a cent low.
    • On the Platform Maturity screen, the list of recent intelligence snapshots now stays on screen when a background refresh fails, instead of being replaced by an error message and a retry button.
    • Retention averages - SHAP explanation quality, feature importance by category and model C-index - are now taken over the records that actually carry a score, so a record an explainer or an evaluation never scored no longer counts as a zero and drags the average down.
    • QBR analytics averages - prediction accuracy, meeting effectiveness, client engagement, pathfinder scores and business value - are now taken over the reviews that actually carry a score, so a review nobody scored on a measure no longer counts as a zero and drags that measure down for the whole set.
    • Workload analytics now average over the records that actually carry a figure. A model nobody has evaluated, a department nobody has measured and a forecast comparison nobody has scored no longer enter those averages as a zero, so reported error, utilization and pattern strength describe what was measured.
    • A model, feature or privacy operation that has never been measured is no longer judged as though it scored a perfect zero. A model nobody has evaluated no longer counts as meeting its accuracy target, a feature with no drift measurement is flagged for attention, and a privacy operation with no recorded budget use is treated as having no budget left.
    • Client and QBR analytics now report how many records their figures were computed over, beside how many records matched, so a figure never describes more records than were actually read.
    • Amounts inside analysis text, warnings and scenario names now appear in the tenant's own currency and the reader's own locale, with the number of decimal places the currency itself uses, instead of a dollar sign and two decimal places written into each sentence.
    • When a compensation guardrail is breached, the payout explanation now shows the measured value and the threshold to the same six decimal places the platform records, so a narrow breach no longer appears as two identical numbers with no visible cause.
    • The RMM telemetry correlation analytics now report, for each skill category, the automation opportunities recorded against that category's correlations, where every category used to report zero.
    • On the Validation Workbench, a budget chosen in the budget picker now follows the budget list, so a budget locked after you chose it shows as locked once the list refreshes (for example after a refused decision).
    • In Budget Setup, a budget that was locked while you worked on its lines now shows as locked as soon as a change to its lines is refused, instead of still offering the draft's editing.
    • In Budget Setup, adding lines to a budget that was locked meanwhile now says so in your language, as removing a line already did.
    • At sign-up, the payment step's card form and a declined card's message now follow the portal's language setting instead of the browser's.
    • On the Renewal Console, marking a contract Renewed now announces it by name once the renewal is saved; the announcement never showed before.
    • Dates, numbers and the payment form now follow the language of the page's text. A browser set to a language the portal does not offer yet sees them in English, like the text, and one that lists German after such a language now gets German.
    • Tenant Configuration can now be set up on an account that has no settings yet: the first save creates them, where the page used to say they were not provisioned.
    • The GDPR Compliance erasure queue and the Drafting Studio comments zone no longer show sample records: each now says that none are recorded yet.
    • On the K-Anonymity Console, Re-run now judges a validation run in the run's own privacy tier, with the generalization evidence the run recorded, instead of the standard tier. A failed Re-run's message is now tied to the run it belongs to and clears when you change the page, sort, band or search. An empty table no longer says filters are applied when the page address names a k-value band the console does not recognize. While a band or search filters the table, a line under the figures above it says they count every validation run.
    • On Payment Terms Optimizer, the intelligence narrative in the reasoning panel now always belongs to the forecast whose facts it sits beside.
    • When two reviewers decide the same budget validation check at the same moment, the second is now told the check was decided elsewhere instead of seeing a generic save error, and a decision can no longer slip through while its budget is being locked.
    • The service profitability view's 30-day average cost per ticket is now a true trailing 30-day average. The 30-day revenue and margin averages stay empty until daily contract-value history is available, instead of repeating the same-day figure.
    • On Contract Intake, the file size in the uploaded-files table now reads in the reader's own number format, so a German reader sees "2,0 MB" where an English reader sees "2.0 MB".
    • On Contract Intake, a file with no content is now refused at the upload area with its own sentence instead of a failed upload, and Record intake now names the field it still needs (the contract title or the counterparty) instead of doing nothing when you submit.
    • On Ingestion Flow, the Fields tile now shows how many fields the document version actually has (it used to show only what one page held) and says what the review figure covers when there are more fields than one page; a single field now reads "1 needs review"; and re-running a contract now refreshes the version labelling, so the run band names the new version and its source file instead of showing a raw id.
    • The Ingestion Flow now shows an unfamiliar run status as its plain code instead of failing to render the run.
    • In the Extraction Workbench, a decided field now names its outcome in words, so the queue reads "was Corrected · reason OCR misread" instead of the wire codes.
    • In the Extraction Workbench, a confirmed field now reads "Confirmed" on its own instead of carrying a correction reason that says nothing.
    • In the Extraction Workbench, every confidence figure now reads in the reader's own number format, so a German reader sees "0,72" where an English reader sees "0.72".
    • In the Extraction Workbench, the evidence caption no longer says an overlay is shown when none is drawn, and it leaves out the page line entirely when there is no page to name.
    • In the Extraction Workbench, the decision history of a field now shows the year beside the day, month and time, so entries from different years can be told apart.
    • The Extraction Workbench subtitle now names the review threshold the screen actually uses, in the reader's own number format.
    • On the Cash screen, the recent net cash flow card now calls itself by the same name throughout, instead of switching to referring to positions.
    • In Connector Setup, when connecting a provider fails on the way back from the provider, the message now names the provider where it is known and says what went wrong: an expired link, an approval the provider did not confirm, or a provider that could not complete the connection.
    • In Connector Setup, when a provider returns no organizations to choose from after you approve access, the screen now says so and lets you reconnect the provider or finish later from the connector console, instead of showing an empty list.
    • In Connector Setup, when a provider needs no identifiers, the step rail now marks the Identifiers step as skipped instead of showing it as done.
    • In Connector Setup, the page subtitle no longer says the first sync runs when you activate a connector; activation saves the connector and tests its connection.
    • On the Contract Center, the certification tier in the portfolio line now reads as Bronze, Silver or Gold in your language instead of a raw code.
    • On the Contract Center, the portfolio line no longer shows a stray "across 42 clients" when the contract count cannot be loaded.
    • On the Contract Center, the portfolio line now shows your current certification tier even when a newer award has been revoked or superseded.
    • On the Contract Center, the contract events timeline now orders and dates each event by when it happened, not by when it was recorded.
    • On the Contract Center, each entry in the contract events timeline now shows its event type in your language, such as Signed or Renewed, instead of an English sentence.
    • On the Contract Center, the portfolio line now shows the portfolio health score out of 100.
    • On the Contract Center, the portfolio line now reads "1 contract across 1 client" in the singular, in English and German.
    • On the Contract Center, the renewal band shows its Review renewals link only to people who can open the Renewal Console.
    • On the Contract Center, the snapshot caption in the page header now shows the date and time the portfolio snapshot was last refreshed, in your time zone, once that time is recorded; until then it shows the snapshot's date.
    • On Contract Pulse, the Campaigns card and Needs attention now count and list only active remediation campaigns, and the counts cover every active campaign rather than the first fifty loaded.
    • On Contract Pulse, remediation campaign due and target dates now follow your time zone, and the overdue chip counts calendar days there, so it agrees with the date beside it.
    • On Contract Pulse, the portfolio health disclosure now states that revenue exposure is not shown, and why.
    • On Contract Pulse, the portfolio health score now shows how it moved since the previous stored snapshot, and that snapshot's date, instead of always reading unchanged.
    • On Contract Pulse, the portfolio health score shows when its snapshot was last refreshed, in your time zone, once that time is recorded; until then it shows the snapshot's date.
    • On Contract Pulse, the portfolio health figures and the remediation and cyber readiness cards now show when their statistics were last refreshed, in your time zone.
    • On Contract Pulse, the posture shares and the remediation completion rate read as whole percentages, such as 63% rather than 63.0%.
    • On the Covenant Console, covenant alerts now show a recommended action in your language, and a minimum cash alert also shows its projected shortfall below the required minimum.
    • On the Covenant Console, the covenant alerts panel on narrow screens no longer repeats its Covenant alerts heading.
    • On the Covenant Console, the Covenant and Risk columns no longer offer a sort that ordered rows alphabetically by code; the table keeps its highest breach probability first order.
    • On the Covenant Console, the alert rail now lists covenant breach alerts only and is titled Covenant alerts; cash-out and large outflow alerts no longer appear there.
    • On the Covenant Console, a covenant type filter now sits beside the risk level filter, so the table can show one covenant type at a time.
    • On the Covenant Console, the first KPI card is now labeled Cumulative net cash flow, and its info explains that the figure is a running total with no opening balance, not a cash balance.
    • On the Covenant Console, the Recorded date now follows your time zone setting instead of your browser's, the same zone as the page's refresh time.
    • On the Covenant Console, a link with a filter value the console does not recognize no longer reports that no covenant risks match the current filters, since no filter was applied.
    • The Demand Forecast recommended-actions panel keeps its title and card while it loads, when it is empty, and when it fails to load.
    • The Demand Forecast Console's weeks-above-target count now reflects calendar weeks, and says at least when the run is longer than the history it reads.
    • The Demand Forecast screen no longer offers Clear filters, or says no forecasts match the filters, when no skill filter is applied.
    • The Demand Forecast Console's accuracy tile now says a figure could not be loaded, and offers a retry, instead of showing it as not available when one of its reads fails.
    • The Demand Forecast table no longer repeats a "Baseline" label in every row.
    • The Demand Forecast Console's Status tile now shows the retraining recommendation, and the accuracy tile names the model version it measures.
    • The Demand Forecast table now lists the current forecast only, so its deepest-deficit ranking shows today's staffing gaps rather than past forecasts.
    • The Demand Forecast table's trailing error column no longer shows a dash when its data failed to load; it says so and offers a retry.
    • The Demand Forecast screen now flags a skill's trailing forecast error of 15 percent or more whether the model ran light or heavy.
    • In the Drafting Studio on a narrow screen or pane, the document outline with the guardrail policy and the review panel now open from buttons at the bottom right, instead of being hidden with no way to reach them.
    • In the Drafting Studio, the guardrail policy zone now finds the statement-of-work policy profile however many profiles the tenant has, instead of reporting none when it sorted past the first fifty.
    • In the Drafting Studio, each guardrail policy rule now shows its description and the limits it sets: the maximum drift, the minimum risk rating, the required locale pattern and whether it links a clause library entry.
    • In the Drafting Studio, the note under a long list of policy rules now counts the rules loaded and says that only the active ones are listed.
    • In the Drafting Studio, a policy profile whose first page of rules holds no active rule now says more rules exist past that page, instead of stating the profile has no active rules.
    • In the Drafting Studio, the policy rules list is now in alphabetical order of the clause type names shown in your language.
    • On five more summary strips, across Benchmark Center, Platform Maturity, Hiring Center, the License Utilization lens and Compensation Center, figures already on screen now stay there when a background refresh fails, instead of being replaced by a failure message and a retry button.
    • On two more console summary strips, the Quarantine Workbench header and the Strategy Center health strip, figures already on screen now stay there when a background refresh fails, instead of being replaced by an error message and a retry button.
    • On the Model Serving console, the note saying telemetry could not be loaded no longer appears while the deployment tiles are still showing that telemetry; it now appears only when no telemetry was loaded at all.
    • On the Orchestrator, a feature pipeline with one generated feature now reads "1 feature" rather than "1 features".
    • The Orchestrator now says that its materialized-view refresh queue and counts are platform-wide, shared by every organization, and that its feature pipelines are the organization's own.
    • On the Orchestrator, the Priority column and input now say that 1 refreshes first and that priority runs from 1 to 1000, and the Configure strip refuses a priority above 1000.
    • On the Orchestrator, Refresh now also reloads the feature pipelines, so one click refreshes the whole page.
    • On the Orchestrator, the refresh queue now shows every reader each view's minimum refresh interval, maximum staleness and refresh strategy.
    • On the Orchestrator, a fifth KPI card counts the views past their staleness limit, and those views carry a Stale badge in the refresh queue.
    • On the Orchestrator, the queue's State column no longer offers a sort that ordered the views by one of its badges only.
    • On the Orchestrator, the Configure and Run generation buttons now tell assistive technology which panel they open.
    • On the Orchestrator, a state filter in the page address that the page does not know no longer shows Clear filters or says that no view matches the filters.
    • In the Payment Terms Optimizer, when no client meets the current constraints for an early-pay discount, the recommendation now says the optimizer proposes none, instead of presenting a 1% discount that no client takes as a successful proposal.
    • On the Pipeline Console, the Actions column now shows only to users who can pause and resume streams, instead of standing empty for everyone else.
    • On the Pipeline Console, the Pause and Resume confirmation now stays open showing Working... until the change completes, then closes and returns focus to the stream's row while it is still on the page.
    • On the Pipeline Console, the filters, Clear filters and Refresh now stay in view above the stream list on wide screens, instead of scrolling away with it.
    • On the Pipeline Console, the stream table now filters by layer, streaming state, tripped circuit breaker and detected backpressure beside the status filter, and Clear filters clears all five.
    • On the Pipeline Console, a KPI card with no figure to show now reads Not available as plain text, never styled as a number beside the real counts.
    • On the Pipeline Console, the Layer column and the Layer filter now show each layer's name beside its code, and throughput reads in records per second.
    • On the Pipeline Console, the page readout that a narrow table footer shows in place of the page numbers now reads in your language.
    • On the Pipeline Console, Refresh now also updates the connector names in the recent sync runs list.
    • On the Pipeline Console, a stream's pause or resume error now clears when you change the filters, sort, page or page size, or refresh.
    • On the Pipeline Console, the second figure in the KPI strip now counts the streams with streaming enabled and says so, so pausing or resuming a stream moves it.
    • On the Pipeline Console, the line confirming a pause or resume now names the streaming change, and it clears when you filter, sort, change the page or page size, refresh, or start another action.
    • On the Pipeline Console, each run in the sync activity rail now starts with its date in your time zone, and a line under the rail says it lists the 12 most recent sync runs across all connectors.
    • On the Pipeline Console, a sync run whose status the page does not recognize now reads "Sync status" with its code, instead of "Sync in flight".
    • In the Extraction Workbench, a decided field's history now says whether you or another reviewer made the decision.
    • On the Connector Health screen, the sync confirmation now offers only the data types you can leave out, and names the ones every sync always includes.
    • On the Connector Health screen, Force sync now shows only on connectors that can sync on demand, so it no longer appears on a paused connector or on QuickBooks Desktop, whose data arrives through the Web Connector.
    • On the Connector Health screen, a failed sync, connection test, pause, resume or delete now says why: the connector no longer exists, the request was refused, another sync or test is running, today's sync limit is reached, the provider did not complete the sync, or the connector can no longer sync as it stands.
    • On the Connector Health screen, a connector's details now offer only the recovery its own connection method supports: Reconnect provider for a connector connected through the provider's sign-in, and Replace credentials for one connected with a key or token.
    • Where QuickBooks Desktop is not available, Connector Setup now shows it as unavailable instead of leaving it out.
    • In the Extraction Workbench, a field the extraction pipeline flags as critical now carries a "Critical" mark on its queue row and in its detail view.
    • On the Extraction Workbench, every queue count now counts the whole queue instead of one page, Needs review lists the fields with no measured confidence first, oldest first, instead of leaving them off the page, Decided lists the most recent decisions first, and a count that is still loading shows no number instead of a zero.
    • On the K-Anonymity Console, validation runs show their overall privacy score, can be searched by name or dataset, and sort from their column headers.
    • On Model Experiments, an experiment still in design or draft can now be started.
    • On Model Experiments, a link can no longer sort the table by a date the table does not show.
    • On Model Experiments, Evaluate is offered once an experiment has collected its minimum sample, and each row shows its samples against that minimum.
    • On the Quality Console, the quality-gate summary now counts the L5 gate, so a report that fails only L5 no longer reads as passing every gate.
    • On the Quality Console, a report with invalid records now links to its issues in the Quarantine Workbench, for users who can open the workbench.
    • On the Quarantine Workbench, you can now sort the issue queue newest first or oldest first, as well as most affected first.
    • On the Quarantine Workbench, the issue queue now pages through every quality issue, 100 at a time, instead of stopping at the first 100.
    • On the Quarantine Workbench, you can now search the issue queue by name. The search covers every issue, not only the page in view.
    • Revenue Center's ARR now shows the date of the snapshot it comes from.
    • On the Serving Console, each deployment tile now shows its request count for the last hour, its average latency and its CPU and memory utilization beside the p95 latency, error rate and replicas.
    • On the Serving Console, the Scaling events card now counts the scaling events of the last 24 hours, and its label says so.
    • On the Serving Console, each alert's Metric column now shows the observed value and its threshold, not only the metric's name.
    • On the Serving Console, the alert state filter now offers the same states as the State column: Open, Acknowledged and Resolved.
    • On the Serving Console, each deployment tile now shows how old its telemetry snapshot is, so stale telemetry no longer reads as current.
    • On Shadow Deployments, each validation log entry names the shadow run it belongs to, and a failed check is marked by its own severity.
    • Platform Maturity's refresh card now says how many platform views are failing to refresh.
    • On the Connector Health screen, the sync confirmation now shows that its list of data types is loading, instead of an empty box.
    • On the Connector Health screen, the line under the table now says rows sort by Health by default, instead of claiming that failing connectors sort first.
    • On the Connector Health screen, the Provider filter now lists only the providers you can connect.
    • On the Connector Health screen, the event log no longer calls a connector unknown while names are loading, when they could not be loaded, or when you have more than 100 connectors: it waits for the names, or shows the connector id and says why.
    • On the Connector Health screen, the sync confirmation and a connector's data scope now name its data types in your language.
    • On the Connector Health screen, a connector with no uptime figure now reads Not available instead of an empty cell.
    • On Connector Setup, Connector Configuration and Connector Health, each data type's name and description now read in your language.
    • After the first sync, Connector Setup now says how long it ran.
    • Finishing a Sage Accounting or FreshBooks connection now asks which business to read, not which organization.
    • Connector Setup and Connector Configuration now show region and platform choices by name instead of as codes.
    • Data Platform Center now says when some of its platform facts could not be loaded, with a retry, instead of leaving them out.
    • The Data Platform Center's sync-run timeline and the Connector Console's event log now say a run's connector was deleted instead of calling it unknown.
    • In the Extraction Workbench, a pending field's status and the screen's subtitle now read in the reader's language, so a German reader sees "AUSSTEHEND" instead of "PENDING".
    • Feature Store's statistics caption now says when the statistics were computed, not just which day they cover.
    • On the Performance Console, experiment start dates now read in your time zone instead of UTC.
    • On the Performance Console, Evaluate and Abort on an A/B experiment now show to anyone allowed to configure models, the permission those actions need.
    • On the Performance Console, each retraining run now shows the date of its latest step: when it started, when its training finished, or when it was deployed.
    • Revenue Center now shows the date of the model monitoring its forecast health comes from.
    • The sign-in page now says why an account that signs in with a text-message code is refused, and what to do instead.
    • Sign-up now stops a payment for a billing address in a country we do not serve yet, before any charge, and says so.
    • On eighteen summary strips, retrying a figure that failed to load no longer blanks the whole strip: the other figures stay on screen, and the failed card keeps its message until the retry answers.
    • On the Serving Console, the alert count card now reads Unresolved alerts: it counts every alert not yet resolved, acknowledged ones included.
    • On the Performance Console, a link can no longer sort the experiments by a date the table does not show.
    • When a request is blocked, the screen now says it could not be processed and shows a Contact support link with the request ID to quote, instead of asking you to reload the page or contact your administrator.
    • On Tenant Configuration, the Security step now says the IP allowlist is saved but not yet enforced in this release.
    • Sign-up now stops a payment for a billing address in a country served from a different region than your company, before any charge, and says so.
    • The Changed-since panel on Ingestion Flow now lists the changes of the selected version, not the latest changes across all contracts.
    • A filter on revenue-at-risk now means the same amount everywhere. Asking for risks worth at least a given amount no longer quietly includes ones worth up to 99 cents less.
    • An opened Rolling Forecast variance event now shows its controllability confidence as a percent.
    • The Rolling Forecast table no longer says no months match the current filters when no filter is applied.
    • The Rolling Forecast ledger table now shows the gross margin amount beside revenue and cost of goods.
    • The Rolling Forecast ledger table now shows gross margin as a percent of revenue.
    • The Rolling Forecast KPI strip now shows the month's gross margin and its revenue change against the prior month.
    • The Rolling Forecast variance events show when each was detected on one line.
    • The Rolling Forecast now dates a variance event's review in your configured time zone.
    • Opening a variance event on the Rolling Forecast now shows the drivers behind it.
    • On narrower screens, the Runway Planner now shows on the page when its live forecast, cash position or forecast narrative fails to load, each with its own retry, and says when no baseline forecast has landed yet.
    • On the Runway Planner, each stress test result now lists its recommended actions in your language, and a run with no cash position on file says once that its risk levels are relative to a zero cash basis.
    • On Account Settings and Tenant Configuration, each section's Retry button now announces which section it reloads, so screen-reader users can tell several failed sections apart.
    • A failed refresh on the Rolling Forecast, Service Lifecycle and Demand Forecast consoles now keeps the rows already on screen instead of replacing them with an error message.
    • On the Workload Center, when the capacity figures cannot be loaded, the page header now says "Analytics unavailable" with a retry, instead of leaving them blank.
    • On the Workload Center, the insights timeline now dates each insight by the analysis it comes from and lists the newest analysis first.
    • On the Workload Center, the portfolio line's counts and the Demand Forecast card's unit now read in the singular for one, such as "1 endpoint monitored" and "1 forecast".
    • On the Workload Center, a recent forecast with neither surplus nor deficit now reads "balanced", and hours show up to two decimal places instead of rounding to whole hours.
    • On the Workload Center, the recent demand forecasts now list the latest forecast only, deepest deficit first, each dated by the period it forecasts.
    • On the Workload Center, the recent demand forecasts' dates no longer read a day ahead for viewers west of UTC.
    • On the Workload Center, the portfolio line now states the 30-day utilization, and the Demand Forecast card is captioned with the day's forecast error (MAPE), naming an accuracy breach in words.
    • Filtering capacity optimisations by margin impact now means one amount, in one unit, and the figure that comes back keeps every cent of it.
    Security
    • Rate limits on password reset and verification-email resend now actually apply, and a route can limit per account as well as per address.
    • A temporary lock after too many failed attempts now lasts its full length instead of sometimes ending within seconds.
    • Sign-in limits and temporary address blocks now always apply to the address a request actually comes from.
    • Hiring metrics and applicant tracking sync health now apply tenant row security to every record they read.
    • Contract overview and churn analytics views now apply tenant row security to every record they read.
    • A file downloaded from the file store now saves under its original name instead of opening in the browser tab.
    • Workspace administrators can now shorten the idle timeout below 30 minutes; saving it signs everyone in the workspace out, so the new timeout applies at once.
    • Removing an approval step from a workflow, or a tag from a contract, now requires the contract delete permission rather than the create permission.
    • Switching to another account now opens that account's home page and reloads your other open tabs into it, so no screen keeps showing the account you left.
    Limitation
    • Connector Setup lists BambooHR as not yet available until its new connection method ships.

    Release Notes →

  6. 0.8.0-alpha

    QortexOS v0.8.0-alpha
    Changed
    • GDPR Compliance is now an administrator and owner screen; other roles no longer see it.
    Fixed
    • Retry buttons on the Benchmark Center and Profitability Benchmark screens now say what they reload.
    • Every retry button on the Contracts screens now says what it reloads, so two failures on one screen no longer offer two identical Retry buttons.
    • Every retry button on the Finance screens now says what it reloads, so two failures on one screen no longer offer two identical Retry buttons.
    • Retry buttons across the Operations screens now say what they reload, and the Industry Stress, Service Lifecycle and Demand Forecast KPI strips name their own figures when they fail to load.
    • Every retry button on the Settings screens now says what it reloads, so two failures on one screen no longer offer two identical Retry buttons.
    • Retry buttons on the Vendor Center, Vendor Scorecard and License Utilization screens now say what they reload, and the Vendor Scorecard's KPI strip names its own figures when they fail to load.
    • Every retry button on the Workforce screens now says what it reloads, so two failures on one screen no longer offer two identical Retry buttons.
    • Managers can now assign revenue opportunities; the action was refused for every user.
    • Retry buttons on the Runway Planner and Payment Terms Optimizer screens now say what they reload.
    • The password reset screen now says why a reset was rejected, such as an expired link or a password that does not meet the requirements, instead of a general error.
    • A screen reader now reads which list is loading on the Center screens in the language of the screen, instead of an English placeholder.
    • The sign-up payment step now says when it cannot load instead of waiting indefinitely.
    • The invitation acceptance form now asks for a first and last name.

    Release Notes →

  7. 0.7.0-alpha

    QortexOS v0.7.0-alpha
    Added
    • The labor analytics gain loaded-cost, capacity and coverage figures (loaded labor cost and margin, employer benefit and statutory cost totals, measured capacity and its utilization, attendance and absence hours, the unresolved and unclassified hours), with the vocabularies and the US federal employer tax rates behind them; the rates apply to US-based tenants only.
    • GDPR Compliance now shows your tenant's real retention schedules: a summary of schedules, legal holds, expired and pending-anonymization records, a view of schedules past their retention end, and placing or releasing a legal hold for administrators.
    Changed
    • Contract intake now extracts the renewal date alongside the effective and expiration dates, and the contract prompt registry (document classification, field extraction, clause segmentation and the other contract tasks) is delivered to every environment by the regular database deployment instead of only to freshly built databases.
    • GDPR Compliance now shows your tenant's configured data-policy settings (retention period, encryption at rest, data auditing and export approval) instead of illustrative values.
    Fixed
    • Database deployments no longer report every table as a failed security-policy deployment when the policies are already in place; a table that is genuinely left without its access policies is now reported as a critical issue instead of hiding inside that noise. The retention outreach task queue, which had been left without those policies, is now reachable by the application under a service-account context.
    • Budget Setup's mapping and line steps now say when the account list could not be loaded and let you retry it, announce a failed read to assistive technology, and never claim a page cap over rows they are not showing.
    • Budget Setup now says when the coverage figures or the KPI rows could not be loaded and lets you retry that read, instead of showing a loading line, a dash or the refresh instruction.
    • The Validation Workbench queue lists an Open, Flagged or Skipped pill's checks up to the page cap, including those past the run's first page, and its retry now covers a count or a page that failed to refresh.
    • Evaluating an A/B experiment now applies only to a running experiment or one analyzing its results; a paused, completed, aborted or failed experiment is refused with the reason instead of being silently reopened.
    • A renewal date read from a contract document now reaches the contract and the Renewal Console once the document extractor learns the field (its companion seed change, L0915-33b).
    • Descending lists no longer open with the rows that have no value in the sorted column: a top-spend, top-score or most-recent sort now puts those rows last.
    • Strategic benchmark computations no longer fail on their last dimension when the privacy budget is split evenly across many dimensions.
    • Importing a plan of record now replaces the budget's lines all or nothing: a failure part-way through leaves the previous lines untouched instead of a half-replaced budget.
    • The database migration builder no longer mistakes a comment that mentions its processed marker for the marker itself, so an unprocessed schema change whose header explains the marker is picked up instead of being skipped on every run.
    • The Renewals KPI cards now say that they are what failed to load, with a line on what that means and their own retry, instead of borrowing the renewal registry's error title.
    • Minting a discount sign-up invite works again: the request no longer fails with a database policy error.
    • Budget Setup's Budget master card on the review step now announces to assistive technology when its POR-lines count or COA coverage could not be loaded, including when the failure happens after the page is already showing.
    • Budget Setup now announces to assistive technology when a retried read fails again, and when a step opens with a read that has already failed.
    • Permission checks that name a screen, or any permission code with a hyphen or a digit in it, are now recorded in the system account audit trail; the audit table refused those rows before and the checks went unrecorded. A permission check whose audit row the database refuses now fails instead of proceeding unrecorded.
    • GDPR Compliance now tells you which sections your role cannot view instead of showing a loading error you cannot retry.
    • Clause bank, clause mapping, template, template version and tenant association actions in the Contracts API now answer with the response shapes their contract declares.
    • Retry buttons on the Data Platform home, the Connectors screens and the partial KPI notice now say what they reload, and the Pipeline Console's KPI strip names its own figures when they fail to load.

    Release Notes →

  8. 0.6.0-alpha

    QortexOS v0.6.0-alpha
    Added
    • Unlocking a locked compensation baseline, salary band or commission plan is now a two-step: anyone with the unlock permission requests it with a reason, and the person who locked it approves or rejects the request; every lock, request and decision is kept on an audit trail.
    • Unlocking a locked compensation baseline, commission plan or salary band becomes a two-step with its own permission: a request with a reason, then the lock owner's approval, every step recorded in an audit trail.
    • The contract lifecycle vocabulary now names every step: send-for-signature, archive, restore and expire actions, with a matching event recorded for each lifecycle transition.
    • Peer benchmarks now carry the peer group's 25th percentile with its confidence interval, so the percentile band can show the group's real lower edge.
    • Benchmark privacy enforcement now reads its k-anonymity and l-diversity floors, suppression strategy and filter relaxation order per metric category from a configuration table, and every benchmark metric carries its privacy tier.
    Changed
    • The Industry Stress Console now shows the strategy ROI of retention interventions under the intervention success rate.
    • The Budget Center strip now reports on the current plan of record (the locked budget in force), with next year's draft shown as a secondary line.
    • The ingestion run and step payloads name their status fields the way the rest of the contract does.
    • Compensation baselines, salary bands and commission plans no longer accept lock fields on their update endpoints: locking and unlocking go through the lock actions and the unlock request flow, locking a commission plan is its own lock-state action like the other two, and a locked salary band can no longer be edited through its update endpoint.
    • The Quality Console's KPI strip now shows the average quality score and the date of the statistics snapshot it reads.
    • The Data Platform landing's sync success and quality score figures now weight each connector and layer by its sync and report counts, matching the Quality Console.
    • The Drafting Studio now opens a contract's extracted document: pick a contract or follow the new Open in Drafting Studio links from Contract Intake and the Ingestion Flow, and the preview shows the pages you edited; the AI review panel and the guardrail checks are labelled demonstrations.
    • The home screen's five signal tiles now show real figures: cash position, profitability, revenue, capacity and client health, each stamped with the period its data covers and with the detail behind the figure one tap away.
    Fixed
    • Tenant administrators and owners can now open the Feature Store and the Performance Console; screen permission declarations are trued up to what their routes enforce, and a seed-side gate keeps every tenant screen's declared data permissions reachable on the tenant ladder.
    • The compensation lock trail reads back in a stable order when two transitions share the same timestamp.
    • Compensation baselines defined from a budget now start as drafts that the CFO locks explicitly, and the recovery corridor is its own setting instead of switching on with the patch-adoption threshold.
    • Contract status changes now follow the lifecycle map: only the allowed transitions are accepted, each carries its own permission and is logged, renewing a contract opens its successor version, a contract goes out for signature only with a signer on it, finished contracts are archived and restored through the same map, expiry is the platform's sweep and never a manual status, contract reads show days in the current state, signature progress and a renewal-due flag, and lists can filter on the approved-not-sent and sent-awaiting-signatures states.
    • Re-running the platform configuration seed no longer re-activates a superseded configuration version.
    • Budget Setup's Add mapping button now says which field is still missing, shows that it is adding, and confirms the mapping it added.
    • Budget Setup's Create and Add lines steps now say what is still missing when a submit cannot go ahead, and the lines grid confirms how many lines it added.
    • Peer benchmark reads now carry the annual vintage of the peer data each row was computed from, so the Profitability Benchmark can label the comparison year instead of a daily-rolling date.
    • The Quarantine Workbench now records a reviewer's Apply or Dismiss decision on a remediation suggestion instead of only showing its state.
    • The Profitability Benchmark now names the year of peer data each comparison is ranked against instead of a daily-rolling date and period.
    • A compensation unlock request or rejection made while the lock state changed underneath is now refused instead of being recorded twice.
    • A compensation lock decision made on a stale lock state is now refused instead of being written twice.
    • Filtering the list of scoring weight configurations or privacy analytics configurations now returns the filtered page instead of the unfiltered page.
    • Requesting a scoring weight configuration by an unknown id now answers not found instead of a server error.
    • Renewing a contract failed on the database's version chain; a renewal now records the contract's version history and opens the successor in one step. The contract list reads its lifecycle details (days in state, signature progress) in one query instead of two reads per contract.
    • Renewing a contract now records its version history and opens the successor in one step, and the contract list reads its lifecycle details in one query.
    • Subscription metrics now state a true monthly amount for annual and quarterly plans.
    • Ingestion runs started from the Ingestion Flow now record all six pipeline steps, a step skipped for lack of input shows as skipped rather than failed, and a contract still waiting on text extraction shows as waiting instead of as having no runs.
    • Records in tables added by recent releases can be created again on upgraded environments; their audit stamps are now attached on every deploy.
    • The Engagement Center's Warnings breached and Growth opportunities cards now count the latest analysis day instead of every row ever recorded.
    • The platform's own users can sign in on every environment: their Cognito identity now follows the seed per environment.
    • The Demand Forecast Console's recommended-actions rail now shows the current forecast horizon's actions only, ranked by urgency.
    • Budget Setup's COA mapping step now says when the mappings could not be loaded and offers a retry, instead of reading as if no mappings exist yet.
    • The Validation Workbench queue pills now show the run's true counts per status, even when the run holds more checks than one page.
    • The Rolling Forecast KPI cards now say that they are what failed to load, with a line on what that means and a retry, instead of borrowing the ledger table's error title.
    • Benchmark Enrollment can re-assign the peer group on the day the current membership started; the active membership is corrected in place instead of failing.
    • Contract Intake's Open links now open the Ingestion Flow on the contract you chose, with its newest run in view.
    • The Budget Setup review step's KPIs-by-month panel renders on the kit table with the same columns and formatting.

    Release Notes →

  9. 0.5.0-alpha

    QortexOS v0.5.0-alpha
    Added
    • Partitioned platform tables now get their upcoming partitions created and their retention applied on a weekly schedule.
    • The monthly rolling-forecast refresh now records a variance event for every account whose plan-versus-actual gap exceeds the tenant's variance thresholds (2% revenue, 5% cost by default), and the refresh's variance figures now compare the plans against the month's real actuals.
    • Monthly budget variance events now have their database home: one event per account-month and comparison family, the 2% revenue and 5% cost thresholds seeded as editable policy rules for every tenant, and a pending evidence code until the classifier runs.
    • CRITICAL alerts, and alerts whose materiality reaches the impact band that holds $200K (impacts of $100K and up), are always delivered: no relevance score, analyst override or filtering rule can suppress them, except that a duplicate-detection or redundancy-consolidation rule may still consolidate such an alert with the alerts it repeats.
    • Contract templates now record whether they are a private copy, offered inside the tenant's library or a platform original, and security alerts can name the regulation they violate.
    • Tenant settings can now be provisioned over the API: a create endpoint mints the settings anchor for a tenant that has none, and a get-by-id endpoint reads it.
    • Finance screens can ask for the current plan of record directly: one read returns the locked budget for a reference date, or the newest earlier one, and says which rule applied.
    • Locking a budget now reports the rolling-forecast lines it mirrored from the plan of record, a refresh endpoint re-runs the rolling forecast for a month, and forecast-line sources validate against the four legal values.
    • Data connector lists can now be sorted by business criticality.
    • The Validation Workbench can now list a budget's validation runs directly, so the run picker and history show every run instead of only the runs visible on the first page of checks.
    • Contract, vendor-agreement, peer-benchmark, connector-health and serving-deployment lists gain the server-side windows and predicates their dashboards count over, so the capped-page captions can come off those figures.
    • Three server-side aggregates replace client-side page reductions: vendor relationship spend and lifecycle counts, per-metric peer benchmark percentiles with an as-of date, and a connector-health day summary.
    • The vendor relationship, peer benchmark and connector-health strip aggregates are now computed by the database in one pass instead of from a single page of rows in the browser.
    • The Connector Console's detail panel now lets you review and change which data facets a connector syncs, after the connector has been created.
    • Contracts in the Renewal Console can now be marked as renewed directly from the registry.
    • A locked budget now carries the date it becomes the plan of record, so a budget approved for a future period can be held until that date; the date can be changed while the budget is held and is fixed once it takes effect.
    • The QA tenants now carry a locked 2026 plan of record, a rolling forecast, eight months of actuals with their variance events, and a 2027 draft, so the Budget Center renders real figures on non-production environments.
    • Administrators can create the tenant settings anchor through the API and read it by id; a tenant holds at most one anchor.
    Changed
    • Screens keep the data they already have when a background refresh fails: the failure notice now appears only when nothing could be loaded at all.
    • Detail panes return to the top when you pick a new item, and keyboard users can tab into every pane.
    • API errors now carry their machine code to the browser, so screens can react to a specific failure (for example a completed ingestion run) instead of matching message text.
    • Manual rolling forecast entries are stamped with today's as-of date and marked MANUAL, so the latest-forecast view shows the override; an entry dated after its month is refused with a clear message.
    • Affected-package test runs are sized to their share of the CI host, and only a change to the CI definition itself runs the full suite.
    • API service test runs complete faster.
    • Merge-queue batches no longer run the Databricks validator matrix per entry; the lake is checked on the merged result instead.
    • Lake pull requests run only the test suites their change can affect.
    • Lambda test suites run in their own CI workflow, only when a Lambda changes.
    • Changes to the platform now land through a merge queue with batched checks.
    • Build caching is no longer invalidated by test-configuration changes.
    • Automated test runs are more tolerant of a busy build server.
    • Contract templates and their versions now belong to a tenant; template codes are unique within a tenant, and each tenant sees only its own templates.
    • The portal adopts version 0.39.0 of the shared design system, an additive update with no visible change on existing screens.
    • The BI Catalog screen is now Platform Maturity, at /data-platform/features-ml/platform-maturity.
    Fixed
    • Thirteen platform actions that were defined but never reachable over the API now have endpoints, and the budget validation workbench can show its evidence and re-validate a saved plan.
    • Budget figures refresh reliably when two refreshes, or a refresh and a budget edit, run at the same moment: they now take turns instead of one of them failing.
    • Changing the effective date of an approved budget that is still held no longer fails as an edit to a locked budget.
    • An opted-out tenant's benchmark participation analytics now read opted out instead of pending data.
    • Variable compensation now credits a team's improvement over the rolling forecast even when the baseline target equals that forecast, instead of scoring it as zero.
    • The variable compensation payout breakdown now shows the formula that actually produced each step: the achievement line names the floor, the interpolation or the cap that applied, and the improvement line names the gate that zeroed it or the floored quotient it used.
    • A payout preview now applies the baseline's own adoption threshold when the request does not name one, and its improvement line says which threshold was in force and where it came from.
    • The database's variable-compensation formula reference now pays above-target achievement on the same 1.0 slope with the 1.50 cap as the payout engine, and measures improvement on the absolute target-forecast gap.
    • Re-enabling benchmark participation after an opt-out now succeeds from both the setup flow and the participation update: the opt-out is cleared and recorded in the participation change log.
    • Peer benchmark data now opens tier by tier as a tenant contributes: nothing before three months, standard comparisons from three, detailed insights from twelve and trends from twenty-four, and cohorts smaller than the tenant's k-anonymity threshold are never shown.
    • Variable compensation achievement above target now follows the plan's stated curve: each point over target earns the same share of the target-to-cap band as the plan's examples, capped at 1.50.
    • Hiring funnel analytics now honor the requisition and date filters, read the whole population, and return the stage chain with the conversion between milestones.
    • The candidate reference-code lookup now answers with the candidate's pipeline status only (stage, next action, required actions), never the full candidate record.
    • A compensation baseline's original target is now captured at its first shock adjustment, so the pre-shock value is preserved as intended.
    • Budget optimization recommendations can now be accepted, declined, deferred or marked modified; before, only a pending status could be stored.
    • A workload correlation's suppression state is now checked against its vocabulary when it is written, so only the active and suppressed states can be stored.
    • A differential privacy budget whose scheduled reset date has passed can be updated again, so epsilon accounting keeps flowing for closed periods.
    • Scheduling a privacy budget reset in the past when creating a differential-privacy budget now answers a validation error, while existing budgets past their reset date stay editable.
    • A strategic scenario without a stated confidence level no longer receives a priority score computed from an assumed 50% confidence; its score stays empty until a confidence level is set.
    • A vendor scorecard with a missing dimension now scores that dimension as neutral (50) instead of zero, matching the platform's scorecard pipeline.
    • CDC stream lag monitoring now reports each stream's real lag and circuit breaker state instead of always reading as normal.
    • A relevance score written directly through the create or update endpoint can no longer leave a CRITICAL or $200K-band alert below delivery; the same consolidation exemptions as scoring apply.
    • Filtering-rule simulations now count suppressed HIGH-severity alerts and fail the safety check on them; WARNING suppressions are reported in the medium count and no longer fail the check.
    • Peer benchmark statistics can no longer be edited through the API: the values a tenant sees are the ones the benchmark computation produced.
    • Peer benchmark statistics and keys computed by the platform's peer lane can no longer be altered through the application's update path.
    • Compliance reports, cashflow insights, churn portfolio priorities and template comparisons now read the columns their records carry instead of fields that never existed.
    • Lakehouse layer SLO reads now report a real 30-day breach count and compliant streak, and pipeline orchestration a real freshness check, both derived from the lake's daily statistics.
    • The monthly vendor scorecard summary now scores a missing dimension as neutral (50) instead of zero, matching the vendor scorecard itself.
    • Workload pattern analyses can now carry a Mixed dominant pattern type, the value the pattern detector assigns when no single pattern dominates.
    • A data lineage record's impact criticality is now validated against the platform's business criticality levels instead of accepting any text.
    • Creating or updating a data lineage entry with an unknown impact criticality now answers a validation error instead of a database failure.
    • Validation Workbench: the run picker and the header's run time now come from the budget's own run list, so every validation run is offered newest first instead of only the runs that fit on one page of checks.
    • A compensation baseline's adoption threshold is now checked as a 0-1 rate when the baseline is created or updated, so a payout can no longer be gated by a threshold above 100%.
    • Most paginated lists no longer repeat or skip records that were created at the same moment; every page of those lists is now ordered deterministically. The remaining hand-written list reads follow in a later fix.
    • The remaining paginated lists (files, shares, processing jobs, users, roles, permissions, audit and security records, navigation items, contract approvals, impersonation reports) no longer repeat or skip records created at the same moment; every page is now ordered deterministically.
    • Ingestion Flow: re-running a contract whose completed run the screen had not seen yet now asks for confirmation instead of failing with a raw error, and the waiting-on-OCR notice is recognised by the server's error code.
    • Profit Center recommendations now carry their optimization objective in the vocabulary the data actually uses, so objective filters and the objective label work on every row.
    • Engagement Center growth-opportunity and early-warning lists can now be windowed to a landing date, so the health strip counts the latest analysis day instead of every row ever produced.
    • Budget lines for any month of a budget's period now land in their own monthly partition, including months before the platform's deploy month and up to two years ahead; rows that had already landed in the catch-all partition are moved into place at the next deploy.
    • The High/Medium/Low level fields in the model governance, workload pattern and revenue opportunity contracts now document the mildest-first rank order the reference vocabulary uses.
    • The budget Validation Workbench's Run validation button now works: it re-validates the saved plan on the server instead of trying to download every line first.
    • The generation-loop machine lock decides its fairness pause before it frees a slot and identifies processes by a start value that never moves, so the lock suite no longer flakes in the merge queue or under local load.
    • Benchmark participation now shows the retention window your settings actually hold, including 36 months, and saving no longer shortens it.
    • Security events such as denied permissions and rejected requests are now recorded in the tenant audit log.
    • Choosing a peer group by hand in Benchmark Enrollment now saves instead of failing.
    • Benchmark enrollment now saves every setting from the consent step in one step, including the retention period, cross-tenant learning, consent and cross-border approval, and records the consent date automatically when consent is given.
    • The Budget Setup account picker now lists and keeps the selected chart-of-accounts account.
    • Budget Center, Budget Setup review and Rolling Forecast now show KPI figures after a refresh; the refresh no longer fails silently.
    • Budget KPI figures no longer double-count a rolling forecast that has been refreshed more than once; each month counts only the latest forecast.
    • A new budget's period and historical window now land in the fiscal year that was requested, for tenants in every time zone; budgets created with last year's dates are corrected.
    • Budget shock proposals and scenario plans now take their date windows from the budget's own fiscal period instead of the server's local calendar year.
    • Budget POR import now refuses an empty file instead of clearing the budget, and negative amounts on contra-revenue and expense accounts validate correctly.
    • The validation workbench's split-allocation finding now records the percentage the way the screen expects, so a GL code whose splits do not sum to 100% shows its actual total.
    • Running a stress test or generating insights for a cashflow forecast that does not exist now returns a not-found response instead of a server error.
    • Retention Center portfolio analytics now honor the requested time window or rolling preset, and report the portfolio size from the latest snapshot.
    • At-Risk Signals lists resolve each client's open engagement case in one batched lookup, and a failed lookup no longer fails the list.
    • At-Risk Signals SHAP explanation reads return 404 instead of 500 when the explanation or its prediction does not exist.
    • Migration and seed changes now also run the operations lake suite.
    • The CI remote cache now stores and serves build artifacts across runner hosts.
    • Engagement Center health analytics now count healthy and at-risk clients and distribute scores on the 0.00-1.00 health scale.
    • Contract obligations and remediation campaigns now require only the contract compliance permissions their endpoints already ask for, instead of an extra lifecycle grant on top.
    • Changing a contract's status now returns the updated contract together with its previous status code, as the API documents.
    • Connector Console filters (type, provider, health and the rest) now narrow the connector list.
    • Opening or deleting a data-quality report that no longer exists now returns a proper not-found response, and deleting a report also removes its issues, remediation suggestions and compliance results instead of leaving them behind.
    • Department Setup now says why a department could not be created, updated or deleted, such as a duplicate name, a missing parent, a circular hierarchy, remaining child departments or a department that no longer exists, instead of a generic server error.
    • Allocating privacy budget now counts the epsilon already held by open reservations, so an allocation can no longer consume budget a pending reservation is waiting to settle.
    • Extraction Workbench fields now point at the clause and page they were read from.
    • The Federated Console's analytics now honour the selected date range instead of always summarising every experiment.
    • Demand Forecast Console accuracy analytics now honor the requested model, skill and date window, and report a signed per-skill forecast error.
    • Demand Forecast Console comparison records created or updated through the API now store a signed percentage error, so over- and under-forecasting are distinguishable.
    • Resolving an HRIS sync conflict from the console now saves instead of failing.
    • Running a privacy validation on a dataset more than once now records each run separately instead of failing.
    • Evaluating an experiment before its minimum sample size, or deploying a retraining that is not ready, now returns a clear validation response instead of a server error.
    • Profit Center baselines now load for users whose access comes from the finance module pack.
    • QuickBooks Desktop connectors no longer show a next sync time the platform never runs; the console reads Not scheduled.
    • true
    • Adopting or implementing a data-quality remediation suggestion now records when it was adopted and by whom, as the API documents.
    • The Revenue Center executive summary now reports the blended growth rate and net revenue retention at their true percentage, and flags net revenue retention below 100 percent.
    • Opening or cancelling a revenue forecast batch that does not exist, or cancelling one that has already finished, now returns a clear response instead of a server error.
    • Runway Planner stress tests now measure risk against your latest cash position instead of a zero balance, so scenarios show the full range of risk levels.
    • The serving health check now reports the model's real telemetry snapshot instead of recording a synthetic one, and shows Unknown when no recent metrics exist.
    • New organizations created through the standard sign-up now carry their operating currency, locale and time zone from the start, so money and dates render in the right currency and zone instead of the USD and UTC defaults.
    • The Cash landing's forecast-insight list spans its own row below the index, and each row shows the analysis date and benchmark percentile instead of producer text.
    • The Industry Stress console offers the column sorts its headers announce, and the Retention landing's departure timeline spans its own row below the index like the other operations landings.
    • Subscription metrics now refresh; the subscription dashboard figures are populated after a refresh.
    • Alert, model operations, translation, prompt and notification services no longer fail their internal permission checks on read, configure and delete actions.
    • Confirming your organization's currency, locale and time zone now reaches every signed-in user of the tenant on their next request instead of only the person who confirmed.
    • Listing tenant limit, security, notification and UI settings now honours the requested filters and sort order and returns the page and page size alongside the results, as the API documents.
    • Subscription Management now shows whether a subscription really renews at period end: the flag follows Stripe's cancel-at-period-end state and the subscription status, turns off on cancellation and turns back on when a subscription is reactivated.
    • The Service Catalog feeds, the Compensation landing and the Contracts Lifecycle feed now use the same kit pieces as the Benchmark landing: link cards in the auto-fill grid and the activity feeds on their own row below the cards.
    • Console tables lose their doubled frame, seven console rails start level with their table, the Extraction Workbench and the License Utilization detail pane scroll once, and section headings take the kit heading size.
    • Contract Intake lists uploaded files in the standard table, with the file's size and upload time as their own columns.
    • The Strategy, Budget, Revenue and Cash landings compose the same kit pieces as the Benchmark landing: link cards in the auto-fill grid grouped as the sidebar groups them, and the activity feed on its own row below the cards.
    • On narrow screens the sheet that opens a console's side rail scrolls once on eleven consoles instead of nesting a second scroller inside itself.
    • The Service Catalog feeds row carries one feed, and Service Lifecycle composes the kit console shell with its queues rail beside the table.
    • The Workload, Retention and Engagement landings compose the same kit pieces as the Benchmark landing: link cards in the auto-fill grid grouped as the sidebar groups them, and the activity feed on its own row below the cards.
    • The sidebar names the tenant a size above the section titles, the Demand Forecast, Service Lifecycle and Industry Stress tables lose their doubled frame, the Service Catalog index renders as cards, and a stored file whose processing failed no longer offers Record intake.
    • The Vendor and Contracts Lifecycle landings compose the same kit pieces as the Benchmark landing: link cards in the auto-fill grid, and on Vendor the activity feed on its own row below the cards.

    Release Notes →

  10. 0.4.0-alpha

    QortexOS v0.4.0-alpha Updated
    Added
    • Connectors can sync every 4 hours, and QuickBooks Desktop connections now default to that interval.
    Changed
    • A failed scheduled sync no longer stops a connector's schedule; the run is logged and the next run happens at the connector's regular interval.

    Release Notes →

  11. 0.3.0-alpha

    QortexOS v0.3.0-alpha Updated
    Added
    • Workspaces that have no departments yet now receive a standard set of six (Service Desk, Engineering, Projects, Sales, Management, Administration) that you can rename, reorganize or remove.
    Changed
    • Refreshed interface styling: clearer borders and dividers, a lighter navigation band in dark mode, and consistent 44-pixel touch targets on icon buttons, toggles and dialog controls.
    Improved
    • BambooHR connections now import each employee's current pay rate, pay type and schedule, hours per pay cycle, org placement, and hire and termination dates.
    Security
    • BambooHR time-off requests are now imported without employee and manager notes.

    Release Notes →

  12. 0.2.0-alpha

    QortexOS v0.2.0-alpha
    Added
    • New Connector Configuration screen: edit an existing connection's name, sync frequency, provider identifiers, request limits, and data scope.
    Changed
    • The connector setup wizard no longer shows the duplicate Setup summary panel; the Review step carries the configuration summary.
    Improved
    • Connector credential forms now show identifiers such as client IDs and usernames in cleartext, and every masked field has a show/hide toggle.
    Fixed
    • Profitability and peer-benchmark cost metrics now show as unavailable where labor cost is not yet measured, instead of reporting an incorrect 100% margin; peer percentile ranks are now computed only from measured data.
    • Restored API availability on the production environment.

    Release Notes →

  13. 0.1.0-alpha

    QortexOS v0.1.0-alpha
    Highlight
    • QortexOS enters public alpha: a multi-tenant MSP intelligence platform with a full portal, nineteen data connector providers, financial and operational intelligence surfaces, and English plus German throughout.
    Added
    • Data connectors can now be set up in the product: choose any of the 19 supported providers, enter credentials or approve access with the vendor, and get an immediate connection test result.
    • Connector syncs now run on a schedule and record durable outcomes, so connection health and last-sync status shown in the console reflect what actually happened.
    • Historical backfill can now be launched from the product: pick connectors and data areas, and the run imports history in resumable chunks with visible progress.
    New
    • Connector platform: a guided five-step setup wizard that tests the connection before saving, an operational console with sync controls, a connector intelligence view with health trends, and a data-quality quarantine workbench.
    • Financial intelligence: Runway Planner for 24-month scenario cash planning, Payment Terms Optimizer for early-pay discount decisions, and Strategy Pulse for portfolio momentum and corrective actions.
    • Contracts: Template Vault for governed contract templates with versioning and approval, and Drafting Studio for clause-level review with guardrail policies.
    • Client retention and benchmarking: At-Risk Signals ranks accounts by churn risk with supporting evidence, and Profitability Benchmark shows your percentile position against privacy-protected peer cohorts.
    • Vendor intelligence: License Utilization Lens surfaces license waste and overlapping tools with actionable findings.
    • Administration: account preferences, tenant configuration, department setup, subscription management and GDPR compliance views, with invitation-based user onboarding and role management.
    • Billing runs on Stripe with graduated multi-currency plans and a hosted billing portal for payment changes.
    • The full product is available in English and German, including navigation, screens and emails.
    Security
    • Access is enforced at four layers, from database row-level security up to the screen, and every tenant's data is isolated end to end.
    Known issue
    • Alpha ships a first wave of screens; the remaining registered screens are hidden and arrive in later releases.
    Limitation
    • A few surfaces preview their intended experience on clearly marked illustrative data while their live data feeds are completed.

    Release Notes →