Files
hq/00-META/repos.md
T
jschoubben 92e8c74ce4 ADR 0041 and the build handoff for the node host
Building tier 0 forced the question "the one binary installed by hand" had been
carrying unexamined. A TypeScript host needs a runtime present before it runs,
so the thing installed by hand becomes two — and the second must be installed by
the means the host exists to replace.

So the host is a statically linked binary that requires nothing present, written
in Go. Rejected: a runtime installed first, which breaks the property the tier
rests on; and bundling the runtime into the executable, which carries ninety
megabytes to preserve a language choice and puts a young feature at the bottom
of the stack.

The argument that decided it is architectural rather than about taste. 0037
means the host never queries the mesh database and 0039 means it only receives
declarations, so the host shares NO code with any other tier — not a client, not
a schema, not the SDK. The language boundary falls exactly on a boundary that
already exists, and a second language usually costs duplicated logic where here
there is none to duplicate.

§8 gains a scope: it said "TypeScript throughout" when everything was a service
or a surface, and is now scoped to those with tier 0 named. Another sync owed.

Playbook 04 steps 2 and 4: repos.md records mesh-host as existing, the design
takes code: [mesh-host] and status: in-progress.
2026-08-26 00:16:07 +02:00

4.0 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 — contracts shared across tiers
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.