Skip to content

A button create-from takes sourceStatusOnRetire too - #7678

Merged
delchev merged 1 commit into
eclipse-dirigible:masterfrom
nedelcho-delchev-tues:issue-7647-source-status-on-retire-button
Oct 5, 2026
Merged

delchev merged 1 commit into
eclipse-dirigible:masterfrom
nedelcho-delchev-tues:issue-7647-source-status-on-retire-button

Conversation

@nedelcho-delchev-tues

Copy link
Copy Markdown
Contributor

Fixes #7647

sourceStatusOnRetire: was refused on a create-from with no event:. The reasoning was that a button carries no at-most-once guard, so nothing blocks a replacement and the button already reissues — an authored key that would generate nothing.

That holds only without a completion hook. With sourceStatus: declared, the hook flips the source off the status the button is offered from, and the implied fromStatus deny of exactly that status (#7068) answers the second click with a 409. The proforma stays INVOICED, immutableWhen locks it, and nothing in the model can move it back. The hook blocks the button exactly as the guard blocks the trigger, and the declared inverse is the same move back in both shapes.

What changed

  • The parser refusal is deleted. A reopen with no sourceStatus is still refused, there being nothing to invert, and so is every other combination that could never fire (the same status twice, mode: append, a cross-model target, a target with no lifecycle, an unclassified nomenclature).
  • putSupersededTarget no longer returns early for a button shape. It emits the reopen half and leaves hasRetiredStatus false: the stage-aware step-over belongs to an at-most-once guard this shape does not have, so there is nothing for it to step over.
  • Its unclassified-nomenclature warning now names which of the two is at stake, since the sentence about a guard reads as noise on a shape that has none.

Covered by GeneratesIntentTest.acceptsAReopenOnAButtonCreateFromWithACompletionHook (and its sibling, which pins the refusal that stays) and GlueGeneratesTest.aButtonCreateFromEmitsTheReopenWithoutTheStageAwareGuard. The engine-intent suite is green: 1481 tests.

The reopen was refused on a create-from with no `event:`, on the reasoning
that a button carries no at-most-once guard, so nothing blocks a replacement
and the button already reissues. That holds only without a completion hook.
With `sourceStatus:` declared, the hook flips the source off the status the
button is offered from, and the implied `fromStatus` deny of exactly that
status (eclipse-dirigible#7068) answers the second click with a 409 - so the proforma stays
INVOICED, `immutableWhen` locks it, and nothing in the model can move it back.
The hook blocks the button exactly as the at-most-once guard blocks the
trigger, and the declared inverse is the same move back in both shapes.

The parser refusal is gone. `putSupersededTarget` no longer returns early for
a button shape that declares the reopen: it emits the reopen half and leaves
`hasRetiredStatus` false, the stage-aware step-over belonging to a guard this
shape does not have. Its unclassified-nomenclature warning now says which of
the two is at stake.

What stays refused is a reopen with no `sourceStatus` at all - there is
nothing to invert - and every other combination that could never fire.

Fixes eclipse-dirigible#7647

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@delchev
delchev merged commit 21e7d49 into eclipse-dirigible:master Oct 5, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

intent: sourceStatusOnRetire is refused on a button create-from - a cancelled target leaves the source stuck in sourceStatus

2 participants