On this page
Dynamic mode and linking conduits๏
Intermediate. Everything above works without this. Turn it on when separate parts of your system need to share.
By default a world is static โ bind, conjure, resolve. Turn on dynamic mode and conduits gain the ability to connect to each other at runtime.
Prerequisites for the excerpts below: use a fresh process; create
owner_book and borrower_book, define SharedDirectory, and capture its
spell_id from owner_book.bind(...) before conjuring. The complete
dynamic-linking lesson
includes all of that setup and prints the provider's found result.
The mode is decided once, by the first conjure, and then inherited:
# SETTLEMENT โ the first conjure on a fresh world sets the mode, and it locks
owner = owner_book.conjure(dynamic=True, name="owner")
# INHERITANCE โ later books just attach; a plain conjure() inherits the mode.
# You never repeat the flag.
borrower = borrower_book.conjure(name="borrower")
Now link them and share a spell across the boundary:
owner.link(borrower) # open a contract between the two
borrower.add_spell_to_contract( # โ the BORROWER asks
spell_id=spell_id,
conduit=owner, # โ from the conduit that OWNS it
permissions="create",
)
shared = borrower.meld("SharedDirectory") # resolves the owner's spell
Expected outcome: the borrower resolves the registered provider after linking and pulling its spell into the contract. The link alone does not grant it.
Sharing is a pull, never a push. The conduit that wants the spell asks for it, and names the owner. An owner cannot force its objects into someone else's scope โ so nothing arrives in your conduit that you didn't request.
Runnable examples๏
Dynamic linking basics โ Intermediate 21
Permissions linking vocabulary โ Intermediate 11
All intermediate examples ยท Level contents ยท Full contents