The Clojure host contract as DATA: resources/vis-contract/clojure-host.edn.
com.blockether.vis.contract.python-host declares what a PYTHON extension may
ask the host for. This is its symmetric half for CLOJURE extensions, which have no
sandbox at all: an extension is a deps project with the whole engine on its
classpath, so the facade com.blockether.vis.core is a promise nothing enforced.
The document names the facade, where extension code lives, and the FROZEN set of
internal namespaces extensions already require past it. This namespace reads and
validates the document and re-derives the real coupling from the tree, so
contract.clojure-host-test can fail on drift in either direction.
It ships in com.blockether/vis-contract beside its Python twin and requires no
Vis namespace: a linter in somebody else's repository can read the same document
the engine's own suite enforces.
The Clojure host contract as DATA: `resources/vis-contract/clojure-host.edn`. [[com.blockether.vis.contract.python-host]] declares what a PYTHON extension may ask the host for. This is its symmetric half for CLOJURE extensions, which have no sandbox at all: an extension is a deps project with the whole engine on its classpath, so the facade `com.blockether.vis.core` is a promise nothing enforced. The document names the facade, where extension code lives, and the FROZEN set of internal namespaces extensions already require past it. This namespace reads and validates the document and re-derives the real coupling from the tree, so `contract.clojure-host-test` can fail on drift in either direction. It ships in `com.blockether/vis-contract` beside its Python twin and requires no Vis namespace: a linter in somebody else's repository can read the same document the engine's own suite enforces.
(extension-roots)Directories, relative to the repository root, that hold extension projects.
Directories, relative to the repository root, that hold extension projects.
(facade)The one namespace an extension is meant to require.
The one namespace an extension is meant to require.
(internal-debt)The frozen coupling: {:debt/production #{ns} :debt/test #{ns}}.
The frozen coupling: `{:debt/production #{ns} :debt/test #{ns}}`.
(internal-requires root)The internal namespaces extensions under root really require, as
{:debt/production {ns #{path}} :debt/test {ns #{path}}}. Every namespace is a
symbol; the paths are what a failing test names as the place to fix.
The internal namespaces extensions under `root` really require, as
`{:debt/production {ns #{path}} :debt/test {ns #{path}}}`. Every namespace is a
symbol; the paths are what a failing test names as the place to fix.(version)The contract version. Bumped when the shape of the document changes.
The contract version. Bumped when the shape of the document changes.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |