Skip to content

proposal: a retired target stops blocking its source - #46

Open
delchev wants to merge 1 commit into
mainfrom
spec/supersede-retired-target
Open

proposal: a retired target stops blocking its source#46
delchev wants to merge 1 commit into
mainfrom
spec/supersede-retired-target

Conversation

@delchev

@delchev delchev commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Proposal 0024-supersede-a-retired-target.md.

An event-driven create-from is at-most-once, and the guard asks a question about existence — "is there a target for this source?" A voided document answers yes forever: it keeps existing and keeps back-referencing its source, so the source's one shot is spent at the first creation and nothing that later happens to the target gives it back. "Void and reissue" — a document retired while keeping its number, a fresh one raised — is inexpressible, and the failure is silent.

The proposal adds nothing to the create-from. Which statuses retire a document is already declared where the nomenclature is seeded — the stage: classification a report's scope: resolves through — and the guard reads it: a target classified cancelled or void no longer satisfies the guard; draft and live still do, so redelivery idempotence is unchanged. The retired row is kept, never edited or re-pointed.

A second key on the rule (supersedeWhen:) was the obvious alternative and is rejected in the text: two vocabularies for "this row no longer counts" could only drift. An append cardinality is also not the answer — it removes the guard entirely, so it would mint a document on every later qualifying event.

Edge rules cover the unclassified nomenclature (existence-only plus a warning — the case where the guard reads as state-aware and is not), a target with no lifecycle, a cross-model target whose seeds live in its owner model, and why draft does not retire.

Implementation proving it out: eclipse-dirigible/dirigible#6850 (issue eclipse-dirigible/dirigible#6814).

An event-driven create-from's at-most-once guard asks existence only, so a
voided target satisfies it forever and "void and reissue" is inexpressible.
Proposes reading the target's `stage:` classification - the one a report's
`scope:` already resolves through - rather than adding a second vocabulary for
"this row no longer counts".
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.

1 participant