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.
Diagnostic table
Section titled “Diagnostic table”| Code | Severity | Title | Message | Fix | Since |
|---|---|---|---|---|---|
| AONT001 | Error | Object type missing Key() declaration | Object type <type> does not declare a Key() property | Add .Key(t => t.<Property>) to the fluent Object<T>() chain so the type has an identity. | 2.0 |
| AONT002 | Error | Property expression not a simple member access | Property 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 |
| AONT003 | Error | Link target type not registered in same domain | Link <link> on <type> references type <target> which is not registered in the same domain | Register 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 |
| AONT004 | Warning | Action not bound to any workflow or tool | Action <action> on <type> is not bound to a workflow or tool | Add a .BoundTo<TWorkflow>() or .BoundToTool(...) declaration on the action, or remove it if dead. | 2.0 |
| AONT005 | Error | Interface mapping references non-existent property | Interface mapping on <type> references property <property> which is not declared | Declare the property via Property(t => t.<Property>) before the interface mapping, or correct the property name on the mapping side. | 2.0 |
| AONT006 | Error | Duplicate Object Type name within domain | Object 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 |
| AONT007 | Warning | Cross-domain link target cannot be validated locally | Cross-domain link <link> targets <type> in domain <domain> which cannot be validated at compile time | Ensure the target domain’s assembly is referenced if validation is required; otherwise accept the warning and rely on the runtime composition check. | 2.0 |
| AONT008 | Error | Edge type missing required Property() declarations | Edge on link <link> on <type> has no property declarations | Add at least one .Property(...) declaration inside the .WithEdge(...) block, or remove the edge if no edge data is needed. | 2.0 |
| AONT009 | Error | EmitsEvent<T>() references undeclared event | Action <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 |
| AONT010 | Error | Modifies() references undeclared property | Action <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 |
| AONT011 | Error | CreatesLinked<T>() references undeclared link | Action <action> on <type> creates linked <link> which is not declared via obj.HasOne/HasMany/ManyToMany | Add the matching link declaration on the owning object type, or correct the target type referenced from .CreatesLinked<T>(). | 2.0 |
| AONT012 | Warning | RequiresLink() references undeclared link | Action <action> on <type> requires link <link> which is not declared | Add the corresponding link declaration on the owning object type, or remove the precondition. | 2.0 |
| AONT013 | Warning | Action postcondition overlaps with event | Action <action> on <type> has Modifies('<property>') overlapping with event UpdatesProperty | Drop either the .Modifies(...) postcondition or the UpdatesProperty event so the effect is declared in exactly one place. | 2.0 |
| AONT014 | Error | Lifecycle bound to undeclared property | Lifecycle 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 |
| AONT015 | Error | Lifecycle has zero or more than one Initial state | Lifecycle on <type> must have exactly one .Initial() state but has <count> | Mark exactly one state with .Initial() in the lifecycle definition. | 2.0 |
| AONT016 | Error | Lifecycle has no Terminal states | Lifecycle on <type> must have at least one .Terminal() state | Mark at least one state with .Terminal() so the lifecycle has a sink. | 2.0 |
| AONT017 | Error | Transition references undeclared state | Lifecycle transition on <type> references state <state> which is not declared | Declare the state via .State(...) before referencing it from a transition. | 2.0 |
| AONT018 | Warning | Transition TriggeredByAction references undeclared action | Lifecycle 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 |
| AONT019 | Warning | Transition TriggeredByEvent<T> references undeclared event | Lifecycle 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 |
| AONT020 | Warning | Unreachable state in lifecycle | State <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 |
| AONT021 | Warning | Dead-end non-terminal state | State <state> in lifecycle on <type> has no outbound transitions and is not Terminal | Add an outbound transition from the state, mark it .Terminal(), or remove it. | 2.0 |
| AONT022 | Error | DerivedFrom() references undeclared property | Property <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 |
| AONT023 | Error | DerivedFrom() used on non-Computed property | Property <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 |
| AONT024 | Error | Derivation cycle detected | Derivation 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 |
| AONT025 | Warning | DerivedFromExternal() references unresolvable property | Property <property> on <type> has DerivedFromExternal reference to <domain>.<type>.<property> which cannot be validated locally | Ensure the referenced domain assembly is reachable if compile-time validation is required; otherwise accept the warning and rely on runtime resolution. | 2.0 |
| AONT026 | Info | Computed property has no DerivedFrom() | Property <property> on <type> is marked .Computed() but has no DerivedFrom() declaration | Add a .DerivedFrom(...) call so the derivation graph captures the dependency, or remove .Computed() if the property is not actually derived. | 2.0 |
| AONT027 | Error | Interface action not mapped | Object 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 |
| AONT028 | Error | ActionVia references undeclared concrete action | Interface 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 |
| AONT029 | Error | Interface action Accepts<T> incompatible with concrete action | Interface 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 |
| AONT030 | Warning | Interface declares actions but no implementors | Interface <interface> declares action <action> but no object types map it yet | Map 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 |
| AONT031 | Warning | Cross-domain link targets type with no extension point | Cross-domain link <link> targets <type> which has no matching extension point | Declare an .ExternalLinkExtensionPoint(...) on the target type for this link, or accept the warning if the target intentionally has no extension point. | 2.0 |
| AONT032 | Warning | Extension point interface constraint unsatisfied | Extension point <extensionPoint> on <type> requires interface <interface> but source type does not implement it | Make the linking source type implement the required interface, or relax the extension point’s RequiredSourceInterface. | 2.0 |
| AONT033 | Error | Extension point requires edge property not on link | Extension point <extensionPoint> on <type> requires edge property <property> which is missing from the matched link | Add the missing edge property on the source’s .WithEdge(...) block, or relax the extension point’s RequiredEdgeProperties. | 2.0 |
| AONT034 | Info | Extension point declared but no links match | Extension point <extensionPoint> on <type> has no matching cross-domain links | Either 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 |
| AONT035 | Warning | Cross-domain link would exceed MaxLinks | Extension point <extensionPoint> on <type> has MaxLinks=<n> but <m> links match | Raise the extension point’s MaxLinks, or remove some of the matching cross-domain links. | 2.0 |
| AONT036 | Error | Read-only action declares mutating chain call | Action <action> on <type> is marked ReadOnly but also calls <chainCall> which mutates state | Drop the .ReadOnly() marker, or remove the mutating chain call so the action is genuinely side-effect free. | 2.5.0 |
| AONT037 | Error | ObjectType descriptor violates DR-1 polyglot identity invariant | ObjectType 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 provided | Use 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 |