# ADR 0002: NODEDC MISSION CORE monorepo

- Status: accepted
- Date: 2026-07-16

## Context

The repository began as a focused XGRIDS/LixelKity K1 connector and then gained
a vendor-neutral control-station shell, local control plane, replay runtime, and
embedded spatial viewer. The K1 vertical is proven on real hardware, but its
names and implementation are still coupled to the host.

## Decision

The product, repository, and local root are named NODEDC MISSION CORE. The
canonical Git path is `SILVER/NODEDC_MISSION_CORE`, and the local checkout is
`NODEDC_MISSION_CORE`.

Mission Core remains one monorepo while the first plugin contract stabilizes:

```text
apps/control-station/       browser operator application
packages/plugin-sdk/        shared plugin contracts and host interfaces
plugins/xgrids-k1/          XGRIDS/LixelKity K1 device plugin
src/k1link/                 transitional compatibility implementation
docs/                       architecture, runbooks, ADRs, and redacted evidence
```

An independent plugin does not require an independent Git repository at this
stage. The XGRIDS plugin must have an explicit package/runtime boundary,
manifest, capabilities, tests, and no ownership of Mission Core navigation.
It can be split into another repository later without changing host contracts.

The Rerun integration is a replaceable presentation adapter. It is not the
Mission Core data bus, session database, or device protocol.

## Compatibility boundary

The rename does not alter these proven interfaces:

- Python import namespace and CLI `k1link`;
- native `.k1mqtt` framing and `K1MQTT` magic;
- provisioning profile `xgrids-k1-fw3-wifi-v1`;
- K1 MQTT topics and firmware-scoped protobuf/LZ4 codecs;
- wire-level `k1_ip` and metric values (their frontend type/hook names may move
  behind the plugin boundary; see ADR 0003);
- schema v1 `$id`, which remains an immutable legacy identifier.

Those names move or change only during the plugin-extraction milestone with
explicit migration and regression tests.

## Consequences

- Product branding, repository metadata, frontend application path, API title,
  and Rerun recording identity use Mission Core naming now.
- The existing K1 implementation remains operational while contracts are
  extracted incrementally.
- Core must eventually boot without the XGRIDS plugin.
- An invalid installed manifest, missing factory, or manifest/runtime drift fails
  startup before the host accepts traffic. After successful startup, an action
  failure is isolated to that namespaced plugin request and must not terminate
  the Mission Core host or raw evidence plane.
- A future repository split remains possible after Plugin SDK v1 is stable.
