Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7647
sourceStatusOnRetire:was refused on a create-from with noevent:. 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 impliedfromStatusdeny of exactly that status (#7068) answers the second click with a 409. The proforma stays INVOICED,immutableWhenlocks 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
sourceStatusis 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).putSupersededTargetno longer returns early for a button shape. It emits the reopen half and leaveshasRetiredStatusfalse: 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.Covered by
GeneratesIntentTest.acceptsAReopenOnAButtonCreateFromWithACompletionHook(and its sibling, which pins the refusal that stays) andGlueGeneratesTest.aButtonCreateFromEmitsTheReopenWithoutTheStageAwareGuard. The engine-intent suite is green: 1481 tests.