Repository navigation
2.14.0 – Oct 4, 2026
2.14.0 (2026-10-04)
Features
modeling: cascade legality rules across known descendants (#452) (
2ccb773)Declare a shared business rule once on a Model and apply it to that Model and its locally known descendants. For example, a closed Project can prevent further changes to its Tasks and their children:
@AssertLegal(cascade = true) void assertOpen() { if (closed) { throw new IllegalCommandException("This project is closed."); } }Normal payload and context injection remains available. Use
allowedClassesto select payload families,@Parent(validateAncestors = false)to stop one inheritance route, or@Apply(ancestorValidation = AncestorValidation.DISABLED)to permit a particular child mutation.The SDK checks all enabled known parent routes, including both sides of a move and automatically deleted children. Ancestor reads participate in atomic conflict validation: RETRY reevaluates and guarded ACCEPT attempts use FAIL to prevent stale permission. Replay does not execute these assertions.
This feature is opt-in and SDK-side; writers need the relevant Model classes and rules. It adds no new Runtime protocol requirement. The developer guide and Java/Kotlin agent guides explain timing, exceptions, concurrency and performance.
modeling: guard known descendants with cascading assertions (
9c19cc7)Allow Model-owned legality rules to guard known parent routes with explicit relationship and Apply exceptions. Protect validation reads across compound changes, automatic deletions and concurrent reparenting; reject guarded ACCEPT conflicts instead of retaining stale permission.