Malli value objects for the IAddon hot-reload bridge.
Shapes are uncompiled malli DATA (house idiom: PascalCase defs) seeded into a
LOCAL composite registry that COMPOSES hive-addon.mount.schema's registry —
AddonId/MountResult/MountSpec are reused, never redefined. The registry is
NEVER installed as the malli global default; reach it via
schema/validate/explain/validate* or by passing {:registry registry}.
Hot shapes are registered under :hot/* keys (:hot/registration, :hot/report, :hot/remount-report, :hot/source, :hot/strategy-id).
Two invariants are carried as DATA rather than prose:
Malli value objects for the IAddon hot-reload bridge.
Shapes are uncompiled malli DATA (house idiom: PascalCase defs) seeded into a
LOCAL composite registry that COMPOSES hive-addon.mount.schema's registry —
AddonId/MountResult/MountSpec are reused, never redefined. The registry is
NEVER installed as the malli global default; reach it via
`schema`/`validate`/`explain`/`validate*` or by passing {:registry registry}.
Hot shapes are registered under :hot/* keys (:hot/registration, :hot/report,
:hot/remount-report, :hot/source, :hot/strategy-id).
Two invariants are carried as DATA rather than prose:
- RemountReport's :teardown/data-preserved? is [:= true] — the no-nuke
invariant inherited from TeardownReport.
- :hot/strategy-id is an open :keyword, never an enum. The strategy set is
extensible by any module (OCP); closing it here would be the defect.Resolved physical source of an addon's constructor namespace. :hot/reloadable? is the decision derived from :hot/source-kind — true only for :directory. Open.
Resolved physical source of an addon's constructor namespace. :hot/reloadable? is the decision derived from :hot/source-kind — true only for :directory. Open.
(explain ?s x)Registry-aware explain — nil on success, error map on failure.
Registry-aware explain — nil on success, error map on failure.
One addon's registration into the hive-hot component registry. :hot/component-id is the key hive-hot knows it by; :addon/init-ns is the namespace whose reload triggers the strategy named by :hot/strategy-id. Open.
One addon's registration into the hive-hot component registry. :hot/component-id is the key hive-hot knows it by; :addon/init-ns is the namespace whose reload triggers the strategy named by :hot/strategy-id. Open.
Outcome of wiring a spec set into hive-hot. :hot/available? is false when hive-hot is absent from the classpath — the bridge then degrades to a no-op report rather than throwing, so a consumer without hive-hot still works. :hot/dirs is the watchable source-dir set derived from the specs (what a consumer feeds hive-hot's :dirs). :ok? is true only when every spec registered. Open.
Outcome of wiring a spec set into hive-hot. :hot/available? is false when hive-hot is absent from the classpath — the bridge then degrades to a no-op report rather than throwing, so a consumer without hive-hot still works. :hot/dirs is the watchable source-dir set derived from the specs (what a consumer feeds hive-hot's :dirs). :ok? is true only when every spec registered. Open.
What caused a reload. :manual is an explicit call (an operator, or the
hive hot reload <addon-id> MCP command); :ns-reload is a hive-hot component
callback; :file-change is watcher-driven.
What caused a reload. :manual is an explicit call (an operator, or the `hive hot reload <addon-id>` MCP command); :ns-reload is a hive-hot component callback; :file-change is watcher-driven.
(humanize-errors ?s x)Human-readable error data for x against ?s, or nil if x conforms.
Human-readable error data for x against ?s, or nil if x conforms.
Composite malli registry: hive-addon.mount.schema's registry (malli defaults + :addon/* + :mount/* schemas) plus this ns's :hot/* schemas. NOT installed as the global default — reach it via the wrappers below or {:registry registry}.
Composite malli registry: hive-addon.mount.schema's registry (malli defaults +
:addon/* + :mount/* schemas) plus this ns's :hot/* schemas. NOT installed as
the global default — reach it via the wrappers below or {:registry registry}.Outcome of reloading an addon and its transitive dependents.
:hot/seeds are the directly-changed addon ids; :hot/affected is the topo-ordered closure actually acted on (deps before dependents) and always CONTAINS the seeds. :hot/torn-down is the reverse-order shutdown that ran first. :mounted carries the per-addon MountResult from the ORDINARY mount pipeline — hot-reload is a projection of mount!, not a second registry.
:hot/strategy names the strategy that ran. :teardown/data-preserved? inherits the no-nuke invariant: [:= true]. Open.
Outcome of reloading an addon and its transitive dependents. :hot/seeds are the directly-changed addon ids; :hot/affected is the topo-ordered closure actually acted on (deps before dependents) and always CONTAINS the seeds. :hot/torn-down is the reverse-order shutdown that ran first. :mounted carries the per-addon MountResult from the ORDINARY mount pipeline — hot-reload is a projection of mount!, not a second registry. :hot/strategy names the strategy that ran. :teardown/data-preserved? inherits the no-nuke invariant: [:= true]. Open.
(schema ?s)Compile ?s against the local :hot/* + :mount/* + :addon/* registry.
Compile ?s against the local :hot/* + :mount/* + :addon/* registry.
Where an addon's constructor namespace physically lives, which decides whether its code can be reloaded at all.
:directory — a real directory on the classpath (a :local/root dep, or this
repo's own src). clj-reload can watch and reload it.
:jar — inside a JAR (an :mvn/version dep). The bytes cannot change
without a restart, so hot-reload is meaningless.
:absent — the namespace's source file is not on the classpath at all.
Where an addon's constructor namespace physically lives, which decides whether
its code can be reloaded at all.
:directory — a real directory on the classpath (a `:local/root` dep, or this
repo's own src). clj-reload can watch and reload it.
:jar — inside a JAR (an `:mvn/version` dep). The bytes cannot change
without a restart, so hot-reload is meaningless.
:absent — the namespace's source file is not on the classpath at all.Identifier of a reload strategy. OPEN on purpose — modules register their own strategies (OCP), so this is a plain keyword, never an enum.
Identifier of a reload strategy. OPEN on purpose — modules register their own strategies (OCP), so this is a plain keyword, never an enum.
(validate ?s x)Registry-aware validate — true/false.
Registry-aware validate — true/false.
(validate* ?s x)(validate* ?s x category)Validate x against ?s, bridging to hive-dsl Result.
(r/ok x) on success; (r/err category {:explanation <humanized>}) on failure.
category defaults to :hot/schema-violation and must be a qualified keyword
(hive-dsl taxonomy convention).
Validate x against ?s, bridging to hive-dsl Result.
(r/ok x) on success; (r/err category {:explanation <humanized>}) on failure.
`category` defaults to :hot/schema-violation and must be a qualified keyword
(hive-dsl taxonomy convention).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 |