Documentation
¶
Overview ¶
Package invocation defines metadata that must cross every external effect boundary.
Index ¶
Constants ¶
const ( HeaderExecutionID = "X-Effectus-Execution-ID" HeaderSagaID = "X-Effectus-Saga-ID" HeaderEffectID = "X-Effectus-Effect-ID" HeaderAttempt = "X-Effectus-Attempt" HeaderDirection = "X-Effectus-Direction" HeaderArgumentHash = "X-Effectus-Argument-Hash" HeaderContractHash = "X-Effectus-Contract-Hash" HeaderFencingGrants = "X-Effectus-Fencing-Grants" HeaderDeadline = "X-Effectus-Deadline" HeaderOutcome = "X-Effectus-Outcome" HeaderIdempotencyKey = "Idempotency-Key" )
Variables ¶
This section is empty.
Functions ¶
func ValidateOutcome ¶
ValidateOutcome rejects incomplete or contradictory classifications.
Types ¶
type Context ¶
type Context struct {
RequestID string `json:"request_id"`
ExecutionID string `json:"execution_id"`
Saga Saga `json:"saga"`
FencingGrants []FencingGrant `json:"fencing_grants,omitempty"`
Deadline time.Time `json:"deadline"`
}
Context contains transport-neutral invocation metadata.
type Direction ¶
type Direction string
Direction distinguishes a forward mutation from its compensation.
type FencingGrant ¶
type FencingGrant struct {
Authority string `json:"authority"`
Resource string `json:"resource"`
Token uint64 `json:"token"`
}
FencingGrant is immutable system metadata. Adapters must not source these values from caller arguments or caller headers.
type FencingStatus ¶
type FencingStatus string
FencingStatus describes observation without claiming destination enforcement.
const ( FencingNotRequested FencingStatus = "not_requested" FencingLocalLockOnly FencingStatus = "local_lock_only" FencingPropagated FencingStatus = "propagated" FencingAcknowledged FencingStatus = "acknowledged" FencingStaleRejected FencingStatus = "stale_rejected" )
type HTTPExecutor ¶
type HTTPExecutor struct {
URL string
Method string
Headers map[string]string
Client *http.Client
MaxResponseBytes int64
}
HTTPExecutor sends one invocation without an internal retry loop.
func NewHTTPExecutor ¶
func NewHTTPExecutor(executor HTTPExecutor) (*HTTPExecutor, error)
type Outcome ¶
type Outcome struct {
Class OutcomeClass
Result any
Err error
}
Outcome is the executor's explicit result classification.
type OutcomeClass ¶
type OutcomeClass string
OutcomeClass states whether the destination can know that a mutation committed.
const ( OutcomeSuccess OutcomeClass = "success" OutcomeRetryableKnownNotCommitted OutcomeClass = "retryable_failure_known_not_committed" OutcomePermanentFailure OutcomeClass = "permanent_failure" OutcomeUnknown OutcomeClass = "unknown_outcome" OutcomeStaleFence OutcomeClass = "stale_fence" )
type Request ¶
type Request struct {
Metadata Context `json:"metadata"`
Verb string `json:"verb"`
Arguments map[string]any `json:"arguments"`
ArgumentHash string `json:"argument_hash"`
ContractHash string `json:"contract_hash"`
}
Request is the immutable call delivered to an invocation-aware executor.
type ResolverDescriptorProvider ¶
type ResolverDescriptorProvider interface {
InvocationResolverDescriptor() any
}
ResolverDescriptorProvider returns immutable, JSON-serializable resolver input covered by a generation digest.