Skip to content

Case Behavior Trees

Auto-generated reference documentation for case management and case state (CS) behavior trees in vultron/core/behaviors/case/ and vultron/core/behaviors/sync/.

Requirements

The behavioral requirements for these trees are specified in the Architecture Specifications:

  • CM — Case Management: governs case proposal, accept/reject, invite, and participant lifecycle
  • CLP — Case Ledger Processing: governs commit and announce log entry semantics

Note

These behaviors are not directly governed by the protocol-level RMB, EMB, or CSB spec groups. They implement case management and ledger replication semantics defined in the architecture specs.

Accept Case Proposal Tree

Handles acceptance of an incoming case proposal, acted on only when the sender is the actor the proposal was addressed to. Constructed from vultron.core.behaviors.case.accept_case_proposal_received_tree.create_accept_case_proposal_received_tree.

[-] AcceptCaseProposalReceivedBT
    --> IntakeReceivedActivityNode
    --> CaseOpenToExternalWrites
    --> ActivityAddressedToReceiverNode
    --> SenderIsProposalAddresseeNode
    --> RecordCaseActorAcceptanceNode

Reject Case Proposal Tree

Handles rejection of an incoming case proposal, acted on only when the sender is the actor the proposal was addressed to. Constructed from vultron.core.behaviors.case.reject_case_proposal_received_tree.create_reject_case_proposal_received_tree.

[-] RejectCaseProposalReceivedBT
    --> IntakeReceivedActivityNode
    --> CaseOpenToExternalWrites
    --> ActivityAddressedToReceiverNode
    --> SenderIsProposalAddresseeNode
    --> RecordCaseProposalRejectionNode

Accept Invite Tree

Handles acceptance of a case invitation. Constructed from vultron.core.behaviors.case.accept_invite_tree.create_accept_invite_actor_to_case_tree.

[-] AcceptInviteActorToCaseBT
    --> IntakeReceivedActivityNode
    --> CaseOpenToExternalWrites
    --> ActivityAddressedToReceiverNode
    --> SenderClosureNotRecordedNode
    --> SenderIsInviteeNode
    [o] ClockDecisionsIfCaseManager
        [-] SkipIfNotCaseManager
            -^- InvertIsNotCaseManager
                --> CheckIsCaseManagerNode
        [-] ClockDecisions
            -^- ClockDecision[EmbargoEndTimeDecision]
                [o] EmbargoEndTimeDecision
                    -^- EndTimeNotPassed
                        --> EmbargoEndTimePassedNode
                    [-] EndEmbargoOnAFreshLedger
                        --> EndTimeLedgerFresh
                        [o] EndEmbargoAtEndTimeBT
                            --> EmbargoAlreadyEndedNode
                            {-} TerminateEmbargoBT
                                --> HasActiveEmbargoNode
                                --> ReadEmbargoIdNode
                                --> ResolveCaseManagerNode
                                [o] TerminateEmbargoAsCaseManager
                                    [-] SkipIfNotCaseManager
                                        -^- InvertIsNotCaseManager
                                            --> CheckIsCaseManagerNode
                                    [-] TerminateEmbargoAsCaseManagerBody
                                        --> CaptureActiveEmbargoNode
                                        --> CommitAndApplyEmbargoTerminationNode
                                        --> EmitCaseStatusUpdate
                                        --> SendEmbargoEndingNoticesNode
                                        --> ReissueStubInvitesNode
                                [o] TerminateEmbargoAskCaseManager
                                    --> SkipIfCaseManager
                                    [o] AskCaseManagerToTerminateOnce
                                        --> TeardownAskPendingNode
                                        --> SendTerminateEmbargoActivityNode
    --> PreconditionGuardStage
        [-] PreconditionGuards
            --> CheckInviteeNotAlreadyParticipantNode
            --> InviteeHasParticipantRecordNode
            --> StubInviteAnswerableNode
        -^- RefusalEffects
            [o] AcceptInviteActorToCaseBTRefusalIfCaseManager
                [-] SkipIfNotCaseManager
                    -^- InvertIsNotCaseManager
                        --> CheckIsCaseManagerNode
                -^- EmitRefusalNoticeBestEffort
                    --> EmitRefusalNotice
    [-] AcceptInviteActorToCaseBTAct
        [o] GuardedCommitCaseLedgerEntryBT
            [-] SkipIfNotCaseManager
                -^- InvertIsNotCaseManager
                    --> CheckIsCaseManagerNode
            --> CommitCaseLedgerEntryNode
        [o] AcceptInviteIfCaseManager
            [-] SkipIfNotCaseManager
                -^- InvertIsNotCaseManager
                    --> CheckIsCaseManagerNode
            [-] AcceptInviteEffects
                [o] MaybeSignEmbargoConsentNode
                    [-] _TrySignEmbargoConsent
                        --> _CheckEmbargoActiveStateNode
                        --> _SignEmbargoConsentLeafNode
                    --> _AlwaysSucceed
                --> ActivateInviteeParticipantNode
                --> AdvanceInviteeVFToVendorAwareNode
                --> EmitAnnounceCaseToInviteeNode
                --> BackfillCanonicalLedgerToInviteeNode
                --> CommitInviteeAcceptEntriesNode
                --> EmitInviteActorToFullCaseNode
                --> RelayOpenProposalsToJoinerNode

Commit Log Entry Tree

Commits a new entry to the case ledger and fans it out to participants. Constructed from vultron.core.behaviors.sync.commit_tree.create_commit_log_entry_tree.

[-] CommitLogEntryBT
    --> DeclineForeignLedgerCommit
    [-] MintAndFanOutLogEntry
        --> RequireSyncPort
        --> CheckLedgerFreshness
        --> ReconstructChainTail
        --> CreateLogEntry
        --> PersistLogEntry
        [-] FanOutLogEntry
            --> CollectLogEntryRecipients
            --> SendLogEntryToEach

Announce Log Entry Tree

Processes an incoming log entry announcement from the case manager. Constructed from vultron.core.behaviors.sync.announce_tree.create_announce_log_entry_tree.

[-] AnnounceLogEntryReceivedBT
    --> IntakeReceivedActivityNode
    --> CaseOpenToExternalWrites
    --> ActivityAddressedToReceiverNode
    --> SenderIsCaseManagerNode
    [o] AnnounceLogEntryRoles
        [-] CaseActorSubtree
            --> CheckIsCaseManager
            --> LogDeliveryConfirmation
        [-] ParticipantGate
            -^- CheckIsNotCaseManager
                --> CheckIsCaseManagerInverse
            --> CheckEntryHashIntact
            [o] EntryProcessing
                --> CheckLogEntryAlreadyStored
                [-] ProcessAndStore
                    [o] ReconstructOrRejectOnMissingCase
                        --> ReconstructChainTail
                        [-] BufferAndRejectOnMissingCase
                            -^- BufferIfPreGenesis
                                --> BufferPreGenesisEntry
                            --> RejectOnMissingCase
                    [o] CheckHashOrRejectOnMismatch
                        --> CheckHashMatches
                        [-] BufferAndReject
                            -^- BufferIfForwardGap
                                --> BufferOutOfOrderEntry
                            --> SendRejectLogEntry
                    --> CheckEntryAgreesWithCasePosition
                    [o] ApplyEffectsUnlessReflected
                        [-] StoreReflectedEntry
                            --> EntryReflectedByCaseCopy
                            --> StoreRecordsReflectedEntryCarries
                        [-] ApplyUnreflectedEntry
                            -^- EntryNotReflectedByCaseCopy
                                --> CheckEntryReflectedByCaseCopy
                            [-] LogEntryEventEffects
                                [o] EmbargoTeardownEffects
                                    [-] ApplyEmbargoTeardownEffectsSeq
                                        --> IsEmbargoTeardownEvent
                                        --> ApplyEmbargoTeardownFromLedger
                                    -^- SkipIfNotEmbargoTeardownEvent
                                        --> CheckNotEmbargoTeardownEvent
                                [o] EmbargoActivationEffects
                                    [-] ApplyEmbargoActivationEffectsSeq
                                        --> IsEmbargoActivationEvent
                                        --> ApplyEmbargoActivationFromLedger
                                    -^- SkipIfNotEmbargoActivationEvent
                                        --> CheckNotEmbargoActivationEvent
                                [o] EmbargoProposalRejectionEffects
                                    [-] ApplyEmbargoProposalRejectionEffectsSeq
                                        --> IsEmbargoProposalRejectionEvent
                                        --> ApplyEmbargoProposalRejectionFromLedger
                                    -^- SkipIfNotEmbargoProposalRejectionEvent
                                        --> CheckNotEmbargoProposalRejectionEvent
                                [o] CaseStatusEffects
                                    [-] ApplyCaseStatusEffectsSeq
                                        --> IsCaseStatusEvent
                                        --> ApplyCaseStatusFromLedger
                                    -^- SkipIfNotCaseStatusEvent
                                        --> CheckNotCaseStatusEvent
                                [o] ParticipantStatusEffects
                                    [-] ApplyParticipantStatusEffectsSeq
                                        --> IsParticipantStatusEvent
                                        [o] ApplyOrFault
                                            --> ApplyParticipantStatusFromLedger
                                            --> EmitImpossibleStateFault
                                    -^- SkipIfNotParticipantStatusEvent
                                        --> CheckNotParticipantStatusEvent
                                [o] NoteEffects
                                    [-] ApplyNoteEffectsSeq
                                        --> IsNoteEvent
                                        --> ApplyNoteFromLedger
                                    -^- SkipIfNotNoteEvent
                                        --> CheckNotNoteEvent
                                [o] RemoveNoteEffects
                                    [-] ApplyRemoveNoteEffectsSeq
                                        --> IsRemoveNoteEvent
                                        --> ApplyRemoveNoteFromLedger
                                    -^- SkipIfNotRemoveNoteEvent
                                        --> CheckNotRemoveNoteEvent
                                [o] CreateCaseParticipantEffects
                                    [-] ApplyCreateCaseParticipantEffectsSeq
                                        --> IsCreateCaseParticipantEvent
                                        --> ApplyCreateCaseParticipantFromLedger
                                    -^- SkipIfNotCreateCaseParticipantEvent
                                        --> CheckNotCreateCaseParticipantEvent
                                [o] InviteAcceptEffects
                                    [-] ApplyInviteAcceptEffectsSeq
                                        --> IsInviteAcceptEvent
                                        --> ApplyInviteAcceptFromLedger
                                    -^- SkipIfNotInviteAcceptEvent
                                        --> CheckNotInviteAcceptEvent
                                [o] InviteRejectEffects
                                    [-] ApplyInviteRejectEffectsSeq
                                        --> IsInviteRejectEvent
                                        --> ApplyInviteRejectFromLedger
                                    -^- SkipIfNotInviteRejectEvent
                                        --> CheckNotInviteRejectEvent
                                [o] RemoveCaseParticipantEffects
                                    [-] ApplyRemoveCaseParticipantEffectsSeq
                                        --> IsRemoveCaseParticipantEvent
                                        --> ApplyRemoveCaseParticipantFromLedger
                                    -^- SkipIfNotRemoveCaseParticipantEvent
                                        --> CheckNotRemoveCaseParticipantEvent
                                [o] ReinstateCaseParticipantEffects
                                    [-] ApplyReinstateCaseParticipantEffectsSeq
                                        --> IsReinstateCaseParticipantEvent
                                        --> ApplyReinstateCaseParticipantFromLedger
                                    -^- SkipIfNotReinstateCaseParticipantEvent
                                        --> CheckNotReinstateCaseParticipantEvent
                                [o] OfferReportEffects
                                    [-] ApplyOfferReportEffectsSeq
                                        --> IsOfferReportEvent
                                        --> ApplyOfferReportFromLedger
                                    -^- SkipIfNotOfferReportEvent
                                        --> CheckNotOfferReportEvent
                                [o] UpdateCaseParticipantEffects
                                    [-] ApplyUpdateCaseParticipantEffectsSeq
                                        --> IsUpdateCaseParticipantEvent
                                        --> ApplyUpdateCaseParticipantFromLedger
                                    -^- SkipIfNotUpdateCaseParticipantEvent
                                        --> CheckNotUpdateCaseParticipantEvent
                                [o] OwnershipTransferEffects
                                    [-] ApplyOwnershipTransferEffectsSeq
                                        --> IsOwnershipTransferEvent
                                        --> ApplyOwnershipTransferFromLedger
                                    -^- SkipIfNotOwnershipTransferEvent
                                        --> CheckNotOwnershipTransferEvent
                                [o] RoleGrantEffects
                                    [-] ApplyRoleGrantEffectsSeq
                                        --> IsRoleGrantEvent
                                        --> ApplyRoleGrantFromLedger
                                    -^- SkipIfNotRoleGrantEvent
                                        --> CheckNotRoleGrantEvent
                                [o] CreatedEmbargoEffects
                                    [-] ApplyCreatedEmbargoEffectsSeq
                                        --> IsCreatedEmbargoEvent
                                        --> ApplyCreatedEmbargoFromLedger
                                    -^- SkipIfNotCreatedEmbargoEvent
                                        --> CheckNotCreatedEmbargoEvent
                                [o] EmbargoProposalEffects
                                    [-] ApplyEmbargoProposalEffectsSeq
                                        --> IsEmbargoProposalEvent
                                        --> ApplyEmbargoProposalFromLedger
                                    -^- SkipIfNotEmbargoProposalEvent
                                        --> CheckNotEmbargoProposalEvent
                                [o] EmbargoInviteRelayEffects
                                    [-] ApplyEmbargoInviteRelayEffectsSeq
                                        --> IsEmbargoInviteRelayEvent
                                        --> ApplyEmbargoInviteRelayFromLedger
                                    -^- SkipIfNotEmbargoInviteRelayEvent
                                        --> CheckNotEmbargoInviteRelayEvent
                                [o] EmbargoAcceptanceEffects
                                    [-] ApplyEmbargoAcceptanceEffectsSeq
                                        --> IsEmbargoAcceptanceEvent
                                        --> ApplyEmbargoAcceptanceFromLedger
                                    -^- SkipIfNotEmbargoAcceptanceEvent
                                        --> CheckNotEmbargoAcceptanceEvent
                                [o] EmbargoRejectionEffects
                                    [-] ApplyEmbargoRejectionEffectsSeq
                                        --> IsEmbargoRejectionEvent
                                        --> ApplyEmbargoRejectionFromLedger
                                    -^- SkipIfNotEmbargoRejectionEvent
                                        --> CheckNotEmbargoRejectionEvent
                                [o] EmbargoWithdrawalEffects
                                    [-] ApplyEmbargoWithdrawalEffectsSeq
                                        --> IsEmbargoWithdrawalEvent
                                        --> ApplyEmbargoWithdrawalFromLedger
                                    -^- SkipIfNotEmbargoWithdrawalEvent
                                        --> CheckNotEmbargoWithdrawalEvent
                                [o] EmbargoAbandonmentEffects
                                    [-] ApplyEmbargoAbandonmentEffectsSeq
                                        --> IsEmbargoAbandonmentEvent
                                        --> ApplyEmbargoAbandonmentFromLedger
                                    -^- SkipIfNotEmbargoAbandonmentEvent
                                        --> CheckNotEmbargoAbandonmentEvent
                                [o] EmbargoInviteWithdrawalEffects
                                    [-] ApplyEmbargoInviteWithdrawalEffectsSeq
                                        --> IsEmbargoInviteWithdrawalEvent
                                        --> ApplyEmbargoInviteWithdrawalFromLedger
                                    -^- SkipIfNotEmbargoInviteWithdrawalEvent
                                        --> CheckNotEmbargoInviteWithdrawalEvent
                                [o] EmbargoConsentEffects
                                    [-] ApplyEmbargoConsentEffectsSeq
                                        --> IsEmbargoConsentEvent
                                        --> ApplyEmbargoConsentFromLedger
                                    -^- SkipIfNotEmbargoConsentEvent
                                        --> CheckNotEmbargoConsentEvent
                    --> PersistReceivedLogEntry
            --> ReplayHeldSuccessor