# design notes

## core model

- OutgoingRegistry (Variant)
  исходящая конфигурация
  - [provider] configuration
  - [container, live] slots
    набор вариантов (слотов)
  - [property] primarySlot
- AssemblyRegistry (Varaint, Slot)
  содержимое слота может быть добавлено после появления слота в OutgoingRegistry
  - assembleTask
    - inputs
      - compile unit output (CompileUnit, String)
      - direct object (task, file collection, etc.)
    - artifact: directory
  - customTask
    - artifact: FileSystemLocation

## extension

- adapter
  - whenFinalized
- dsl
  - variant(name)
    - slot(name)
    - from***
  - whenFinalized
  - whenOutgoingConfiguration
  - whenOutgoingSlot

outgoing = outgoings.maybeCreate(variant)

slot = outgoings.slots.maybeCreate(slotName)
assembly = assemblies.register(variantSlot, task, mapOutput)
outgoing.configure(configuration -> {
    slots.all(slot -> {
        assemblies.when(variant, slot) { assembly ->
            configuration.variants.create(slot.name) {
                artifact(assembly.artifact)
            }
        }
    });
});