Versions in this module Expand all Collapse all v0 v0.4.1 Aug 30, 2026 v0.4.0 Aug 28, 2026 Changes in this version + var ErrActionPerformanceOccurrence = errors.New("action performance occurrence unavailable") + var ErrNoSuchFeature = errors.New("object has no such feature") + var ErrPerformerFeatureNotInScope = errors.New("name is not in scope of the behavior body") + var ErrStatePerformanceOccurrence = errors.New("state performance occurrence unavailable") + var ErrThisNotAnObject = errors.New("this names no object here") type TraceRecorder + func (tr *TraceRecorder) RecordActionNodeEnter(node string) + func (tr *TraceRecorder) RecordActionNodeExit(node string) v0.3.1 Aug 28, 2026 Changes in this version + func FormatReal(f float64) string v0.3.0 Aug 27, 2026 v0.2.1 Aug 25, 2026 v0.2.0 Aug 24, 2026 Changes in this version + var ErrActionDeadlock = errors.New("action deadlock") + var ErrActionStepLimitExceeded = errors.New("action step limit exceeded") + var ErrDoStepLimitExceeded = errors.New("state do-step limit exceeded") + var ErrInvalidActionFlow = errors.New("invalid action flow") + var ErrNoEnabledSuccession = errors.New("no enabled succession") + var ErrSendPortTypeMismatch = errors.New("send message type is not carried by the receiving port") + var ErrSendViaUnknownPort = errors.New("send via names no port of the sender") + var ErrStateEventLimitExceeded = errors.New("state event limit exceeded") + var ErrUndeterminedValueType = errors.New("value type cannot be determined") + var ErrUnreachableSendReceiver = errors.New("send receiver is unreachable") + var ErrUnresolvedType = errors.New("unresolved type") + var ErrUnsupportedBodyDeclaration = errors.New("unsupported declaration in a body expression") type DeliveryKind + const DeliverPortReceiver + type SendPortTypeMismatchError struct + Port string + Receiver string + SignalType string + func (e *SendPortTypeMismatchError) Error() string + func (e *SendPortTypeMismatchError) Unwrap() error + type UnknownSendPortError struct + Port string + Receiver string + func (e *UnknownSendPortError) Error() string + func (e *UnknownSendPortError) Unwrap() error + type UnreachableSendReceiverError struct + Port string + Receiver string + func (e *UnreachableSendReceiverError) Error() string + func (e *UnreachableSendReceiverError) Unwrap() error v0.1.2 Aug 20, 2026 v0.1.1 Aug 19, 2026 v0.1.0 Aug 18, 2026 Changes in this version + const DefaultMaxActionSteps + const DefaultMaxCalcDepth + const DefaultMaxDoSteps + const DefaultMaxElements + const DefaultMaxStateEvents + const DefaultMaxSteps + const MaxActionStepsEnvVar + const MaxCalcDepthCeiling + const MaxCalcDepthEnvVar + const MaxDoStepsEnvVar + const MaxElementsEnvVar + const MaxStateEventsEnvVar + const MaxStepsEnvVar + const UnsetText + var ErrAcceptDeadlock = errors.New("accept deadlock") + var ErrAmbiguousResult = errors.New("calculation has no single result") + var ErrAmbiguousSubject = errors.New("ambiguous subject") + var ErrAmbiguousSuccession = errors.New("more than one succession is enabled") + var ErrBehaviorBudget = errors.New("object behaviors exceeded their budget") + var ErrBindingConflict = errors.New("binding conflict") + var ErrBindingCycle = errors.New("binding cycle") + var ErrBindingEnd = errors.New("binding end cannot be resolved") + var ErrBodyArity = errors.New("body parameter count mismatch") + var ErrCalcArity = errors.New("calc argument count mismatch") + var ErrCalcExternalAssignment = errors.New("assignment outside the calculation body") + var ErrCalcNoReturn = errors.New("calculation returned no value") + var ErrCalcRecursionLimit = errors.New("calc recursion limit exceeded") + var ErrCalcSideEffect = errors.New("side effect in a calculation body") + var ErrConflictingOutput = errors.New("output bound more than once") + var ErrConflictingRedefinition = errors.New("one feature valued under two names") + var ErrConnectorEnd = errors.New("connector end cannot be attached") + var ErrCyclicFeatureValue = errors.New("cyclic feature value dependency") + var ErrCyclicOutput = errors.New("cyclic output dependency") + var ErrDivisionByZero = errors.New("division by zero") + var ErrElementLimitExceeded = errors.New("collection element limit exceeded") + var ErrFeatureValueMaterialization = errors.New("feature value could not be materialized") + var ErrIncommensurableUnits = errors.New("incommensurable units") + var ErrIndexOutOfRange = errors.New("index out of range") + var ErrMultipleVariants = errors.New("more than one variant selected") + var ErrMultiplicityViolation = errors.New("multiplicity violation") + var ErrNoClock = errors.New("no clock to wait on") + var ErrNoConditions = errors.New("no condition to evaluate") + var ErrNoRequirement = errors.New("no requirement to satisfy") + var ErrNoResultExpression = errors.New("no result expression") + var ErrNoSubject = errors.New("no subject to satisfy the requirement") + var ErrNoSuchBehavior = errors.New("object has no such behavior") + var ErrNoValue = errors.New("no value") + var ErrNotABehavior = errors.New("not a behavior") + var ErrNotACalc = errors.New("not a calc") + var ErrNotACalcUsage = errors.New("not a calc usage") + var ErrNotAConstraint = errors.New("not a constraint") + var ErrNotALiteral = errors.New("not a literal of the enumeration") + var ErrNotAQuantity = errors.New("not a quantity expression") + var ErrNotARequirement = errors.New("not a requirement") + var ErrNotASatisfaction = errors.New("not a satisfaction assertion") + var ErrNotAVariant = errors.New("not a variant of the variation") + var ErrNotAnAnalysis = errors.New("not an analysis case") + var ErrOutputNotAssigned = fmt.Errorf("%w: output never assigned", ErrNoValue) + var ErrReceiverWithNamedArgs = errors.New("receiver combined with named arguments") + var ErrReturnOutsideCalc = errors.New("'return' outside a calculation body") + var ErrStepLimitExceeded = errors.New("evaluation step limit exceeded") + var ErrTypeMismatch = errors.New("type mismatch") + var ErrUnboundParameter = errors.New("unbound parameter") + var ErrUnevaluableLibraryFunction = errors.New("library function is not evaluable") + var ErrUnimportedExtensionFunction = errors.New("function is not in scope") + var ErrUninitializedFeatureValue = errors.New("uninitialized feature value") + var ErrUnknownOutput = errors.New("unknown output") + var ErrUnknownParameter = errors.New("unknown parameter") + var ErrUnresolvedClassifierBehavior = errors.New("classifier behavior names no body") + var ErrUnresolvedReference = errors.New("unresolved reference") + var ErrUnroutableSend = errors.New("send reaches no receiving port") + var ErrUnsupportedClassifierBehavior = errors.New("unsupported classifier behavior") + var ErrUnsupportedOperator = errors.New("unsupported operator") + var ErrValuedFeatureRestated = errors.New("feature both valued and restated in a body") + var ErrVariationUnselected = errors.New("variation has no variant selected") + var ErrViolated = errors.New("evaluated to false") + func ActionNodeName(node ast.Node) string + func ActionNodeNames(node ast.Node) []string + func FormatConst(c semantics.Value) string + func FormatTraceValue(v Value) string + func FormatValue(v Value) string + func NegatedDecl(sym *symbols.Symbol) bool + func RequireAnalysis(sym *symbols.Symbol) error + func RequireConstraint(sym *symbols.Symbol) error + func RequireRequirement(sym *symbols.Symbol) error + func TraceLabel(node ast.Node) string + type AcceptWait struct + ParamName string + SignalType string + Since int + Trigger string + ViaPort string + func (w AcceptWait) String() string + type ActionExecutor struct + func (e *ActionExecutor) ActionSymbol() *symbols.Symbol + func (e *ActionExecutor) ClearBreakpoints() + func (e *ActionExecutor) Data() map[string]Value + func (e *ActionExecutor) HasPendingSignal() bool + func (e *ActionExecutor) NodeNames() []string + func (e *ActionExecutor) PausedAt() string + func (e *ActionExecutor) Results() map[string]Value + func (e *ActionExecutor) RunToCompletion() error + func (e *ActionExecutor) RunToQuiescence() error + func (e *ActionExecutor) SetBreakpoint(nodeName string) + func (e *ActionExecutor) SetInputs(inputs map[string]Value) + func (e *ActionExecutor) SetTrace(trace *TraceRecorder) + func (e *ActionExecutor) State() ExecutionState + func (e *ActionExecutor) Step() error + func (e *ActionExecutor) Tokens() []Token + type AdoptError struct + Reason string + Type string + func (e *AdoptError) Error() string + type BindingConflictError struct + Left string + LeftValue Value + Right string + RightValue Value + Target string + func (e *BindingConflictError) Error() string + func (e *BindingConflictError) Unwrap() error + type BindingCycleError struct + Features []string + func (e *BindingCycleError) Error() string + func (e *BindingCycleError) Unwrap() error + type Budgets struct + MaxActionSteps int64 + MaxCalcDepth int64 + MaxDoSteps int64 + MaxElements int64 + MaxStateEvents int64 + MaxSteps int64 + func BudgetsFromEnv() (Budgets, error) + func DefaultBudgets() Budgets + func (b Budgets) Validate() error + type Builtin struct + Collection bool + FQN string + Name string + Params []string + RequiresImport string + func Builtins() []Builtin + type CalcFrameError struct + Calc string + Err error + Frames int + func (e *CalcFrameError) Error() string + func (e *CalcFrameError) Unwrap() error + type CalcOutputValue struct + Name string + Value Value + type Call struct + Args map[string]Value + Operation string + type CheckResult struct + Holds bool + Subject *Instance + SubjectPath string + SubjectRoot *Instance + type Condition struct + Expr ast.Node + Group []Condition + Negated bool + Required bool + Scope *symbols.Scope + func (c Condition) Label() string + func (c Condition) Owner() *symbols.Symbol + type ConnectorEnd struct + Name string + Value Value + type ConnectorEndError struct + Connector string + End string + Err error + Location string + func (e *ConnectorEndError) Error() string + func (e *ConnectorEndError) Is(target error) bool + func (e *ConnectorEndError) Unwrap() error + type Context struct + func NewContext(model *semantics.Model, resolver *resolve.Resolver, maxSteps int64) *Context + func (ctx *Context) Adopt(prev *Context, shapes *Shapes, obj *Instance) ([]string, error) + func (ctx *Context) AdoptIdentities(prev *Context) + func (ctx *Context) Budgets() Budgets + func (ctx *Context) CalcUsageOutput(sym *symbols.Symbol, name string, scope *symbols.Scope, self *Instance) (Value, error) + func (ctx *Context) CalcUsageOutputs(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) ([]CalcOutputValue, error) + func (ctx *Context) CaseConditionsOf(sym *symbols.Symbol, scope *symbols.Scope) []Condition + func (ctx *Context) Changed(shapes *Shapes) (string, bool) + func (ctx *Context) CheckConstraintOn(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) (CheckResult, error) + func (ctx *Context) CheckRequirementOn(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) (CheckResult, error) + func (ctx *Context) CheckSatisfactionOn(a *SatisfyAssertion, subject *Instance) (CheckResult, error) + func (ctx *Context) CompositeTypeOf(feat *EffectiveFeature) *symbols.Symbol + func (ctx *Context) ConditionsOf(sym *symbols.Symbol, scope *symbols.Scope) []Condition + func (ctx *Context) CreateActionExecutor(action *symbols.Symbol) (*ActionExecutor, error) + func (ctx *Context) CreateActionExecutorFor(action *symbols.Symbol, self *Instance) (*ActionExecutor, error) + func (ctx *Context) CreateStateExecutor(stateMachine *symbols.Symbol) (*StateExecutor, error) + func (ctx *Context) CreateStateExecutorFor(stateMachine *symbols.Symbol, self *Instance) (*StateExecutor, error) + func (ctx *Context) EnumerationLiteralValue(sym *symbols.Symbol) (Value, bool, error) + func (ctx *Context) Eval(node ast.Node) (Value, error) + func (ctx *Context) EvalWithScope(node ast.Node, scope *symbols.Scope) (Value, error) + func (ctx *Context) EvalWithScopeOn(node ast.Node, scope *symbols.Scope, self *Instance) (Value, error) + func (ctx *Context) EvaluateConstraint(sym *symbols.Symbol, scope *symbols.Scope) (bool, error) + func (ctx *Context) EvaluateConstraintOn(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) (bool, error) + func (ctx *Context) EvaluateRequirement(sym *symbols.Symbol, scope *symbols.Scope) (bool, error) + func (ctx *Context) EvaluateRequirementOn(sym *symbols.Symbol, scope *symbols.Scope, self *Instance) (bool, error) + func (ctx *Context) EvaluateSatisfaction(a *SatisfyAssertion) (bool, error) + func (ctx *Context) EvaluateSatisfactionOn(a *SatisfyAssertion, subject *Instance) (bool, error) + func (ctx *Context) ExecuteAction(action *symbols.Symbol) (map[string]Value, error) + func (ctx *Context) ExecuteActionPerformedBy(action *symbols.Symbol, self *Instance, inputs map[string]Value) (map[string]Value, error) + func (ctx *Context) ExecuteActionWithInputs(action *symbols.Symbol, inputs map[string]Value) (map[string]Value, error) + func (ctx *Context) ExecuteState(stateMachine *symbols.Symbol) (map[string]Value, error) + func (ctx *Context) ExecuteStatePerformedBy(stateMachine *symbols.Symbol, self *Instance, events []string) (map[string]Value, []string, error) + func (ctx *Context) ExecuteStateWithEvents(stateMachine *symbols.Symbol, events []string) (map[string]Value, []string, error) + func (ctx *Context) FeaturesOf(typeSym *symbols.Symbol) []EffectiveFeature + func (ctx *Context) HoldsNoValue(val Value) bool + func (ctx *Context) Instance(id int64) (*Instance, bool) + func (ctx *Context) Instantiate(sym *symbols.Symbol) (*Instance, error) + func (ctx *Context) InvokeCalc(sym *symbols.Symbol, args []Value, scope *symbols.Scope) (Value, error) + func (ctx *Context) InvokeCalcNamed(sym *symbols.Symbol, args map[string]Value, scope *symbols.Scope) (Value, error) + func (ctx *Context) InvokeOperation(inst *Instance, name string, args map[string]Value) (map[string]Value, error) + func (ctx *Context) IsVariationFeature(feat *EffectiveFeature) bool + func (ctx *Context) MaterializationErrors(inst *Instance) (errs []error, bounded bool) + func (ctx *Context) Model() *semantics.Model + func (ctx *Context) ObjectivesOf(sym *symbols.Symbol, scope *symbols.Scope) []Objective + func (ctx *Context) PendingMessages() []Message + func (ctx *Context) PostMessage(msg Message) + func (ctx *Context) RegisterSource(sf *source.SourceFile) + func (ctx *Context) Resolver() *resolve.Resolver + func (ctx *Context) SatisfyAssertionOf(sym *symbols.Symbol) (*SatisfyAssertion, error) + func (ctx *Context) SatisfyAssertionsIn(scope *symbols.Scope) []*SatisfyAssertion + func (ctx *Context) SatisfySubject(a *SatisfyAssertion) (*Instance, error) + func (ctx *Context) SetBudgets(b Budgets) error + func (ctx *Context) SetTrace(tr *TraceRecorder) + func (ctx *Context) ShapeDigest(sym *symbols.Symbol) string + func (ctx *Context) ShapesOf(obj *Instance) *Shapes + func (ctx *Context) ShapesOfType(sym *symbols.Symbol) *Shapes + func (ctx *Context) SourceLocation(file string, span source.Span) string + func (ctx *Context) TakeMessage(match func(Message) bool) (Message, bool) + type DeliveryKind uint8 + const DeliverAnyone + const DeliverObject + const DeliverPort + const DeliverReceiver + type EffectiveFeature struct + DefaultDecl *symbols.Symbol + DefaultValue ast.Node + Multiplicity semantics.Range + Name string + OwnerType *symbols.Symbol + Symbol *symbols.Symbol + Type *symbols.Symbol + func (f *EffectiveFeature) DeclScope() *symbols.Scope + func (f *EffectiveFeature) DefaultScope() *symbols.Scope + type EvalContext struct + func NewEvalContext(ctx *Context, scope *symbols.Scope) *EvalContext + func NewEvalContextIn(ctx *Context, scope *symbols.Scope, self *Instance) *EvalContext + func (ec *EvalContext) Eval(node ast.Node) (Value, error) + func (ec *EvalContext) Lookup(name string) (Value, bool) + func (ec *EvalContext) Pop() + func (ec *EvalContext) Push(bindings map[string]Value) + type EvalError struct + Err error + Msg string + func (e *EvalError) Error() string + func (e *EvalError) Unwrap() error + type Event struct + ID int64 + Payload interface{} + Timestamp float64 + Type EventType + func (e Event) String() string + type EventQueue struct + func NewEventQueue() *EventQueue + func (q *EventQueue) Len() int + func (q *EventQueue) Peek() Event + func (q *EventQueue) Pop() Event + func (q *EventQueue) Push(e Event) + func (q *EventQueue) Withdraw(drop func(Event) bool) + type EventType int + const EventAccept + const EventCall + const EventChange + const EventTime + func (t EventType) String() string + type ExecutionState int + const StateCompleted + const StateReady + const StateRunning + const StateSuspended + const StateWaiting + func (s ExecutionState) String() string + type FeatureValue struct + BindingDerived bool + Feature *EffectiveFeature + Materialized bool + Value Value + Values Value + Written bool + func (s *FeatureValue) HeldValue() Value + type FeatureValueError struct + Err error + func (e *FeatureValueError) Error() string + func (e *FeatureValueError) Unwrap() []error + type Instance struct + Ends []ConnectorEnd + FeatureValues map[string]*FeatureValue + ID int64 + Type *symbols.Symbol + func (inst *Instance) Behavior(name string) (*ObjectBehavior, bool) + func (inst *Instance) Behaviors() []*ObjectBehavior + func (inst *Instance) ExhibitedState() (*ObjectBehavior, bool) + func (inst *Instance) GetFeatureValue(ctx *Context, name string) (*FeatureValue, error) + func (inst *Instance) OwnedConnectors(ctx *Context) ([]*Instance, error) + func (inst *Instance) Owner() (*Instance, string) + func (inst *Instance) SetFeatureValue(ctx *Context, name string, value Value) error + type Message struct + Delivery DeliveryKind + Object int64 + Payload map[string]Value + Port string + SignalType string + Target string + type ObjectBehavior struct + Action *ActionExecutor + Kind lower.ClassifierBehaviorKind + Name string + Object *Instance + State *StateExecutor + Symbol *symbols.Symbol + func (b *ObjectBehavior) Describe() string + type Objective struct + Best *symbols.Symbol + Conditions []Condition + Direction ObjectiveDirection + Name string + Scope *symbols.Scope + Symbol *symbols.Symbol + Type *symbols.Symbol + Value ast.Node + func (o Objective) Text() string + type ObjectiveDirection int + const Maximize + const Minimize + const NoDirection + func (d ObjectiveDirection) String() string + type OperandTypeError struct + Left string + Op string + Right string + Span source.Span + func (e *OperandTypeError) Error() string + func (e *OperandTypeError) Unwrap() error + type Quantity struct + Num semantics.Value + Unit Unit + func (q *Quantity) String() string + func (q *Quantity) TextWithMagnitude(magnitude string) string + type SatisfyAssertion struct + Negated bool + Owner *symbols.Symbol + Requirement *symbols.Symbol + RequirementRef string + Subject *symbols.Symbol + SubjectRef string + Symbol *symbols.Symbol + func (a *SatisfyAssertion) Text() string + type Sequence struct + func NewSequence() *Sequence + func (s *Sequence) Append(val Value) + func (s *Sequence) At(index int) (Value, error) + func (s *Sequence) Elements() []Value + func (s *Sequence) Size() int + type Set struct + func NewSet() *Set + func (s *Set) Add(val Value) + func (s *Set) Contains(val Value) bool + func (s *Set) Elements() []Value + func (s *Set) Size() int + type Shapes struct + type StateConfiguration struct + type StateExecutor struct + func (e *StateExecutor) ActiveStates() []*ast.StateNode + func (e *StateExecutor) ChangeWaits() []string + func (e *StateExecutor) CurrentState() ast.Node + func (e *StateExecutor) CurrentTime() float64 + func (e *StateExecutor) EventQueue() *EventQueue + func (e *StateExecutor) GetStateVisits() []string + func (e *StateExecutor) HasDueEvent() bool + func (e *StateExecutor) HasPendingDoWork() bool + func (e *StateExecutor) HasPendingSignal() bool + func (e *StateExecutor) HasPendingWork() bool + func (e *StateExecutor) InvokeOperation(operation string, args map[string]Value) + func (e *StateExecutor) PollChangeEvents() (bool, error) + func (e *StateExecutor) ProcessNextEvent() error + func (e *StateExecutor) Resume() bool + func (e *StateExecutor) RunDoRound() (int, error) + func (e *StateExecutor) RunToCompletion() error + func (e *StateExecutor) RunToQuiescence() error + func (e *StateExecutor) SendSignal(signalType string, args map[string]Value) + func (e *StateExecutor) SetTrace(trace *TraceRecorder) + func (e *StateExecutor) State() ExecutionState + func (e *StateExecutor) StateData() map[string]Value + func (e *StateExecutor) StateMachineSymbol() *symbols.Symbol + func (e *StateExecutor) StateStack() []*ast.StateNode + func (e *StateExecutor) Suspend() bool + func (e *StateExecutor) SuspendReason() string + func (e *StateExecutor) WatchesChangeCondition() bool + type Token struct + ID int64 + Location ast.Node + Wait *AcceptWait + type TraceRecorder struct + func NewTraceRecorder() *TraceRecorder + func (tr *TraceRecorder) BeginEval() + func (tr *TraceRecorder) Clear() + func (tr *TraceRecorder) Disable() + func (tr *TraceRecorder) Enable() + func (tr *TraceRecorder) EndEval(label string, value Value, err error) + func (tr *TraceRecorder) EndStatement() + func (tr *TraceRecorder) Entries() []string + func (tr *TraceRecorder) RecordActionStep(step int, tokens []Token) + func (tr *TraceRecorder) RecordBehaviorRun(kind, name string, id int64) + func (tr *TraceRecorder) RecordBehaviorStart(kind, name string, id int64) + func (tr *TraceRecorder) RecordCalcBind(param string, value Value, source string) + func (tr *TraceRecorder) RecordCalcEnter(name string) + func (tr *TraceRecorder) RecordCalcExit(name string, result Value) + func (tr *TraceRecorder) RecordCalcExitError(name string, err error) + func (tr *TraceRecorder) RecordCalcOutput(calc, output string, value Value) + func (tr *TraceRecorder) RecordCalcUsageExit(name string) + func (tr *TraceRecorder) RecordCalcUsageReuse(name string) + func (tr *TraceRecorder) RecordDoStep(state string) + func (tr *TraceRecorder) RecordEvent(event string, time float64) + func (tr *TraceRecorder) RecordLoopIteration(iteration int) + func (tr *TraceRecorder) RecordObjectMaterialized(typeName string, id int64) + func (tr *TraceRecorder) RecordStateEntry(state string, hasEntryAction bool) + func (tr *TraceRecorder) RecordStateExit(state string, hasExitAction bool) + func (tr *TraceRecorder) RecordStateTransition(fromState, toState string, event string) + func (tr *TraceRecorder) RecordStatement(label string) + func (tr *TraceRecorder) String() string + type Unit struct + Term semantics.UnitTerm + Text string + func (u Unit) String() string + type UnroutableSendError struct + Address bool + Outbound []string + Port string + func (e *UnroutableSendError) Error() string + func (e *UnroutableSendError) Unwrap() error + type Value struct + Const semantics.Value + Expr ast.Node + Instance int64 + Kind ValueKind + Literal *symbols.Symbol + Quantity *Quantity + Sequence *Sequence + Set *Set + Str string + Variant *symbols.Symbol + func NewEnumLiteral(sym *symbols.Symbol) Value + func (v Value) LiteralText() string + func (v Value) Object() (int64, bool) + type ValueKind int + const ValConst + const ValEnumLiteral + const ValExpr + const ValInstance + const ValInvalid + const ValNull + const ValQuantity + const ValSequence + const ValSet + const ValString + const ValVariant + func (k ValueKind) String() string + type ViolationError struct + Condition string + Element string + Kind string + What string + func (e *ViolationError) Error() string + func (e *ViolationError) Unwrap() error