SignalSync 2025.12.0 Product Release
Release date: December 2026
Version: 2025.12.0
This release delivers enhancements to the Graphical Workflow Engine, Rule Chains, Facility Maintenance, and platform infrastructure — including drag-and-drop file uploads, document field support in Management Consoles, improved error handling in Rule Chains, and a major automated email processing capability for supplier workflows.
What's New in 2025.12.0
Graphical Workflow Engine (GWE)
Drag & Drop File Upload for GWE Forms
NXT-977Users filling out GWE forms that include file upload fields can now drag and drop files directly into the upload area — without clicking through the file browser.
Key behaviours:
- The upload area provides visual feedback (highlighted border, overlay message) when a file is dragged over it
- Files are validated on drop for size (configurable maximum, default 10 MB) and file type (based on field configuration)
- On a single-file field, dropping a new file replaces the existing attachment
- The traditional click-to-browse method remains fully functional alongside drag & drop
- On mobile and touch devices where drag & drop is unavailable, the standard tap-to-browse experience is preserved without errors
Validation behaviour details
| Condition | Behaviour |
|---|---|
| File exceeds size limit | Upload blocked; error shown: "File size exceeds maximum allowed size of [X] MB" |
| Unsupported file type | Upload blocked; error shown: "File type not supported. Allowed types: [list]" |
| Single-file field with existing file | New file replaces existing file on drop |
| Multiple-file field | All valid files are uploaded; invalid ones are individually rejected |
Display and Download Document Fields in Management Console
NXT-982Document fields from published workflow forms can now be included in Management Console grids. Previously, document fields were silently excluded from the field selection interface when configuring a console.
Field selection behaviour:
- Document fields appear in the field selector with a
(DocumentField)type indicator - If a document field shares the same name across all selected workflows, it appears in the Common Fields section
- If it exists in only some workflows, it appears under the relevant workflow tab
Grid display:
- Document field columns show the original file name (e.g.,
Contract_2024.pdf), not the internal storage UUID - Names are truncated to 10 characters for display; empty fields show a blank cell
Download:
- Clicking a file name in the grid immediately triggers a browser download with the original file name and extension
- If the file is no longer available, an appropriate error is shown
Real-Time Comment Indicator on Request Cards
NXT-918 (also covered in NXT-906)The comment (chat) icon on request cards now reflects comment state in real time:
- A notification dot appears on the chat icon whenever one or more comments exist on the request
- The indicator disappears automatically when all comments are deleted
- Opening and closing the comments panel does not clear the indicator — it reflects actual comment presence, not read status
- The comment list is always reloaded from the database when the panel is opened, preventing stale data from being shown after another user has added or deleted a comment
Rule Chains
Proper Handling of GWE Error Responses in Rule Chain Execution
NXT-992GWE endpoints that process multiple requests simultaneously return HTTP 200 even when individual requests within the batch encounter errors (404 Not Found, 400 Bad Request). Previously, Rule Chains interpreted this 200 as a complete success, ignoring per-request error details and continuing execution regardless of the configured error policy.
Rule Chains now inspect the per-request result array returned by GWE endpoints. If any request result contains an error status:
- When the Rule Chain's error policy is set to Break, execution stops immediately at that node
- The error is surfaced as if the GWE endpoint itself had returned an error HTTP status
- Chains configured with Continue policy are unaffected and proceed as before
This ensures Rule Chains react correctly to partial failures in batch GWE operations.
Workflow ID No Longer Required for Request-Scoped Operations
NXT-981When configuring a Rule Chain node that performs a GWE action or updates request details, the Workflow ID field is now optional. The system automatically infers the workflow from the request_id present in the node's payload, eliminating a redundant configuration step that previously required users to manually specify a workflow that could already be resolved from context.
Rule Chain Support for Workflow Versioning
NXT-956With the introduction of workflow versioning, Rule Chain nodes that use the Initialize Workflow operation type now automatically target the latest published version of the specified workflow at execution time.
Key behaviour:
- Rule Chain definitions are not modified when new workflow versions are published
- Workflow references in nodes are resolved at runtime: Base Workflow → Latest Published Version → Version-specific ID
- Existing Rule Chains created before versioning was introduced continue to function without any migration or reconfiguration
- The transition from unversioned to versioned workflows is seamless
Email Processing System for Supplier Responses
NXT-914SignalSync now includes an automated email processing pipeline that polls a dedicated mailbox for supplier completion emails and automatically advances maintenance requests through their workflow.
The system covers the following end-to-end flow:
- Scheduled IMAP polling retrieves unread emails from the inbox on a configurable cron schedule
- Request identification via a 10-character Base62-encoded code embedded in the email subject (prefixed with
#), which encodes therequest_idandtenant_id - Email body parsing extracts and sanitises supplier comments (HTML stripped, signatures removed, max 5 000 characters)
- Attachment processing downloads and validates attachments (PDF, DOCX, XLSX; configurable max size)
- Rule Chain trigger invokes the configurable Rule Chain (defined by GWE_RulechainProcessEmail) to automatically advance the request status.
- Email archiving moves processed emails to an Archive folder; failed emails are routed to error subfolders
- Execution logging records every polling run in a dedicated audit log table (statuses: IN_PROGRESS, SUCCESS, FAILED, NO_EMAILS)
Application parameters introduced
| Parameter | Default | Description |
|---|---|---|
GWE_MaxAttachmentsSizeMB | 10 | Maximum size per attachment in MB |
GWE_MaxTotalAttachmentsSizeMB | 30 | Maximum total attachment size per email in MB |
GWE_AllowedFileExtensions | pdf,docx,xlsx | Permitted attachment extensions |
GWE_RulechainProcessEmail | Process Supplier Response | Rule Chain executed on valid email |
GWE_DocumentFieldIds | actual_doc, supplier_doc_1, supplier_doc_2 | Target document fields on the request form |
GWE_EmailBodyTargetField | supplier_comments | Target text field for parsed email body |
Facility Maintenance
Due Date and Estimated Duration on Preventive Maintenance Requests
NXT-473Requests generated from Preventive Maintenance tasks now include two additional fields automatically populated at generation time:
__date_planned— the scheduled date from thepm_tasksrecord, giving supervisors and technicians visibility into when the work is due regardless of when the request was generated__estimated_duration— the estimated duration from the associatedpm_proceduresrecord
This is particularly valuable for organisations that generate PM requests days or weeks in advance (e.g., shift-based or weekly scheduling), as users can now distinguish between requests scheduled for different dates without opening each one individually.
Platform & Infrastructure
Microservices Naming Standardisation
NXT-892All SignalSync microservices, Docker containers, and Docker images have been renamed to follow a consistent signalsync-{service}-{type} convention. This resolves three separate naming patterns that previously coexisted in the architecture and caused operational confusion.
Renamed services reference
| New Name | Type |
|---|---|
signalsync-core | UI + BFF |
signalsync-core-api | Integration API |
signalsync-workflow-api | Workflow Engine |
signalsync-rules-api | Rule Chains |
signalsync-notification-api | Notification Service |
signalsync-discovery | Service Registry |
signalsync-infra-kafka | Infrastructure |
signalsync-infra-grafana | Infrastructure |
signalsync-infra-prometheus | Infrastructure |
signalsync-infra-loki | Infrastructure |
signalsync-infra-tempo | Infrastructure |
All services can now be filtered with a single docker ps --filter "name=signalsync-" command, and relationships between services and their databases are self-evident from naming alone.
Details Service Logic Migrated to Core API
NXT-896The nexty-sync-details-service — a legacy microservice that was created to bridge data access gaps before a centralised API layer existed — has been retired. All its functionality (user/role data sync, data enrichment, Relational Roles queries) has been migrated into signalsync-core-api.
This simplifies the service topology, reduces inter-service communication overhead, and removes a source of maintenance complexity that required separate deployment and configuration.
Next.js Library Compatibility Fixes
NXT-939Following a Next.js library upgrade, several Tenant Admin views had stopped loading correctly — including White Labeling, Security settings, and System Profile views (which returned 404 errors on click). These issues have been resolved and all affected views are fully functional in this release.
Localization Key Sorting Standardised
NXT-960Localization JSON files are now sorted lexicographically using Biome, matching the sort order used by Weblate (the translation management platform). This eliminates diff noise in pull requests caused by key ordering mismatches between the development toolchain and the translation platform, and removes the need for a custom pre-commit Git hook in Weblate.