intent: a process status setter overwrites a roll-up-owned status - a PAID invoice goes back to SENT when its Send task completes after the payment
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
Línea de trabajo
Start with the generated setter template at components/template/template-application-events-java/.../events/SetField.java.template and the roll-up ownership logic in components/ide/ide-template/.../model/RollupAggregates.java. Trace how DisplacedStatus and owned statuses are handled, then inspect the declarative transitions: runner and updateProperty transition actions mentioned in the issue. Done means setters preserve roll-up-owned Status while recording the intended lifecycle status, which is restored when the roll-up relinquishes ownership.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens
A process status setter generated from SetField.java.template (<Process>MarkSent, MarkIssued, MailSent, Confirmed, ... - every ${JavaTask} that sets the lifecycle Status) writes its target status with a targeted single-column updateProperty(id, "Status", n), unconditionally. When the entity's status is at that moment owned by a roll-up (statusWhenFull / statusWhenPartial, the PARTIAL/PAID of a settled document), the setter overwrites it, and nothing ever restores it: the roll-up listener (RollupAggregates) re-asserts PARTIAL/PAID only when the summed amount changes.
Reproduced on a production tenant (BusinessIntents Suite, platform 14.76.0, base-sales-invoices):
2026-09-11 11:49Z CustomerPayment 3 (4 800.00) allocated to SalesInvoice 16 (Payable 4 800.00)
-> roll-up invoicePaid: Paid 4800, Balance 0, Status 7 (PAID)
2026-10-05 12:34:36Z the "Send" user task of SalesInvoiceApproval instance 2501 is completed (action markAsSent)
process variables snapshotted at that moment: Status=PAID, Paid=4800, Balance=0
2026-10-05 12:34Z SalesInvoiceApprovalMailSent (SetField): updateProperty(16, "Status", 4) -> SENT
2026-10-05 12:35Z the async mailInvoice job fails (SMTP) and dead-letters; the process is stuck before Confirm
2026-10-16 the invoice still reads Status SENT, Paid 4 800.00, Balance 0.00, DisplacedStatus null
The generated listener's own relinquish logic (#7022) would have done the right thing had the roles been reversed: when the sum goes back to zero it restores DisplacedStatus. The process side has no such awareness.
What should happen
A lifecycle setter must not take a status the roll-up holds. When the current Status is one of the entity's roll-up-owned statuses (statusWhenFull / statusWhenPartial of any roll-up on it):
- write the setter's value into
DisplacedStatusinstead ofStatus(the status the document would hold if it were not settled), publish the transition as today; - leave
Statusto the roll-up, which restoresDisplacedStatuswhen the sum returns to zero (#7022) - so "payment deleted" then yields SENT/CONFIRMED, not ISSUED.
The same guard belongs in the declarative transitions: runner and in updateProperty-based transition actions, since any of them can run after the money arrived. For bank-transfer customers "Send/Confirm completed after the payment is in" is the normal order, not an edge case.
Where
components/template/template-application-events-java/.../events/SetField.java.template(the generated<Process><Step>setters)components/ide/ide-template/.../model/RollupAggregates.java(the roll-up side: ownsDisplacedStatus, knows the owned statuses)
Found while investigating BusinessIntents/base-sales-invoices (prod invoice 16); the AP twin is BusinessIntents/base-purchase-invoices.
- Lenguaje dominante
- Java
- Estrellas
- 278
- Forks
- 97
- Merge medio
- 19 h 30 min
- PR fusionados (30 d)
- 242
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de eclipse-dirigible/dirigible
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
eclipse-dirigible/dirigible#7958 ·
Los mantenedores suelen responder en 1 día
-
intent: a create-from without fromStatus answers 200 on a missing or unknown source id (no 400/404)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
eclipse-dirigible/dirigible#7945 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
eclipse-dirigible/dirigible#7891 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
eclipse-dirigible/dirigible#6538 ·
Los mantenedores suelen responder en 1 día
-
Create shortcut for Camel filesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
eclipse-dirigible/dirigible#4812 ·
Los mantenedores suelen responder en 1 día
Todos los issues de eclipse-dirigible/dirigible
Issues similares
-
area: android good first issue help wanted testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Gautam-aman/ResQNet#56 ·
Los mantenedores suelen responder en 1 día
-
documentation hermes-queue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
chrisalunlloyd2-sudo/mindpalace#294 ·
Los mantenedores suelen responder en 1 día
-
better night vision compatAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
QuicksilverMC/Argentum#31 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
saysky/ForestBlog#111 ·
-
hawkbit-dmf-server 1.1.0 does not start: NoClassDefFoundError jakarta/servlet/ServletResponseAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
eclipse-hawkbit/hawkbit#3429 · 1 comentario ·
Los mantenedores suelen responder en 1 día