The wire types were in hive-host-sock, which is the host *socket* crate — so anything living there is core-shaped by construction, and the projection had quietly grown two core dependencies to match: it selected roots by matching NodeKind::Dag, and rendered payloads through free functions in hive-c0re that nothing obliged a second host to write. hive-jobq is the wrong home too. That crate is the scheduler — logic — and folding presentation in means every consumer of it carries a JSON vocabulary it may never serve. So: a new hive-jobq-wire. A host implements WireNode for its payload N and WireResource for its resource name R; GraphWire::wire_snapshot is blanket-implemented for Graph<N, R> when both hold, and for nothing else. A payload that has never said how it displays has no way onto the wire. wire_snapshot takes the roots to serve rather than reading Graph::roots itself. Nothing is ever removed from a Graph, so retention is a policy only the host can hold; hive-c0re passes visible_roots(), which is the existing MAX_HISTORY_DAGS bound selected structurally (a root is a node with no parent) instead of by node kind.
16 lines
856 B
Markdown
16 lines
856 B
Markdown
# hive-jobq-wire
|
|
|
|
Wire types for serving a [`hive-jobq`](../hive-jobq) graph to a viewer, plus
|
|
the traits a host implements to say how its graph renders.
|
|
|
|
**Why this is not part of `hive-jobq`.** The scheduler crate is logic: a graph,
|
|
a resource pool, a run loop. Presentation is a different concern with a
|
|
different audience, and folding it in means every consumer of the scheduler
|
|
also carries a JSON vocabulary it may never serve — the two get remixed and
|
|
stay that way. A separate crate keeps that boundary where it can be seen.
|
|
|
|
A host implements `WireNode` for its node payload `N` and `WireResource` for
|
|
its resource name `R`. `GraphWire::wire_snapshot` is then blanket-implemented
|
|
for `hive_jobq::Graph<N, R>` — so the projection exists exactly when both types
|
|
have said how they render, and a payload that hasn't cannot reach a viewer at
|
|
all.
|