# Diffo v0.4.1 - Table of Contents

> TMF Service and Resource Manager with a difference

## Pages

- [Guide](readme.md)
- [License](mit.md)

- How-to
  - [Using Diffo.Type](use_diffo_type.md)
  - [Using the Diffo Provider Extension](use_diffo_provider_extension.md)
  - [Instance Versioning with the Diffo Provider](use_diffo_provider_versioning.md)

- Tutorials
  - [Tutorial](diffo.md)

- DSLs
  - [DSL: Diffo.Provider.Extension](dsl-diffo-provider-extension.md)

## Modules

- [Diffo](Diffo.md): Diffo - TMF Service and Resource Management with a difference
- [Diffo.Provider](Diffo.Provider.md): Provider API endpoint
- [Diffo.Provider.AssignableCharacteristic](Diffo.Provider.AssignableCharacteristic.md): Typed characteristic carrying pool bounds and assignment algorithm.
- [Diffo.Provider.AssignableCharacteristic.Value](Diffo.Provider.AssignableCharacteristic.Value.md): JSON value struct for AssignableCharacteristic.
- [Diffo.Provider.AssignableValue](Diffo.Provider.AssignableValue.md): Ash Typed Struct for Assignable Characteristic Value
- [Diffo.Provider.Assigner](Diffo.Provider.Assigner.md): Helper to perform Assignment using `Diffo.Provider.AssignmentRelationship`.
- [Diffo.Provider.Assignment](Diffo.Provider.Assignment.md): Ash Typed Struct for Assignment
- [Diffo.Provider.AssignmentRelationship](Diffo.Provider.AssignmentRelationship.md): Ash Resource for a pool assignment relationship.
- [Diffo.Provider.BaseCharacteristic](Diffo.Provider.BaseCharacteristic.md): Ash Resource Fragment which is the point of extension for typed TMF Characteristics.
- [Diffo.Provider.BaseInstance](Diffo.Provider.BaseInstance.md): Ash Resource Fragment which is the point of extension for your TMF Service or Resource Instance.
- [Diffo.Provider.BaseParty](Diffo.Provider.BaseParty.md): Ash Resource Fragment which is a the point of extension for your TMF Party
- [Diffo.Provider.BasePlace](Diffo.Provider.BasePlace.md): Ash Resource Fragment which is the point of extension for your TMF Place.
- [Diffo.Provider.BaseRelationship](Diffo.Provider.BaseRelationship.md): Ash Resource Fragment which is the shared foundation for TMF Relationship resources.
- [Diffo.Provider.Calculations.FieldFromAssignment](Diffo.Provider.Calculations.FieldFromAssignment.md): Reads a field directly from an `AssignmentRelationship` record.
- [Diffo.Provider.Calculations.FieldViaAssignedRelationship](Diffo.Provider.Calculations.FieldViaAssignedRelationship.md): Reads a field from the source instance of an `AssignmentRelationship`.
- [Diffo.Provider.Calculations.FieldViaRelationship](Diffo.Provider.Calculations.FieldViaRelationship.md): Reads a field from target instances reached via `DefinedSimpleRelationship`.
- [Diffo.Provider.Calculations.InheritedParty](Diffo.Provider.Calculations.InheritedParty.md): Backing calculation for `inherited_party` DSL declarations.
- [Diffo.Provider.Calculations.InheritedPlace](Diffo.Provider.Calculations.InheritedPlace.md): Backing calculation for `inherited_place` DSL declarations.
- [Diffo.Provider.Calculations.PoolCharacteristics](Diffo.Provider.Calculations.PoolCharacteristics.md): Loads the `AssignableCharacteristic` pool records associated with an
instance, one per `pool :name, :thing` declaration on the resource module.
- [Diffo.Provider.Calculations.TypedCharacteristics](Diffo.Provider.Calculations.TypedCharacteristics.md): Loads all typed `BaseCharacteristic`-derived records associated with an
instance.
- [Diffo.Provider.Changes.Assign](Diffo.Provider.Changes.Assign.md): After-action change for the standard `:assign_*` pattern.
- [Diffo.Provider.Changes.Define](Diffo.Provider.Changes.Define.md): After-action change for the standard `:define` pattern.
- [Diffo.Provider.Changes.Relate](Diffo.Provider.Changes.Relate.md): After-action change for the standard `:relate` pattern.
- [Diffo.Provider.Characteristic](Diffo.Provider.Characteristic.md): Ash Resource for a TMF Characteristic
- [Diffo.Provider.Characteristic.Extension](Diffo.Provider.Characteristic.Extension.md): Marker extension identifying a module as a valid characteristic resource.
- [Diffo.Provider.Characteristic.Extension.Transformers.GenerateActions](Diffo.Provider.Characteristic.Extension.Transformers.GenerateActions.md): Synthesises default `:create` and `:update` actions on
`BaseCharacteristic`-derived resources from the resource's declared public
attributes.
- [Diffo.Provider.DefinedSimpleRelationship](Diffo.Provider.DefinedSimpleRelationship.md): Ash Resource for a relationship with an optional single embedded characteristic,
set at creation and never changed.
- [Diffo.Provider.DomainFragment](Diffo.Provider.DomainFragment.md): Domain fragment for Ash domains that extend the Diffo Provider.
- [Diffo.Provider.Entity](Diffo.Provider.Entity.md): Ash Resource for a TMF Entity
- [Diffo.Provider.EntityRef](Diffo.Provider.EntityRef.md): Ash Resource for a TMF Entity Reference
- [Diffo.Provider.Event](Diffo.Provider.Event.md): Ash Resource for a TMF Event
- [Diffo.Provider.Extension](Diffo.Provider.Extension.md): Unified DSL extension for all Diffo provider resource kinds.
- [Diffo.Provider.Extension.Info](Diffo.Provider.Extension.Info.md)
- [Diffo.Provider.Extension.InheritedPartyDeclaration](Diffo.Provider.Extension.InheritedPartyDeclaration.md): DSL entity for an `inherited_party` declaration inside `parties do` on an Instance resource.
- [Diffo.Provider.Extension.InheritedPlaceDeclaration](Diffo.Provider.Extension.InheritedPlaceDeclaration.md): DSL entity for an `inherited_place` declaration inside `places do` on an Instance resource.
- [Diffo.Provider.Extension.InstanceRole](Diffo.Provider.Extension.InstanceRole.md): DSL entity declaring a role a Party or Place kind plays with respect to Instances
- [Diffo.Provider.Extension.PartyDeclaration](Diffo.Provider.Extension.PartyDeclaration.md): DSL entity declaring a party role on an Instance
- [Diffo.Provider.Extension.PartyRole](Diffo.Provider.Extension.PartyRole.md): DSL entity declaring a role a Party or Place kind plays with respect to Parties
- [Diffo.Provider.Extension.Persisters.PersistCharacteristics](Diffo.Provider.Extension.Persisters.PersistCharacteristics.md): Persists characteristic declarations and bakes characteristics/0
- [Diffo.Provider.Extension.Persisters.PersistFeatures](Diffo.Provider.Extension.Persisters.PersistFeatures.md): Persists feature declarations and bakes features/0
- [Diffo.Provider.Extension.Persisters.PersistInstances](Diffo.Provider.Extension.Persisters.PersistInstances.md): Persists instance role declarations and bakes instances/0
- [Diffo.Provider.Extension.Persisters.PersistParties](Diffo.Provider.Extension.Persisters.PersistParties.md): Persists party declarations/roles and bakes parties/0
- [Diffo.Provider.Extension.Persisters.PersistPlaces](Diffo.Provider.Extension.Persisters.PersistPlaces.md): Persists place declarations/roles and bakes places/0
- [Diffo.Provider.Extension.Persisters.PersistPools](Diffo.Provider.Extension.Persisters.PersistPools.md): Persists pool declarations and bakes pools/0
- [Diffo.Provider.Extension.Persisters.PersistSpecification](Diffo.Provider.Extension.Persisters.PersistSpecification.md): Normalises specification DSL options, persists them, and bakes specification/0
- [Diffo.Provider.Extension.PlaceDeclaration](Diffo.Provider.Extension.PlaceDeclaration.md): DSL entity declaring a place role on an Instance
- [Diffo.Provider.Extension.PlaceRole](Diffo.Provider.Extension.PlaceRole.md): DSL entity declaring a role a Party or Place kind plays with respect to Places
- [Diffo.Provider.Extension.Transformers.TransformBehaviour](Diffo.Provider.Extension.Transformers.TransformBehaviour.md): Generates build_before/1 and build_after/2, and injects build arguments into declared create actions
- [Diffo.Provider.Extension.Transformers.TransformInheritedRefs](Diffo.Provider.Extension.Transformers.TransformInheritedRefs.md): Injects Ash calculations for inherited_place and inherited_party declarations
- [Diffo.Provider.Extension.Transformers.TransformRelationships](Diffo.Provider.Extension.Transformers.TransformRelationships.md): Resolves the relationships pipeline and bakes permitted_source_roles/0 and permitted_target_roles/0
- [Diffo.Provider.Extension.Verifiers.VerifyBehaviour](Diffo.Provider.Extension.Verifiers.VerifyBehaviour.md): Verifies that actions declared in behaviour do exist as Ash actions of the correct type
- [Diffo.Provider.Extension.Verifiers.VerifyCharacteristics](Diffo.Provider.Extension.Verifiers.VerifyCharacteristics.md): Verifies characteristic names are unique and value_type modules exist and extend BaseCharacteristic
- [Diffo.Provider.Extension.Verifiers.VerifyFeatures](Diffo.Provider.Extension.Verifiers.VerifyFeatures.md): Verifies feature names are unique and feature characteristic value_type modules exist and extend BaseCharacteristic
- [Diffo.Provider.Extension.Verifiers.VerifyInstances](Diffo.Provider.Extension.Verifiers.VerifyInstances.md): Verifies instance role declarations — no duplicates, instance_type modules must exist and extend BaseInstance
- [Diffo.Provider.Extension.Verifiers.VerifyParties](Diffo.Provider.Extension.Verifiers.VerifyParties.md): Verifies party declarations and roles — no duplicates, party_type modules must exist and extend BaseParty
- [Diffo.Provider.Extension.Verifiers.VerifyPlaces](Diffo.Provider.Extension.Verifiers.VerifyPlaces.md): Verifies place declarations and roles — no duplicates, place_type modules must exist and extend BasePlace
- [Diffo.Provider.Extension.Verifiers.VerifyPools](Diffo.Provider.Extension.Verifiers.VerifyPools.md): Verifies pool names are unique
- [Diffo.Provider.Extension.Verifiers.VerifyRelationships](Diffo.Provider.Extension.Verifiers.VerifyRelationships.md): Verifies that relationship role declarations are atoms, not modules or other invalid values
- [Diffo.Provider.Extension.Verifiers.VerifySpecification](Diffo.Provider.Extension.Verifiers.VerifySpecification.md): Verifies specification DSL values satisfy the Specification resource constraints
- [Diffo.Provider.ExternalIdentifier](Diffo.Provider.ExternalIdentifier.md): Ash Resource for a TMF ExternalIdentifier
- [Diffo.Provider.Feature](Diffo.Provider.Feature.md): Ash Resource for a TMF Feature
- [Diffo.Provider.Instance](Diffo.Provider.Instance.md): Ash Resource for a TMF Service or Resource Instance
- [Diffo.Provider.Instance.Extension](Diffo.Provider.Instance.Extension.md): Marker extension — identifies BaseInstance-derived resources. DSL is in `Diffo.Provider.Extension`.
- [Diffo.Provider.Instance.Extension.Info](Diffo.Provider.Instance.Extension.Info.md)
- [Diffo.Provider.Instance.Extension.PartyDeclaration](Diffo.Provider.Instance.Extension.PartyDeclaration.md): PartyDeclaration - DSL entity declaring a party role on an Instance

- [Diffo.Provider.Instance.Extension.Persisters.PersistCharacteristics](Diffo.Provider.Instance.Extension.Persisters.PersistCharacteristics.md): Persists characteristic declarations and bakes characteristics/0
- [Diffo.Provider.Instance.Extension.Persisters.PersistFeatures](Diffo.Provider.Instance.Extension.Persisters.PersistFeatures.md): Persists feature declarations and bakes features/0
- [Diffo.Provider.Instance.Extension.Persisters.PersistParties](Diffo.Provider.Instance.Extension.Persisters.PersistParties.md): Persists party declarations and bakes parties/0
- [Diffo.Provider.Instance.Extension.Persisters.PersistPlaces](Diffo.Provider.Instance.Extension.Persisters.PersistPlaces.md): Persists place declarations and bakes places/0
- [Diffo.Provider.Instance.Extension.Persisters.PersistSpecification](Diffo.Provider.Instance.Extension.Persisters.PersistSpecification.md): Normalises specification DSL options, persists them, and bakes specification/0
- [Diffo.Provider.Instance.Extension.PlaceDeclaration](Diffo.Provider.Instance.Extension.PlaceDeclaration.md): PlaceDeclaration - DSL entity declaring a place role on an Instance

- [Diffo.Provider.Instance.Extension.Verifiers.VerifyBehaviour](Diffo.Provider.Instance.Extension.Verifiers.VerifyBehaviour.md): Verifies that actions declared in behaviour do exist as Ash actions of the correct type
- [Diffo.Provider.Instance.Extension.Verifiers.VerifyCharacteristics](Diffo.Provider.Instance.Extension.Verifiers.VerifyCharacteristics.md): Verifies that characteristic names are unique and value_type modules exist
- [Diffo.Provider.Instance.Extension.Verifiers.VerifyFeatures](Diffo.Provider.Instance.Extension.Verifiers.VerifyFeatures.md): Verifies that feature names are unique, feature characteristic names are unique, and value_type modules exist
- [Diffo.Provider.Instance.Extension.Verifiers.VerifyParties](Diffo.Provider.Instance.Extension.Verifiers.VerifyParties.md): Verifies party role declarations — no duplicates, party_type modules must exist
- [Diffo.Provider.Instance.Extension.Verifiers.VerifySpecification](Diffo.Provider.Instance.Extension.Verifiers.VerifySpecification.md): Verifies that the specification DSL values satisfy the Specification resource's attribute constraints
- [Diffo.Provider.Instance.Info](Diffo.Provider.Instance.Info.md): Public introspection API for resources extending Diffo.Provider.BaseInstance
- [Diffo.Provider.Note](Diffo.Provider.Note.md): Ash Resource for a TMF Note
- [Diffo.Provider.Party](Diffo.Provider.Party.md): Ash Resource for a TMF Party
- [Diffo.Provider.Party.Extension](Diffo.Provider.Party.Extension.md): Marker extension — identifies BaseParty-derived resources. DSL is in `Diffo.Provider.Extension`.
- [Diffo.Provider.Party.Extension.Info](Diffo.Provider.Party.Extension.Info.md)
- [Diffo.Provider.Party.Extension.InstanceRole](Diffo.Provider.Party.Extension.InstanceRole.md): InstanceRole - DSL entity declaring a role this Party kind plays with respect to Instances

- [Diffo.Provider.Party.Extension.PartyRole](Diffo.Provider.Party.Extension.PartyRole.md): PartyRole - DSL entity declaring a role this Party kind plays with respect to other Parties

- [Diffo.Provider.Party.Extension.Persisters.PersistInstances](Diffo.Provider.Party.Extension.Persisters.PersistInstances.md): Persists instance role declarations and bakes instances/0
- [Diffo.Provider.Party.Extension.Persisters.PersistParties](Diffo.Provider.Party.Extension.Persisters.PersistParties.md): Persists party role declarations and bakes parties/0
- [Diffo.Provider.Party.Extension.Persisters.PersistPlaces](Diffo.Provider.Party.Extension.Persisters.PersistPlaces.md): Persists place role declarations and bakes places/0
- [Diffo.Provider.Party.Extension.PlaceRole](Diffo.Provider.Party.Extension.PlaceRole.md): PlaceRole - DSL entity declaring a role this Party kind plays with respect to Places

- [Diffo.Provider.Party.Extension.Verifiers.VerifyRoles](Diffo.Provider.Party.Extension.Verifiers.VerifyRoles.md): Verifies role declarations across instances, parties, and places sections
- [Diffo.Provider.PartyRef](Diffo.Provider.PartyRef.md): Ash Resource for a TMF PartyRef
- [Diffo.Provider.Place](Diffo.Provider.Place.md): Ash Resource for a TMF Place
- [Diffo.Provider.Place.Extension](Diffo.Provider.Place.Extension.md): Marker extension — identifies BasePlace-derived resources. DSL is in `Diffo.Provider.Extension`.
- [Diffo.Provider.Place.Extension.Info](Diffo.Provider.Place.Extension.Info.md)
- [Diffo.Provider.Place.Extension.InstanceRole](Diffo.Provider.Place.Extension.InstanceRole.md): InstanceRole - DSL entity declaring a role this Place kind plays with respect to Instances

- [Diffo.Provider.Place.Extension.PartyRole](Diffo.Provider.Place.Extension.PartyRole.md): PartyRole - DSL entity declaring a role this Place kind plays with respect to Parties

- [Diffo.Provider.Place.Extension.Persisters.PersistInstances](Diffo.Provider.Place.Extension.Persisters.PersistInstances.md): Persists instance role declarations and bakes instances/0
- [Diffo.Provider.Place.Extension.Persisters.PersistParties](Diffo.Provider.Place.Extension.Persisters.PersistParties.md): Persists party role declarations and bakes parties/0
- [Diffo.Provider.Place.Extension.Persisters.PersistPlaces](Diffo.Provider.Place.Extension.Persisters.PersistPlaces.md): Persists place role declarations and bakes places/0
- [Diffo.Provider.Place.Extension.PlaceRole](Diffo.Provider.Place.Extension.PlaceRole.md): PlaceRole - DSL entity declaring a role this Place kind plays with respect to other Places

- [Diffo.Provider.Place.Extension.Verifiers.VerifyRoles](Diffo.Provider.Place.Extension.Verifiers.VerifyRoles.md): Verifies role declarations across instances, parties, and places sections
- [Diffo.Provider.PlaceRef](Diffo.Provider.PlaceRef.md): Ash Resource for a TMF Place Reference
- [Diffo.Provider.ProcessStatus](Diffo.Provider.ProcessStatus.md): Ash Resource for a TMF ProcessStatus
- [Diffo.Provider.Relationship](Diffo.Provider.Relationship.md): 
Ash Resource for a TMF Service or Resource Relationship
- [Diffo.Provider.Specification](Diffo.Provider.Specification.md): Ash Resource for a TMF Service or Resource Specification.
- [Diffo.Type.CharacteristicValue](Diffo.Type.CharacteristicValue.md): Ash type for a typed characteristic value.
- [Diffo.Type.Dynamic](Diffo.Type.Dynamic.md): `Diffo.Type.Dynamic` is an `Ash.Type.NewType` for values whose exact type is not known until
runtime. The `:type` field holds the `Ash.Type.NewType` module and `:value` holds the cast value.
- [Diffo.Type.NameValueArrayPrimitive](Diffo.Type.NameValueArrayPrimitive.md): Ash TypedStruct for a named array of primitive values.
- [Diffo.Type.NameValuePrimitive](Diffo.Type.NameValuePrimitive.md): Ash TypedStruct for a named primitive value.
- [Diffo.Type.Primitive](Diffo.Type.Primitive.md): `Diffo.Type.Primitive` is a discriminated union of primitive types: string, integer, float,
boolean, date, time, datetime, and duration.
- [Diffo.Type.Value](Diffo.Type.Value.md): `Diffo.Type.Value` is an `Ash.Type.NewType` union that holds either a `Diffo.Type.Primitive`
or a `Diffo.Type.Dynamic` value.
- [Diffo.Unwrap](Diffo.Unwrap.md): `Diffo.Unwrap` is a protocol for extracting the underlying Elixir value from Diffo and Ash
wrapper types. It is defined with `@fallback_to_any true`, so any value without an explicit
implementation is returned unchanged.
- [Diffo.Util](Diffo.Util.md): Utility methods

- [Diffo.Uuid](Diffo.Uuid.md): Validate and/or create Uuid

## Mix Tasks

- [mix diffo.install](Mix.Tasks.Diffo.Install.md): Installs Diffo

