Product Updates - v3.74
This release is anchored by functionality for AI-assisted receipt and table population, integration-endpoint lookups , and several supporting enhancements β alongside usability improvements and general fixes.
πͺ Feature Updates & Enhancements
AI-Populated Tables from Form Fields
AI-fill tasks can now derive their output from other form fields β single inputs or table rows β instead of only from uploaded attachments. A task can declare source_fields and source_tables (and may combine them with attachments), so derived-data flows like "expand a travel-date table into a per-diem table" work without a receipt upload. (#918)
Multi-Receipt Upload β One Expense Row per Receipt
Users can attach receipt photos to an expense claim over several days, then run a single "Analyse All Receipts" action that uses AI to read each photo and create one expense row per receipt (date, merchant, amount, currency, category). The action is incremental β re-running it processes only newly added photos and appends new rows, leaving existing rows untouched. (#1204)
Auto-Select Sole Search Result
A search-things / asset-search component can now auto-select its result when a lookup returns exactly one match (autoSelectSingleResult), removing an unnecessary click when only one option is ever valid. (#1321)
Row-Aware Integration Lookups in Data Grids
A data-grid "thing" column backed by an external integration endpoint can now filter on a value from another cell in the same row, so a lookup in one column (e.g. an FX rate or expense code) can be driven by sibling cells in that row. (#1320)
Integration Activity Supports Single-Object Endpoint Responses
Integration endpoints whose upstream returns a single JSON object at the response root (no value/array wrapper) are now mapped as one item and written to the target path. This unblocks FunctionImports β person info, current-user info, system parameters, etc. β which return a bare entity object rather than a collection. Array/value responses are unaffected. (#1324)
Comment Box Control Shows Latest Progress Remark & Date
The Comment Box Control now surfaces the latest action-progress remark and the date that remark was made as columns in the register, so the most recent update is visible without opening each item. (#964)
Edit Linked Work Items via Side-Peek
From a work item with a related-work table, users can now open a linked item in a side-peek and apply updates in place β provided they have permission β without navigating away from the parent work item. (#983)
Print Link on Dashboard Rows
Dashboard rows now include a work-item print link, so a work item's printable/PDF view can be opened directly from a dashboard row. (#1179)
Configurable Grouping & Discount on the Timesheet Component
The timesheet-table component now supports configurable grouping and discount display (timesheetEnableGrouping, timesheetDefaultGrouped, timesheetShowDiscount). These options are now honoured when a component is written through the per-component / API / MCP add_components path, not just via the whole-layout app editor. (rise-x-sdk-core #3415 Β· API rise-x-api #1987)
Subscription Updates Apply to Existing Companies
When a subscription definition is updated, the change now propagates to companies that already have that subscription assigned, rather than only applying to newly assigned companies. (rise-x-api #2011)
π Bug Fixes
Subscription menu built from the last-modified subscription instead of all subscriptions (rise-x-api #1994)
getSessionInfo returned menu items for only the last subscription in a company's list rather than the union of all subscriptions. Now calculated across all subscriptions.
OIDC silent token-refresh failures (iframe warnings + 401 cascade) (#1261)
The production browser console showed repeated warnings from the OIDC silent-renew iframe, and API logs showed a high volume of 401s correlating with the refresh failing. Silent renew was misconfigured (no dedicated silent_redirect_uri), so token expiry cascaded into forced re-authentication. Token renewal now uses the refresh_token grant and the silent-renew iframe has been retired, with more graceful 401 handling.
/api/v3/search/user slow and inconsistently slow in production (#1429)
The user-search endpoint returned the same query anywhere between ~1.6 s and ~13 s across consecutive calls in production, risking client timeouts on any flow that searches users by email (assignment, task invites). The lookup path was addressed to give stable, predictable latency.
Multiple identical emails sent on user-invitation submit (#1313)
A single "Submit" on the user-invitation action sent multiple identical emails within ~7 seconds instead of one. Notification dispatch now sends a single email per invite.
Duplicate emails when removing a share and self-upgrading (#1239)
Removing a user from a Work Item share panel while upgrading own access in the same action produced multiple identical invitation emails.
Inviter also receives the share email when inviting a user (#1421)
Sharing a work item sent the share-notification email to both the inviter and the invitee; only the invitee should receive it.
SignalR events not received β task permissions & AI updates stale until refresh (rise-x-api #1988)
Real-time serverβclient updates silently failed to arrive, so submitted-task permissions and AI updates didn't reflect until a manual page refresh. Fixed so events arrive live.
Skip action doesn't assign permissions from auto-populated default values (#1287)
Skipping forward through a step left the destination task unassigned (no email, no assignee) when the "submit to" side-panel value was left on its auto-populated default. The default value is now used to assign the destination.
Dashboard: duplicate data labels on horizontal total-by-bar charts (#1371)
Horizontal bar charts with end-of-bar labels rendered each value twice β once cleanly at the bar end and once as a misaligned diagonal "staircase". Single-series bars now keep only the clean end-of-bar label.