Skip to content

egov-workflow-v2: transition silently drops the 'assignees' key — @JsonProperty("assignes") + lenient deserialization means no eg_wf_assignee_v2 rows #1674

Description

@ChakshuGautam

Summary

The ASSIGN action updates the assignee column on the parent eg_wf_processinstance_v2 row but never inserts rows into eg_wf_assignee_v2. Any consumer that reads assignees from the join table — including /egov-wf/process/_search responses used for re-assignment and downstream auto-escalation — sees zero assignees for a complaint that was successfully assigned.

Reproduction (fresh, 2026-06-10, PGR on DIGIT 2.9-line stack)

  1. Citizen files a PGR complaint; GRO performs ASSIGN with one assignee via /egov-workflow-v2/egov-wf/process/_transition (HTTP 200; the assignment is visible in the UI timeline).
  2. Inspect the DB:
SELECT pi.action,
       (SELECT count(*) FROM eg_wf_assignee_v2 a WHERE a.processinstanceid = pi.id) AS join_rows
FROM eg_wf_processinstance_v2 pi
WHERE pi.businessid = '<SRID>' ORDER BY pi.createdtime;
-- APPLY  | 0
-- ASSIGN | 0   ← expected 1
  1. A subsequent ProcessInstance search returns assignes: [] for the latest instance.

Impact

  • Re-assignment flows that depend on current assignees mis-resolve.
  • Auto-escalation (CCRS pgr-services scheduler) skips every assigned complaint with NO_ASSIGNEES — on a production Kenya deployment 100% of open complaints are unescalatable for this reason.
  • Workaround we use in tests/demos: manual INSERT INTO eg_wf_assignee_v2 (...) for the ASSIGN process instance — clearly not viable for production.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions