spec: an entity's immutability covers the collections composed into it - #19
Open
delchev wants to merge 1 commit into
Open
spec: an entity's immutability covers the collections composed into it#19delchev wants to merge 1 commit into
delchev wants to merge 1 commit into
Conversation
1.2 already said a composition child "keeps freezing with its master" by default, but only ever spelled out what that means for the child declared `locksWithMaster: false` - where it is normative that the affordances must stay alive, not merely the writes. The default was left to be read as the affordances alone, and one implementation read it exactly that way: the child's own endpoint went on accepting creates, edits and deletes against a locked master. That is not a cosmetic gap. A child write maintains the master's derived values - a line resums the document's totals - so it reaches precisely what the lock protects, after the number was stamped, the frozen copy taken and the ledger entry posted from those totals. The lock is undone through a different door, and the document's own page then shows a total that disagrees with the copy it printed. Says it in both directions instead: the default freezes the child's writes AND its affordances, the opt-out reopens both, and system / workflow writes stay possible throughout - they are what corrects an immutable record. Co-Authored-By: Claude Opus 5 <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.
1.2 already made the default normative — "
locksWithMasterdefaults to true, so a child that says nothing keeps freezing with its master" — but it only ever spelled out what freezing means for the child declaredlocksWithMaster: false, where it is normative that the affordances must stay alive and not merely the writes. The default was left to be read as the affordances alone.One implementation read it exactly that way: the child's own endpoint went on accepting creates, edits and deletes against a locked master, while its UI withheld them.
That is not a cosmetic gap. A child write maintains the master's derived values — a line resums the document's totals — so it reaches precisely what the lock protects, after the number was stamped, the frozen copy taken and the ledger entry posted from those totals. The lock is undone through a different door, and the document's own page then shows a total that disagrees with the copy it printed.
This says it in both directions instead: the default freezes the child's writes AND its affordances, the opt-out reopens both, and system / workflow writes stay possible throughout — they are what corrects an immutable record. No new keyword; the
immutableWhensection gains the normative paragraph and a cross-reference, and thelocksWithMastersection's opening no longer claims a locking master "says nothing" about its children.Implementation that motivated it: eclipse-dirigible/dirigible#6739.
🤖 Generated with Claude Code