Files
hq/00-META/repos.md
T
jschoubben 50d61398b6 ADR 0044 — what the SDK holds, and what it refuses
Supersedes ADR 0030's 'types, not behaviour' line for mesh-sdk. The
boundary is change-frequency, not kind: the SDK holds the stable spine
(tool-serving harness, messaging/event framework, contracts, core
primitives) and refuses per-module clients, per-module tool code, and
anything volatile — because those are what turned hal/sdk into constant
maintenance and made every edit rebuild every module.

States the rule (frequent AND cascading is the disease), why the root
cause was intra-module feature-sharing leaking into inter-module
coupling, and where per-module shared code lives instead (in the
module — a shared file, or a module-local sdk for the few large ones).
Updates repos.md's canonical mesh-sdk description to match; leaves 0030
untouched (immutable).

Claude-Session: https://claude.ai/code/session_01LrgweAeERJYBg88c5cKDzF
2026-09-03 21:41:08 +02:00

4.2 KiB

status, updated
status updated
canonical 2026-08-23

The Novox repositories

The map of where implementation lives. Humans use it for orientation; agents use it for issue triage (playbook process/03-issues.md). The code: frontmatter field in design documents points at entries here.

Repository names are recorded; hosts, URLs and owners are not — this repository is public, and a forge address is an operational detail (see README).

Repository Owns
hal The monorepo — the node runtime, the module catalogue, the delivery machinery, and the bootstrap scripts. Every core module lives here.
hq This repository, under the company organisation — mission, research, design, decisions, issue diagnosis. Company-scoped (ADR 0028); the mesh is its first product. The source of truth for why. Carries no implementation.
(one per application) Every standalone application, site or side-project gets its own repository, with module.yml at the root. Registered with the mesh as a build source; built and deployed by the same pipeline as anything in the monorepo.

What the mesh becomes

ADR 0030 records the repositories the monorepo decomposes into. mesh-lab and mesh-host exist so far — the lab is built first (ADR 0029); the rest are the target, not the present.

Repository Tier Holds
mesh-host 0 exists. The node host — one statically linked binary, requiring nothing present (ADR 0041)
mesh-substrate 1 the four pinned services, as declarations
mesh-control 2 the control plane and its contexts
mesh-surfaces 3 tools, web, cli
mesh-sdk — the stable spine modules build against — the tool-serving harness, the messaging/event framework, the contracts and core primitives. Holds nothing per-module and nothing volatile (ADR 0044).
mesh-lab — exists. The lab — scenario lifecycle, networking, placement. Ships to nobody; runs on a workstation.

Tier 4's shape is open, and deliberately so: see ADR 0030 and research 005.

What lives where inside the monorepo

Named by role, because the layout is itself part of the as-is design — see 03-DESIGN/00-as-is/.

Area Holds
Module catalogue One directory per module, each with a manifest. Core modules sit under the mesh's own namespace; everything else at the top level.
Node runtime The daemon and interactive runtime that every node runs.
Bootstrap scripts First-node initialisation, joining an existing mesh, and node rescue.
Shared library The SDK every module builds against.
Pipeline test harness End-to-end coverage of the delivery pipeline. Currently unbuildable — see 04-ISSUES/005.

Why applications do not live in the monorepo

A standalone application in the monorepo is a convention violation, and reviewers reject it. The reasoning is recorded in 02-DECISIONS/0010: the mesh installs, provisions for, and ships an application through exactly the same machinery whether or not its source sits beside the mesh's own — so co-location buys nothing and costs the monorepo's review cadence.

There is no npm workspace

Each module is a standalone package that consumes its dependencies from the private registry, not from a sibling directory. The workspace was removed after it caused build-versus-development divergence — a workspace member importing another resolved to local unbuilt source in the pipeline and to a published version in development. Recorded in 02-DECISIONS/0007.

Consequence, and it is a real one: a cross-package change is two steps — publish, then consume — and a repository-wide npm install does not exist.