Skip to content

AONT001–099 — Registration & Composition

The AONT001–099 range covers compile-time analyzer diagnostics emitted by Strategos.Ontology.Generators against DomainOntology definitions, plus the polyglot identity invariant enforced at descriptor-construction time. Codes 001–036 fire during Roslyn analysis of the fluent DSL (Key(), Property(), Action(), Lifecycle(), interface mappings, derivation, extension points, ReadOnly). Code 037 enforces the DR-1 polyglot identity invariant on ObjectType descriptors regardless of contribution path. The link-composition slice (AONT040–042) is documented on the AONT100–199 page.

CodeSeverityTitleMessageFixSince
AONT001ErrorObject type missing Key() declarationObject type <type> does not declare a Key() propertyAdd .Key(t => t.<Property>) to the fluent Object<T>() chain so the type has an identity.2.0
AONT002ErrorProperty expression not a simple member accessProperty expression in <type> is not a simple member access (p => p.Property)Replace the lambda with p => p.PropertyName. Composite or computed expressions are rejected by the analyzer.2.0
AONT003ErrorLink target type not registered in same domainLink <link> on <type> references type <target> which is not registered in the same domainRegister the target type with builder.Object<TTarget>() in the same domain, or convert the link to a cross-domain link declared on the domain root.2.0
AONT004WarningAction not bound to any workflow or toolAction <action> on <type> is not bound to a workflow or toolAdd a .BoundTo<TWorkflow>() or .BoundToTool(...) declaration on the action, or remove it if dead.2.0
AONT005ErrorInterface mapping references non-existent propertyInterface mapping on <type> references property <property> which is not declaredDeclare the property via Property(t => t.<Property>) before the interface mapping, or correct the property name on the mapping side.2.0
AONT006ErrorDuplicate Object Type name within domainObject type <name> is declared multiple times in domain <domain>Remove the duplicate Object<T>() registration, or give one of them a distinct name via Object<T>("alternate-name", ...).2.0
AONT007WarningCross-domain link target cannot be validated locallyCross-domain link <link> targets <type> in domain <domain> which cannot be validated at compile timeEnsure the target domain’s assembly is referenced if validation is required; otherwise accept the warning and rely on the runtime composition check.2.0
AONT008ErrorEdge type missing required Property() declarationsEdge on link <link> on <type> has no property declarationsAdd at least one .Property(...) declaration inside the .WithEdge(...) block, or remove the edge if no edge data is needed.2.0
AONT009ErrorEmitsEvent<T>() references undeclared eventAction <action> on <type> emits event <event> which is not declared via obj.Event<T>()Declare the event on the owning object type via obj.Event<TEvent>() before referencing it from the action.2.0
AONT010ErrorModifies() references undeclared propertyAction <action> on <type> modifies property <property> which is not declared via obj.Property()Declare the property on the owning object type before listing it in .Modifies(...), or correct the property reference.2.0
AONT011ErrorCreatesLinked<T>() references undeclared linkAction <action> on <type> creates linked <link> which is not declared via obj.HasOne/HasMany/ManyToManyAdd the matching link declaration on the owning object type, or correct the target type referenced from .CreatesLinked<T>().2.0
AONT012WarningRequiresLink() references undeclared linkAction <action> on <type> requires link <link> which is not declaredAdd the corresponding link declaration on the owning object type, or remove the precondition.2.0
AONT013WarningAction postcondition overlaps with eventAction <action> on <type> has Modifies('<property>') overlapping with event UpdatesPropertyDrop either the .Modifies(...) postcondition or the UpdatesProperty event so the effect is declared in exactly one place.2.0
AONT014ErrorLifecycle bound to undeclared propertyLifecycle on <type> is bound to property <property> which is not declared via obj.Property()Declare the property on the owning object type before binding a lifecycle to it, or correct the property reference inside .Lifecycle(...).2.0
AONT015ErrorLifecycle has zero or more than one Initial stateLifecycle on <type> must have exactly one .Initial() state but has <count>Mark exactly one state with .Initial() in the lifecycle definition.2.0
AONT016ErrorLifecycle has no Terminal statesLifecycle on <type> must have at least one .Terminal() stateMark at least one state with .Terminal() so the lifecycle has a sink.2.0
AONT017ErrorTransition references undeclared stateLifecycle transition on <type> references state <state> which is not declaredDeclare the state via .State(...) before referencing it from a transition.2.0
AONT018WarningTransition TriggeredByAction references undeclared actionLifecycle transition on <type> references action <action> which is not declared via obj.Action()Declare the action via obj.Action(...) before referencing it from .TriggeredByAction(...), or correct the action name.2.0
AONT019WarningTransition TriggeredByEvent<T> references undeclared eventLifecycle transition on <type> references event <event> which is not declared via obj.Event<T>()Declare the event via obj.Event<TEvent>() before referencing it from .TriggeredByEvent<T>().2.0
AONT020WarningUnreachable state in lifecycleState <state> in lifecycle on <type> is unreachable (no inbound transitions and not Initial)Add an inbound transition into the state, mark it .Initial(), or remove it.2.0
AONT021WarningDead-end non-terminal stateState <state> in lifecycle on <type> has no outbound transitions and is not TerminalAdd an outbound transition from the state, mark it .Terminal(), or remove it.2.0
AONT022ErrorDerivedFrom() references undeclared propertyProperty <property> on <type> has DerivedFrom('<source>') but <source> is not declared via obj.Property()Declare the source property on the same object type before referencing it from DerivedFrom.2.0
AONT023ErrorDerivedFrom() used on non-Computed propertyProperty <property> on <type> uses DerivedFrom() but is not marked as .Computed()Add .Computed() to the property declaration, or remove the DerivedFrom(...) call if the property is hand-set.2.0
AONT024ErrorDerivation cycle detectedDerivation cycle detected on <type>: <chain>Break the cycle by removing one of the DerivedFrom edges or by making one of the properties non-Computed.2.0
AONT025WarningDerivedFromExternal() references unresolvable propertyProperty <property> on <type> has DerivedFromExternal reference to <domain>.<type>.<property> which cannot be validated locallyEnsure the referenced domain assembly is reachable if compile-time validation is required; otherwise accept the warning and rely on runtime resolution.2.0
AONT026InfoComputed property has no DerivedFrom()Property <property> on <type> is marked .Computed() but has no DerivedFrom() declarationAdd a .DerivedFrom(...) call so the derivation graph captures the dependency, or remove .Computed() if the property is not actually derived.2.0
AONT027ErrorInterface action not mappedObject type <type> implements interface <interface> but does not map action <action>Add an .ActionVia(...) mapping from the interface action to a concrete action declared on the object type.2.0
AONT028ErrorActionVia references undeclared concrete actionInterface mapping on <type> maps <interfaceAction> to undeclared action <concreteAction>Declare the concrete action on the object type, or correct the action name on the .ActionVia(...) mapping.2.0
AONT029ErrorInterface action Accepts<T> incompatible with concrete actionInterface action <interfaceAction> Accepts<TInterfaceArg> is incompatible with concrete action <concreteAction> Accepts<TConcreteArg>Make the concrete action’s Accepts<T> assignable to the interface’s Accepts<T>, or pick a different concrete action for the mapping.2.0
AONT030WarningInterface declares actions but no implementorsInterface <interface> declares action <action> but no object types map it yetMap the action on at least one object type via .ImplementsInterface<TIface>(map => map.ActionVia(...)), or remove the action from the interface if unused.2.0
AONT031WarningCross-domain link targets type with no extension pointCross-domain link <link> targets <type> which has no matching extension pointDeclare an .ExternalLinkExtensionPoint(...) on the target type for this link, or accept the warning if the target intentionally has no extension point.2.0
AONT032WarningExtension point interface constraint unsatisfiedExtension point <extensionPoint> on <type> requires interface <interface> but source type does not implement itMake the linking source type implement the required interface, or relax the extension point’s RequiredSourceInterface.2.0
AONT033ErrorExtension point requires edge property not on linkExtension point <extensionPoint> on <type> requires edge property <property> which is missing from the matched linkAdd the missing edge property on the source’s .WithEdge(...) block, or relax the extension point’s RequiredEdgeProperties.2.0
AONT034InfoExtension point declared but no links matchExtension point <extensionPoint> on <type> has no matching cross-domain linksEither add a cross-domain link that satisfies the extension point’s constraints, or remove the extension point if no consumer is expected yet.2.0
AONT035WarningCross-domain link would exceed MaxLinksExtension point <extensionPoint> on <type> has MaxLinks=<n> but <m> links matchRaise the extension point’s MaxLinks, or remove some of the matching cross-domain links.2.0
AONT036ErrorRead-only action declares mutating chain callAction <action> on <type> is marked ReadOnly but also calls <chainCall> which mutates stateDrop the .ReadOnly() marker, or remove the mutating chain call so the action is genuinely side-effect free.2.5.0
AONT037ErrorObjectType descriptor violates DR-1 polyglot identity invariantObjectType descriptor <name> must supply ClrType (via generic builder.Object<T>() or the clrType: named argument on the descriptor overload) or SymbolKey (via symbolKey: named argument on the descriptor overload); neither was providedUse the generic builder.Object<T>() overload to attach a CLR type, or pass a symbolKey: argument to the descriptor overload so the descriptor has at least one identity coordinate.2.5.0