Foundgine separates four responsibilities:
Metadata describes what exists. Semantic configuration describes what it means. Authorization describes what may be exercised. Intent describes what the caller wants.
Foundgine.Core.Semantic.Metadata is the structural source of truth. Providers or generated metadata describe entities, fields, keys, CLR types and direct relationships.
Foundgine.Core.Semantic consumes that metadata through IMetadataCatalog:
var model = SemanticModel.Discover(metadata);
or, when application-specific enrichment is required:
var model = SemanticModelBuilder
.FromMetadata(metadata)
.Traversal(customer, "transactions",
customerRelationships,
relationshipContract,
contractTransactions)
.Build();
Discovery does not grant authorization or invent business capabilities.
A configured traversal such as:
can expand to:
The expanded relationship path remains part of the semantic graph. Authorization and planning therefore see the real dependencies rather than an opaque shortcut.
Do not configure facts that Foundgine can prove from structural metadata.
Configure meaning that structural metadata cannot infer:
The canonical Supply Chain sample intentionally keeps this enrichment in:
src/csharp/samples/Foundgine.SupplyChain/Application/SupplyChainSemanticConfiguration.cs
It no longer has a separate SupplyChain.Semantics project. This is an architectural acceptance criterion: ordinary structural discovery must continue to work without an application-owned semantic framework.
The intentionally difficult Foundgine.SupplyChain.Advanced showcase remains a separate example for mixed/manual semantics, recursive relationships, authorization and complex mutation planning.
Next: Mapping and connections