Assembly DSL

The assembly package is the ergonomic layer on top of the application module. It keeps the same typed module model, but adds a smaller surface for mounting blueprints, deriving providers, and constructing entry descriptors.

Current Surface

Current Mounting Style

import cats.data.{EitherT, Kleisli}
import cats.effect.IO
import org.sigilaris.core.application.feature.accounts.module.AccountsBP
import org.sigilaris.core.application.feature.group.module.GroupsBP
import org.sigilaris.core.assembly.BlueprintDsl.*
import org.sigilaris.core.assembly.TablesProviderOps.*
import org.sigilaris.core.merkle.{MerkleTrie, MerkleTrieNode}

given MerkleTrie.NodeStore[IO] = Kleisli: (_: MerkleTrieNode.MerkleHash) =>
  EitherT.rightT[IO, String](None)

val accountsModule = mount("accounts" -> AccountsBP[IO])
val accountsProvider = accountsModule.toTablesProvider
val groupsModule = mount("groups" -> GroupsBP[IO](accountsProvider))

What The DSL Adds

If you need the lower-level reducer and module types directly, go back to the Application Module. The assembly layer is a helper, not a separate runtime model.

Current Baseline