Summary
#7164 taught StatusSymbolResolver to resolve a seeded status NAME in a create-from's items: where: (rewriteGeneratesItemsWhere). The construct it was modelled on - schedules[].where, "the same { field, op, value } triples" per the PR and the docs - still has no rewrite: git show origin/master:.../parser/StatusSymbolResolver.java | grep -i schedule finds nothing, and the parser does not refuse a non-numeric value against a function: EntityStatus relation there either.
So
schedules:
- name: dunning
cron: "0 0 8 * * ?"
source: SalesInvoice
where:
- { field: Status, op: eq, value: OVERDUE }
parses, generates .eq("Status", "OVERDUE") into the job and matches nothing forever - the exact silent failure #6645 removed for every other status site ("every site that names a status additionally accepts the seeded name"), and the one place a positional id is most tempting to replace with a name, because a schedule filter is where the status guard is written most often (dunning, staleness sweeps, month-end runs).
Fix
Add a rewriteSchedulesWhere beside rewriteGeneratesItemsWhere that resolves the value on the source's status relation (same-model only; a cross-model source keeps id-only and says so, like the header-level rule), and make the parser refuse a non-numeric literal on a status field that the resolver could not map. Document the symbol in the schedules[].where bullet of the engine-intent guide. A StatusSymbolResolverTest case plus one rendered-.glue check pins it.
Found reviewing #7164.
Summary
#7164 taught
StatusSymbolResolverto resolve a seeded status NAME in a create-from'sitems: where:(rewriteGeneratesItemsWhere). The construct it was modelled on -schedules[].where, "the same{ field, op, value }triples" per the PR and the docs - still has no rewrite:git show origin/master:.../parser/StatusSymbolResolver.java | grep -i schedulefinds nothing, and the parser does not refuse a non-numeric value against afunction: EntityStatusrelation there either.So
parses, generates
.eq("Status", "OVERDUE")into the job and matches nothing forever - the exact silent failure #6645 removed for every other status site ("every site that names a status additionally accepts the seeded name"), and the one place a positional id is most tempting to replace with a name, because a schedule filter is where the status guard is written most often (dunning, staleness sweeps, month-end runs).Fix
Add a
rewriteSchedulesWherebesiderewriteGeneratesItemsWherethat resolves the value on the source's status relation (same-model only; a cross-model source keeps id-only and says so, like the header-level rule), and make the parser refuse a non-numeric literal on a status field that the resolver could not map. Document the symbol in theschedules[].wherebullet of the engine-intent guide. AStatusSymbolResolverTestcase plus one rendered-.gluecheck pins it.Found reviewing #7164.