You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#6814 / #6850 made the event-driven create-from's at-most-once guard state-aware: a target retired to a cancelled/void stage is stepped over, so "void and reissue" became expressible - the next qualifying event (or a click) mints the replacement.
With sourceStatus: the "next qualifying event" cannot exist. The first generation's completion hook flips the source to its post-generation status (Generate.java.template:150-165, updateProperty(sourceId, "<statusProperty>", <value>)) - deliberately, so the guard-claimed source stops matching. But the trigger is event: { onTransition: <Source>, when: "Status == <pre-generation status>" }, and the flipped source will not transition through that status again (the usual lifecycle graph declares no edge back). So after voiding the target:
the guard correctly steps over the retired document - the slot is FREE;
nothing ever fires into it - the source sits at the post-generation status and re-emits no qualifying -transitioned;
For the sourceStatus: combination #6850 half-delivers: the door is unlocked and nobody can knock.
Directions worth weighing:
the target's retiring transition re-delivers the source's qualifying event (the void is the business moment that reopens the slot - but it crosses from the target's lifecycle into the source's topic);
a declared reopen: voiding the target flips the source BACK (the completion hook's inverse), so the ordinary re-transition path re-fires - explicit in the model, uses only existing vocabulary;
or document that sourceStatus: + event-only requires button: true for reissue, and have the parser warn on the silent combination (event-only + sourceStatus + a classified nomenclature), the same posture fix(intent): a voided target no longer blocks its replacement (#6814) #6850 took for the unclassified one.
Follow-up to #6850; composes with #6859's guard-ownership rule (one rule owns the slot either way).
#6814 / #6850 made the event-driven create-from's at-most-once guard state-aware: a target retired to a
cancelled/voidstage is stepped over, so "void and reissue" became expressible - the next qualifying event (or a click) mints the replacement.With
sourceStatus:the "next qualifying event" cannot exist. The first generation's completion hook flips the source to its post-generation status (Generate.java.template:150-165,updateProperty(sourceId, "<statusProperty>", <value>)) - deliberately, so the guard-claimed source stops matching. But the trigger isevent: { onTransition: <Source>, when: "Status == <pre-generation status>" }, and the flipped source will not transition through that status again (the usual lifecycle graph declares no edge back). So after voiding the target:-transitioned;button: truecan reissue. An event-only rule (button: false, the shape intent: event-driven generates - create a document from a source document on an entity event, not only a button #6711 introduced the axis for) has NO reissue path at all.For the
sourceStatus:combination #6850 half-delivers: the door is unlocked and nobody can knock.Directions worth weighing:
sourceStatus:+ event-only requiresbutton: truefor reissue, and have the parser warn on the silent combination (event-only + sourceStatus + a classified nomenclature), the same posture fix(intent): a voided target no longer blocks its replacement (#6814) #6850 took for the unclassified one.Follow-up to #6850; composes with #6859's guard-ownership rule (one rule owns the slot either way).