Skip to content

[Nightly]: 2026.17 perfomance - #9107

Open
pmPaulis wants to merge 49 commits into
developfrom
nightly/2026.17-perfomance
Open

pmPaulis wants to merge 49 commits into
developfrom
nightly/2026.17-perfomance

Conversation

@pmPaulis

Copy link
Copy Markdown
Contributor

Issue & Reproduction Steps

In this branch already merge all the changes related to the perfomance staff

Related Tickets & Packages

Code Review Checklist

  • I have pulled this code locally and tested it on my instance, along with any associated packages.
  • This code adheres to ProcessMaker Coding Guidelines.
  • This code includes a unit test or an E2E test that tests its functionality, or is covered by an existing test.
  • This solution fixes the bug reported in the original ticket.
  • This solution does not alter the expected output of a component in a way that would break existing Processes.
  • This solution does not implement any breaking changes that would invalidate documentation or cause existing Processes to fail.
  • This solution has been tested with enterprise packages that rely on its functionality and does not introduce bugs in those packages.
  • This code does not duplicate functionality that already exists in the framework or in ProcessMaker.
  • This ticket conforms to the PRD associated with this part of ProcessMaker.

PR Packages

ProcessMaker/screen-builder#1917
ProcessMaker/vue-form-elements#475
https://github.com/ProcessMaker/package-savedsearch/pull/706

rodriquelca and others added 30 commits July 28, 2026 11:03
Introduce PUT /api/1.1/tasks/{id} for COMPLETED status, gated by
TASK_UPDATE_V1_1_ENABLED, with optional raw token persistence behind
TOKEN_PERSISTENCE_RAW_ENABLED.

https://processmaker.atlassian.net/browse/FOUR-32800
Batch-load listing relations after pagination to avoid per-row queries
for process version alternative, active tasks, process categories, and
project assets while preserving the existing API response shape.

- Add ProcessRequestListingRawRepository to hydrate activeTasks (raw SQL)
  and process data (Eloquent + batched projects/categories)
- Use withAggregate for process_version_alternative and read it without
  lazy-loading ProcessVersion
- Add activeTasks relation and use preloaded data in ProcessRequests
- Preload projects JSON and reuse loaded categories in Process accessors
- Apply hydration in index and getRequestsByCase
- Add bounded query-count feature test

https://processmaker.atlassian.net/browse/FOUR-32947
feat(FOUR-32801): improve Jobs execution when the PUT tasks endpoint is executed
feat(FOUR-32800): add v1.1 task completion endpoint with raw SQL path
FOUR-32800: test compares legacy and optimized
devmiguelangel and others added 15 commits September 10, 2026 12:21
…mps are null

Prevent task completion failures when recording the Prometheus
activity_execution_time_seconds histogram in BpmnSubscriber.

Fall back to created_at and completed_at when created_at_ms or
completed_at_ms are unavailable, and skip the metric observation
when either timestamp is still missing.

https://processmaker.atlassian.net/browse/FOUR-33645
FOUR-32144: Improve the api PUT /api/1.0/tasks/{task-id}
FOUR-32946 Improve the API /api/1.0/processes
perf(FOUR-32947): reduce N+1 queries on requests listing (FOUR-32947)
fix(FOUR-33645): guard activity execution time metric when ms timesta…
FOUR-32126: Inbox >> First loading is to slow
@cursor

cursor Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

PR Summary

High Risk
Changes core task listing/completion and process/request API payloads behind feature flags, with optional raw SQL persistence that could diverge from Eloquent behavior if misconfigured.

Overview
This nightly release bundles performance work across tasks, process/request APIs, BPMN persistence, and the Tasks UI shell.

Tasks and workflow: When OPTIMIZED_TASKS_ENABLED is on, the tasks API index delegates to the v1.1 optimized listing path (lighter selects, column/field mapping, EXISTS-based non-system filtering). Optional flags add raw SQL for token persistence and a v1.1 PUT task completion path that loads rows via repositories and bridges into WorkflowManager without full Eloquent round-trips. The web Tasks list route uses ETag middleware so unchanged page context can return 304; BrowserCache skips no-store when an ETag is already set.

Listings and hydration: Process index moves to paginated queries, drops heavy columns (bpmn, svg), and stops eager-loading events / in-controller start-event filtering. Process request listings hydrate process and activeTasks through ProcessRequestListingRawRepository after paginate, with a test capping query growth when includes are used.

Frontend: Axios gets an optional GET cache + in-flight deduplication layer; process catalog calls no longer request with=events. Task edit defers the Data tab Monaco editor and comment lookup until needed, and preloads task JS bundles.

Other: Recommendation job deduplication (ShouldBeUnique), safer activity metrics when millisecond timestamps are missing, and version bumps (app 2026.17.1-p1, branch-pinned UI packages).

Reviewed by Cursor Bugbot for commit 4b6f9ce. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor cursor Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

{
if (config('app.processmaker_optimized_tasks_enabled')) {
return (new V1_1TaskController())->indexOptimized($request, $getTotal, $user);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optimized tasks controller missing constructor argument

High Severity

GET /api/1.0/tasks now does new V1_1TaskController() while that class requires TaskCompletionRawService. Manual new skips the container, so the inbox path throws ArgumentCountError whenever processmaker_optimized_tasks_enabled is on, which is the default.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit d80baef. Configure here.

Comment thread ProcessMaker/Repositories/TokenPersistenceRawRepository.php
Comment thread ProcessMaker/Traits/TaskControllerIndexMethods.php
nolanpro and others added 4 commits October 20, 2026 08:00
Use npm branch builds for modeler, screen-builder, and vue-form-elements, and Packagist dev-epic/FOUR-32144 for package-savedsearch.

Co-authored-by: Cursor <cursoragent@cursor.com>
@decisions-sonarqube

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 3 potential issues.

There are 4 total unresolved issues (including 1 from previous review).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 4b6f9ce. Configure here.

if (!$includeData) {
$q->exclude(['data']);
}
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Invalid parent_id on task include

High Severity

The optimized task list selects parent_id on processRequest. Request rows use parent_request_id, so include=processRequest (the inbox default) hits an unknown-column SQL error and the task list fails.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 4b6f9ce. Configure here.

if (!$includeData) {
$q->exclude(['data']);
}
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Task include data column dropped

High Severity

include=data never selects process_requests.data. The constrained processRequest select omits data, and token JSON columns stay excluded, so saved-search and inbox data.* columns render empty even though the client requested them.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 4b6f9ce. Configure here.


$features['mix_manifest'] = $this->fileVersion(public_path('mix-manifest.json'));

return $features;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ETag ignores Vite asset changes

Medium Severity

The tasks-page ETag versions mix-manifest.json but not the Vite build manifest. A Vite-only deploy can keep the same ETag, so browsers receive 304 and keep a stale /tasks shell after assets change.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 4b6f9ce. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants