Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ jobs:
- name: Check out repository
uses: actions/checkout@v5

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: tools/lint/go.mod

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,7 @@ images/
videos/
changelog/

node_modules/
node_modules/

# lint compiled binary
tools/lint/lint
2 changes: 1 addition & 1 deletion docs/admin/users/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,6 @@
| `suspended` | User's access was revoked by an admin |
| `left` | User has left the workspace |

Only `active` users can log in and access workspace resources. `suspended` and `left` users exist solely for auditing purposes--they cannot log in to the workspace or access any resources.
Only `active` users can log in and access workspace resources. `suspended` and `left` users exist solely for auditing purposesthey cannot log in to the workspace or access any resources.

Users who have been suspended or left can be reinvited to the workspace at any time by an admin via [invites](/docs/admin/users/invites#send-an-invite).

Check warning on line 84 in docs/admin/users/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/admin/users/overview.mdx#L84

Did you really mean 'reinvited'?
2 changes: 1 addition & 1 deletion docs/changelogs/agent.mdx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
title: "Agent"
mode: "center"
description: "Changelog and migration steps for the Miru Agent"

Check warning on line 4 in docs/changelogs/agent.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/changelogs/agent.mdx#L4

Did you really mean 'Miru'?
---

# v0.7.0

*March 13, 2026*

`v0.7.0` upgrades the Miru Agent to Device API [v0.2.0](/docs/changelogs/device-api#v0-2-0), adding deployment-pipeline visibility for on-device applications and improving deployment reliability under transient failures.

Check warning on line 11 in docs/changelogs/agent.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/changelogs/agent.mdx#L11

Did you really mean 'Miru'?

[Device API migration guide »](/docs/changelogs/device-api#v0-2-0)

Expand All @@ -18,19 +18,19 @@

## Features

- Deployments are guaranteed to be atomic--all config instances for a deployment are written to the filesystem simultaneously or none of them are
- Deployments are guaranteed to be atomicall config instances for a deployment are written to the filesystem simultaneously or none of them are
- The agent now explicitly tracks `deployed_at` and `archived_at` timestamps on device when deployments are applied
- Config instances deployed to the device's file system are now identical (indents, spacing, etc.) to config instances edited in the config editor

## Improvements

- The agent immediately retries transient network connection errors three times before entering a cooldown period

Check warning on line 27 in docs/changelogs/agent.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/changelogs/agent.mdx#L27

Did you really mean 'cooldown'?
- Improved config instance caching logic to reduce network calls during sync cycles

## Fixes

- Fixed deployment retry logic to eagerly retry failed deployments instead of waiting for the polling interval to expire (occasionally leaving deployments stuck in a `queued` state)
- Fixed deployment cooldown handling so retry windows are reported and cleared correctly

Check warning on line 33 in docs/changelogs/agent.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/changelogs/agent.mdx#L33

Did you really mean 'cooldown'?
- JWT tokens are now redacted from debug outputs

---
Expand Down Expand Up @@ -65,7 +65,7 @@

## Features

- Poor connectivity installations of the Miru Agent are now supported

Check warning on line 68 in docs/changelogs/agent.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/changelogs/agent.mdx#L68

Did you really mean 'Miru'?

---

Expand Down
2 changes: 1 addition & 1 deletion docs/developers/agent/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
title: 'Architecture'
---

The Miru Agent is a background service that keeps your device's configurations in sync with the Miru control plane. This page explains how the agent communicates with the control plane, how deployments reach your device, and what to expect during normal operation, failures, and restarts.

Check warning on line 5 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L5

Did you really mean 'Miru'?

Check warning on line 5 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L5

Did you really mean 'Miru'?

## Communication Protocols

The Miru Agent communicates with the Miru control plane through outbound-only channels. All traffic is initiated by the agent—no inbound ports need to be opened on the device.

Check warning on line 9 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L9

Did you really mean 'Miru'?

Check warning on line 9 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L9

Did you really mean 'Miru'?

```mermaid
flowchart BT
Expand All @@ -23,7 +23,7 @@

### HTTPS

HTTPS delivers the bulk of the functionality between the agent and the control plane. The agent makes REST API calls to the Miru control plane for pulling deployments/configurations, pushing status reports, and managing authentication tokens.

Check warning on line 26 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L26

Did you really mean 'Miru'?

### MQTT over TLS

Expand All @@ -33,9 +33,9 @@

## Sync cycle

At its core, the agent is built around a **sync** cycle--the process of reconciling the device's local state with the control plane's state.
At its core, the agent is built around a **sync** cyclethe process of reconciling the device's local state with the control plane's state.

When the agent performs a sync cycle, it communicates directly with the Miru control plane over HTTPS. MQTT is not used at all in this process.

Check warning on line 38 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L38

Did you really mean 'Miru'?

During a sync cycle, the agent:

Expand Down Expand Up @@ -98,13 +98,13 @@

As a fallback to the above triggers, the agent regularly checks that the local state has been synced within some polling interval. If the local state has not been synced within that interval, the agent triggers a sync cycle for itself.

**4. Restart (systemd)**

Check warning on line 101 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L101

Did you really mean 'systemd'?

As a final fallback, the agent performs an initial sync cycle on startup. If encountering real-time sync issues with the agent, we recommend [restarting](/docs/developers/agent/commands#restart) the agent to manually trigger a sync cycle.

## Deployments

Miru takes a declarative approach to deployments. Each deployment has a [target state](/docs/learn/deployments#target-status) set by the control plane (what should happen) and an [activity state](/docs/learn/deployments#activity-status) tracked by the agent (what has happened).

Check warning on line 107 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L107

Did you really mean 'Miru'?

During each sync, the agent compares these two states and determines the appropriate action to transition a deployment from its current state to its target state.

Expand All @@ -112,15 +112,15 @@

### Atomicity

Miru deployments are **atomic**. That is, when a new deployment replaces an existing one, either all of the new deployment's config instances are written to the filesystem or none of them are.

Check warning on line 115 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L115

Did you really mean 'Miru'?

It is not possible for some of the new deployment's config instances to be written to the file system and others to be skipped.

### Failure and retry

If a deployment fails (for example, due to spotty network connectivity), the agent does not immediately retry. Instead, it enters a cooldown period that grows exponentially with each consecutive failure. This prevents the agent from repeatedly attempting a broken deployment and consuming resources.

Check warning on line 121 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L121

Did you really mean 'cooldown'?

Once the cooldown expires, the agent retries the deployment on the next sync. If the deployment eventually succeeds, the retry state resets and the agent resumes normal operation.

Check warning on line 123 in docs/developers/agent/architecture.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/architecture.mdx#L123

Did you really mean 'cooldown'?

### Offline resilience

Expand Down
6 changes: 3 additions & 3 deletions docs/developers/agent/commands.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
title: 'Commands'
---

The Miru Agent does not (currently) provide a command line interface. However, the agent can be managed using standard `systemd` commands and other standard Linux tools.

Check warning on line 5 in docs/developers/agent/commands.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/commands.mdx#L5

Did you really mean 'Miru'?

The [Miru CLI](/docs/developers/cli/overview) is only for managing Miru resources from your development machine's terminal. Please do not attempt to use the `miru` command to manage the agent.

Check warning on line 7 in docs/developers/agent/commands.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/commands.mdx#L7

Did you really mean 'Miru'?

## Version

Expand All @@ -16,7 +16,7 @@

## Logs

The Miru Agent logs are accessible via [`journalctl`](https://www.freedesktop.org/software/systemd/man/journalctl.html), the standard tool for viewing `systemd` service logs.

Check warning on line 19 in docs/developers/agent/commands.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/commands.mdx#L19

Did you really mean 'Miru'?

### View all

Expand Down Expand Up @@ -70,13 +70,13 @@
```

<Tip>
Combine flags for more targeted output. For example, `journalctl -u miru -f -n 50 --no-pager` will tail the last 50 lines and then follow new entries in real-time.

Check warning on line 73 in docs/developers/agent/commands.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/commands.mdx#L73

Did you really mean 'miru'?
</Tip>


## Systemd

Check warning on line 77 in docs/developers/agent/commands.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/commands.mdx#L77

Did you really mean 'Systemd'?

The Miru Agent runs as a [`systemd`](https://en.wikipedia.org/wiki/Systemd) service named `miru`, allowing you to manage the service using standard `systemctl` commands.

Check warning on line 79 in docs/developers/agent/commands.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/commands.mdx#L79

Did you really mean 'Miru'?

You can find the agent's `systemd` service files on your file system at the following paths:

Expand Down Expand Up @@ -124,7 +124,7 @@

### Stop

`stop` stops the agent while leaving its state intact. Stopping the agent does not [disable](/docs/developers/agent/commands#disable) the agent--it will still automatically start on next system boot.
`stop` stops the agent while leaving its state intact. Stopping the agent does not [disable](/docs/developers/agent/commands#disable) the agentit will still automatically start on next system boot.

Note that stopping the agent will prevent any new deployments from reaching the device until the agent is started again.

Expand Down Expand Up @@ -153,7 +153,7 @@

Disabling the agent prevents it from starting automatically on boot.

This does not immediately [stop](/docs/developers/agent/commands#stop) the agent--it will still run if it is currently running. However, it will not be able to start on next system boot.
This does not immediately [stop](/docs/developers/agent/commands#stop) the agentit will still run if it is currently running. However, it will not be able to start on next system boot.

```bash
systemctl disable miru
Expand All @@ -163,7 +163,7 @@

Enabling the agent allows it to start automatically on boot. This is the default behavior after installation and only needs to be done if the agent has been [disabled](/docs/developers/agent/commands#disable).

Enabling the agent will not immediately start it--it will still need to be [started](/docs/developers/agent/commands#start) manually.
Enabling the agent will not immediately start itit will still need to be [started](/docs/developers/agent/commands#start) manually.

```bash
systemctl enable miru
Expand Down
2 changes: 1 addition & 1 deletion docs/developers/agent/security.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
title: 'Security'
---

The Miru Agent is designed to run with minimal privileges and a restricted system footprint. This page describes the agent's authentication model, authorizations, and the security measures applied at the process, filesystem, network, and credential layers.

Check warning on line 5 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L5

Did you really mean 'Miru'?

## Authentication

Expand All @@ -10,7 +10,7 @@

1. The agent receives a short-lived activation token as part of the [provisioning](/docs/learn/devices/provision) process (either from the dashboard or an API key)
2. The agent generates a 4096-bit RSA key pair on the device
3. The agent sends the public key to the Miru control plane with its activation token

Check warning on line 13 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L13

Did you really mean 'Miru'?
4. The control plane verifies the activation token, stores the public key, and registers the device

```mermaid
Expand All @@ -32,7 +32,7 @@

### Token lifecycle

After activation, the agent authenticates API requests using short-lived JSON Web Tokens (JWTs). The process for obtaining a token works as follows:

Check warning on line 35 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L35

Did you really mean 'JWTs'?

1. The agent prepares a set of claims including its device ID, a unique nonce, and a short expiration window (a few minutes)
2. The agent signs these claims with its private RSA key
Expand Down Expand Up @@ -65,12 +65,12 @@

| File | Permissions | Access |
|------|------------|--------|
| Private key | `0600` | Owner (miru) read/write only |

Check warning on line 68 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L68

Did you really mean 'miru'?
| Public key | `0640` | Owner read/write, group read-only |

All credential files are stored under `/var/lib/miru/auth/`, owned by `miru:miru`. The private key never leaves the device—it is used locally to sign token requests but is never transmitted over the network.

Sensitive values are handled in memory using a secrecy library that minimizes exposure and zeroizes data when it is no longer needed. Tokens are redacted in log output to prevent accidental credential leakage through logs.

Check warning on line 73 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L73

Did you really mean 'zeroizes'?

## Authorizations

Expand All @@ -90,7 +90,7 @@

This prevents lateral access between devices. Even if two devices run the same agent version, each device is isolated to its own control-plane view and assigned configuration state.

## Process sandboxing

Check warning on line 93 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L93

Did you really mean 'sandboxing'?

The agent runs as a [systemd](https://en.wikipedia.org/wiki/Systemd) service with extensive hardening directives that restrict what the process can access, even if the application code is compromised.

Expand All @@ -102,7 +102,7 @@

**No privilege escalation**

`NoNewPrivileges` is enabled, preventing the process from gaining additional privileges through setuid binaries or other mechanisms.

Check warning on line 105 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L105

Did you really mean 'setuid'?

**Filesystem restrictions**

Expand All @@ -118,7 +118,7 @@

**Kernel isolation**

The agent cannot load kernel modules, modify kernel tunables (`/proc/sys`, `/sys`), or alter control groups. Other processes are hidden from the agent's view of `/proc`.

Check warning on line 121 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L121

Did you really mean 'tunables'?

**Device restrictions**

Expand All @@ -126,11 +126,11 @@

**Network restrictions**

The agent can only create Unix domain sockets and IPv4/IPv6 connections. All other socket types (Netlink, packet sockets, etc.) are blocked.

Check warning on line 129 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L129

Did you really mean 'Netlink'?

## Transport security

All communication between the agent and the Miru control plane is encrypted in transit:

Check warning on line 133 in docs/developers/agent/security.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/security.mdx#L133

Did you really mean 'Miru'?

- **HTTPS** — REST API calls use HTTPS with TLS certificate validation
- **MQTT over TLS** — the persistent MQTT connection uses TLS on port 8883 (the standard MQTT over TLS port)
Expand All @@ -143,7 +143,7 @@

## Local API access control

The agent's local REST API is exposed through a Unix domain socket, not a TCP port. It is not possible to access the agent's local API over a network--it is only accessible from processes running on the same device as the agent.
The agent's local REST API is exposed through a Unix domain socket, not a TCP port. It is not possible to access the agent's local API over a networkit is only accessible from processes running on the same device as the agent.

Access is controlled through filesystem permissions:

Expand Down
2 changes: 1 addition & 1 deletion docs/developers/agent/versions.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
import { LinkNewTab } from '/snippets/components/link.jsx';
import { CardNewTab } from '/snippets/components/card.jsx';

The Miru Agent follows [semantic versioning](https://semver.org/) for its releases.

Check warning on line 9 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L9

Did you really mean 'Miru'?

Currently, the Miru Agent is still in beta, signified by the `v0` prefix for its releases. There is no established release cadence for the Miru Agent--features are simply released as soon as they are ready.
Currently, the Miru Agent is still in beta, signified by the `v0` prefix for its releases. There is no established release cadence for the Miru Agentfeatures are simply released as soon as they are ready.

Check warning on line 11 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L11

Did you really mean 'Miru'?

Check warning on line 11 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L11

Did you really mean 'Miru'?

## Supported versions

Below are the Miru Agent's versions and their support status

Check warning on line 15 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L15

Did you really mean 'Miru'?

| Version | Released | Status |
|-------------|--------------|---------------------|
Expand All @@ -22,7 +22,7 @@
| `v0.4.x` | 2025-08-18 | <EndOfLifeBadge /> |


You can find the Miru Agent's changelog and the full list of releases by following the links below.

Check warning on line 25 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L25

Did you really mean 'Miru'?

<Columns cols={2}>

Expand All @@ -32,7 +32,7 @@
icon="scroll-text"
arrow
>
Release notes for each Miru Agent release.

Check warning on line 35 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L35

Did you really mean 'Miru'?
</CardNewTab>

<Card
Expand All @@ -40,7 +40,7 @@
icon="github"
href="https://github.com/mirurobotics/agent/releases"
>
Full list of Miru Agent releases on GitHub.

Check warning on line 43 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L43

Did you really mean 'Miru'?
</Card>

</Columns>
Expand Down Expand Up @@ -69,7 +69,7 @@

## Support policy

Miru provides three levels of support for the Miru Agent

Check warning on line 72 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L72

Did you really mean 'Miru'?

Check warning on line 72 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L72

Did you really mean 'Miru'?

- Supported
- Deprecated
Expand All @@ -84,15 +84,15 @@
When a new agent version is released, previous versions may enter a deprecation period. During this period:

- The deprecated agent continues to function normally
- No new features or non-critical bug fixes will be backported

Check warning on line 87 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L87

Did you really mean 'backported'?
- Security patches may still be applied at Miru's discretion

Check warning on line 88 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L88

Did you really mean 'Miru's'?

### End of life

After the deprecation period, an agent version reaches **end-of-life**. End-of-life agents may lose server compatibility and should not be used. For example, the Miru backend may stop supporting the protocol version they use, causing syncs to fail.

Check warning on line 92 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L92

Did you really mean 'Miru'?

### Deprecation notice

Since the Miru Agent is still in beta, a fixed support schedule for beta releases is not established.

Check warning on line 96 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L96

Did you really mean 'Miru'?

Nonetheless, we are committed to ensuring that all users are migrated to a supported version before sunsetting an agent version. Reasonable notice will be provided before deprecating and sunsetting any agent versions.

Check warning on line 98 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L98

Did you really mean 'sunsetting'?

Check warning on line 98 in docs/developers/agent/versions.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/agent/versions.mdx#L98

Did you really mean 'sunsetting'?
2 changes: 1 addition & 1 deletion docs/developers/device-api/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

import DeviceAPICard from '/snippets/references/device-api/card.mdx';

The Miru Device API is a REST API for programmatically interacting with the Miru Agent from an application running on the same device as the agent.

Check warning on line 7 in docs/developers/device-api/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/overview.mdx#L7

Did you really mean 'Miru'?

Check warning on line 7 in docs/developers/device-api/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/overview.mdx#L7

Did you really mean 'Miru'?

The Device API is not available over the internet--it is only accessible from the device running the Miru Agent. It is useful for manually refreshing configurations, retrieving current configurations, and checking agent status from applications running on your devices.
The Device API is not available over the internetit is only accessible from the device running the Miru Agent. It is useful for manually refreshing configurations, retrieving current configurations, and checking agent status from applications running on your devices.

Check warning on line 9 in docs/developers/device-api/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/overview.mdx#L9

Did you really mean 'Miru'?

The Device API is distinct from the Miru [Platform API](/docs/developers/platform-api/overview), which is a REST API for backend services and CI/CD pipelines to manage Miru resources.

Check warning on line 11 in docs/developers/device-api/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/overview.mdx#L11

Did you really mean 'Miru'?

Check warning on line 11 in docs/developers/device-api/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/overview.mdx#L11

Did you really mean 'Miru'?

To get started, continue to the [Authentication](/docs/developers/device-api/authn) page to learn how requests are authenticated. For a complete reference of all available API endpoints, visit the Device API Reference.

Expand Down
6 changes: 3 additions & 3 deletions docs/developers/device-api/versioning.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

The Device API adheres to [semantic versioning](https://semver.org/), which was chosen so that on-device applications can easily determine API version compatibility.

The Device API is currently in beta, signified by the `v0` prefix. There is no established release cadence for the Device API--features are simply released as soon as they are ready.
The Device API is currently in beta, signified by the `v0` prefix. There is no established release cadence for the Device APIfeatures are simply released as soon as they are ready.

## URL format

Expand All @@ -19,9 +19,9 @@

Beta releases use breaking change aliases that include the major and minor version numbers (e.g. `v0.2`, `v0.3`, etc.). Stable releases use breaking change aliases that include the major version number only (e.g. `v1`, `v2`, etc.).

Miru uses stable URL version aliases so clients can target a compatibility track. Targeting a fully specified version (e.g. `v0.1.0`) is not supported.

Check warning on line 22 in docs/developers/device-api/versioning.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/versioning.mdx#L22

Did you really mean 'Miru'?

| Semver release line | Breaking change alias | URL format |

Check warning on line 24 in docs/developers/device-api/versioning.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/versioning.mdx#L24

Did you really mean 'Semver'?
|---------------------|-----------------------|--------------------------|
| `v0.1.x` | `v1` (legacy) | `http://localhost/v1/` |
| `v0.2.x` | `v0.2` | `http://localhost/v0.2/` |
Expand All @@ -34,7 +34,7 @@

## Agent compatibility matrix

Each Miru Agent is compiled with a set of one or more API versions, which is documented in the following table:

Check warning on line 37 in docs/developers/device-api/versioning.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/versioning.mdx#L37

Did you really mean 'Miru'?

| Agent Version | API Version(s) |
|----------------|----------------|
Expand All @@ -48,9 +48,9 @@

## Supported versions

The Device API does not have its own support policy--its support is inherited from the Miru Agent.
The Device API does not have its own support policyits support is inherited from the Miru Agent.

Check warning on line 51 in docs/developers/device-api/versioning.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/versioning.mdx#L51

Did you really mean 'Miru'?

If a supported Miru Agent uses an API version, that API version is supported. You can find the supported Miru Agent versions on the [Agent Versions](/docs/developers/agent/versions) page.

Check warning on line 53 in docs/developers/device-api/versioning.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/versioning.mdx#L53

Did you really mean 'Miru'?

Check warning on line 53 in docs/developers/device-api/versioning.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/developers/device-api/versioning.mdx#L53

Did you really mean 'Miru'?

Below is a list of the currently supported versions:

Expand Down Expand Up @@ -86,7 +86,7 @@

After **stable** (`v1.0`+)
- Major version bumps (e.g. `v1.x` to `v2.0`) may include breaking changes
- Minor version bumps (e.g. `v1.0` to `v1.1`) are additive only--no breaking changes
- Minor version bumps (e.g. `v1.0` to `v1.1`) are additive onlyno breaking changes

### Breaking changes

Expand Down
2 changes: 1 addition & 1 deletion docs/getting-started/quick-start/create-release.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@

## Create the config types

To be able to push the schemas to Miru, we must first create config types to house them. We'll start with the `Mobility` config type.

Check warning on line 52 in docs/getting-started/quick-start/create-release.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/getting-started/quick-start/create-release.mdx#L52

Did you really mean 'Miru'?

Navigate to the [config types page](https://app.mirurobotics.com/configs).

Expand All @@ -63,7 +63,7 @@
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/config-types/create-dialog.png)
</Frame>

The provided slug is a unique identifier for the config type--it's how the CLI determines which config type a schema belongs to. As such, config schemas _must_ be annotated with the slug of the config type to which they belong.
The provided slug is a unique identifier for the config typeit's how the CLI determines which config type a schema belongs to. As such, config schemas _must_ be annotated with the slug of the config type to which they belong.

<CodeGroup>

Expand All @@ -85,7 +85,7 @@

## Set up the CLI

Next, we'll install the CLI—the primary method of creating releases in Miru.

Check warning on line 88 in docs/getting-started/quick-start/create-release.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/getting-started/quick-start/create-release.mdx#L88

Did you really mean 'Miru'?

Creating releases via the CLI is a deliberate design choice. We believe a release's schemas should live in a Git repository. This allows them to be versioned alongside the code that uses them and encourages better software development practices.

Expand All @@ -101,7 +101,7 @@

## Create a release

With the CLI setup, we are ready to create a release in Miru.

Check warning on line 104 in docs/getting-started/quick-start/create-release.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/getting-started/quick-start/create-release.mdx#L104

Did you really mean 'Miru'?

Navigate to the root of the [getting-started](https://github.com/mirurobotics/getting-started) repository and create the release with a schema set of your choice.

Expand Down Expand Up @@ -168,7 +168,7 @@
Git metadata is pulled from the local Git repository that the schemas are defined in.
</Info>

To view the release in Miru, navigate to the [releases page](https://app.mirurobotics.com/releases) and click into the release.

Check warning on line 171 in docs/getting-started/quick-start/create-release.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/getting-started/quick-start/create-release.mdx#L171

Did you really mean 'Miru'?

<Frame>
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/releases/page.png)
Expand Down
6 changes: 3 additions & 3 deletions docs/learn/deployments.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@

**Release Staging**

Staging a deployment is the process of creating a new deployment in a release's [staging area](/docs/learn/releases/staging-area) to be deployed in the future. Staging is primarily used to rollout a new release, providing an unobtrusive place to create and review deployments before being deployed to devices.

Check warning on line 118 in docs/learn/deployments.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/deployments.mdx#L118

Did you really mean 'rollout'?

A release's staging area is also useful for batch operations. Deployments can be created, deployed, and archived in bulk, which helps manage large numbers of deployments at once.

Expand Down Expand Up @@ -167,13 +167,13 @@

Once a deployment's target status has been set to `deployed`, it can never be set to `staged` again. Similarly, once a deployment's target status has been set to `archived`, it can never be set to `deployed` again.

This is intentional--deployments are one-time use. Once a deployment has been deployed, it cannot be redeployed. You must create a new deployment with identical content to roll back.
This is intentionaldeployments are one-time use. Once a deployment has been deployed, it cannot be redeployed. You must create a new deployment with identical content to roll back.

## Activity Status

The activity status is the _last known_ state of a deployment.

We use _the last known state_ intentionally -- poor network connectivity can prevent devices from immediately syncing their activity state with the cloud. In practice, this isn't too common. However, it's still a critical point to keep in mind.
We use _the last known state_ intentionallypoor network connectivity can prevent devices from immediately syncing their activity state with the cloud. In practice, this isn't too common. However, it's still a critical point to keep in mind.

There are five possible activity states for a deployment.

Expand All @@ -189,7 +189,7 @@

When a deployment is [staged](/docs/learn/releases/staging-area) before being deployed, its lifecycle has two phases: a **review phase** and a **deployment phase**.

During the review phase, a staged deployment may [drift](/docs/learn/releases/staging-area#deployment-drift) if the underlying release changes. A drifted deployment transitions to `drifted` and must either be restaged or archived.

Check warning on line 192 in docs/learn/deployments.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/deployments.mdx#L192

Did you really mean 'restaged'?

```mermaid
flowchart LR
Expand Down Expand Up @@ -234,7 +234,7 @@

## Error Status

The error status is the _last known_ error state of a deployment. Again, we use _the last known state_ intentionally -- poor network connectivity can prevent devices from immediately syncing their error state to the cloud.
The error status is the _last known_ error state of a deployment. Again, we use _the last known state_ intentionallypoor network connectivity can prevent devices from immediately syncing their error state to the cloud.

The error status is independent of the activity and target statuses. The error status does not imply any particular activity or target state, and vice versa. The error status is only concerned with errors encountered during deployment.

Expand Down Expand Up @@ -267,7 +267,7 @@

If the agent recovers the deployment from the error, the deployment transitions back to the `none` error state once the deployment's target status is reached.

On the other hand, as long as the agent is unable to recover the deployment, the deployment remains in the `retrying` error state. The agent continually attempts to reach the deployment's target status, using exponential backoff to prevent resource throttling.

Check warning on line 270 in docs/learn/deployments.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/deployments.mdx#L270

Did you really mean 'backoff'?

If the deployment is stuck in the `retrying` error state, try replacing or archiving the deployment to allow the agent to start fresh.

Expand Down
2 changes: 1 addition & 1 deletion docs/learn/devices/deployment-history.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ To view the details of any config instances in the deployment, click into the co
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/deployments/deployed-panel:configurations.png)
</Frame>

The content tab shows the config instance's parameters , while the metadata tab contains audit information--the author, creation date, description, etc.
The content tab shows the config instance's parameters , while the metadata tab contains audit informationthe author, creation date, description, etc.

<Tabs>
<Tab title="Content">
Expand Down
2 changes: 1 addition & 1 deletion docs/learn/devices/manage.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,14 @@

## Reactivate a device

Reactivating a device is the process of reinstalling the Miru Agent on a device that was previously activated. Reactivating a device:

Check warning on line 50 in docs/learn/devices/manage.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/manage.mdx#L50

Did you really mean 'Miru'?

1. Invalidates the device's current authentication session
2. Creates a new authentication session for the device
3. Resets the Miru Agent to a clean state

Check warning on line 54 in docs/learn/devices/manage.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/manage.mdx#L54

Did you really mean 'Miru'?
4. Recreates the device's current deployments

Reactivating a device resets the Miru Agent to a clean state while preserving the device's full deployment history.

Check warning on line 57 in docs/learn/devices/manage.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/manage.mdx#L57

Did you really mean 'Miru'?

**Dashboard**

Expand Down Expand Up @@ -88,7 +88,7 @@
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/devices/ellipses-dropdown.png)
</Frame>

A confirmation dialog will appear--click **Delete** to confirm.
A confirmation dialog will appearclick **Delete** to confirm.

<Frame>
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/devices/delete-dialog.png)
Expand Down
2 changes: 1 addition & 1 deletion docs/learn/devices/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

<NullableBadge />

The version of the Miru Agent running on the device.

Check warning on line 45 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L45

Did you really mean 'Miru'?

The agent version exists only if the device has a status of `online` or `offline`. If the device is `inactive` or `activating`, the agent version is `null`.

Expand All @@ -63,32 +63,32 @@
Examples: `rls_123`
</ParamField>

## Miru Agent

Check warning on line 66 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L66

Did you really mean 'Miru'?

Configurations are deployed to devices via the [Miru Agent](/docs/developers/agent/overview), a lightweight `systemd` service that runs on your devices, handling the deployment lifecycle of configurations.

The Miru Agent offers the following functionality:

Check warning on line 70 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L70

Did you really mean 'Miru'?

- **Syncs configurations** from the cloud to the local filesystem in real-time
- **Manages device state**, providing real-time updates of the device's status and the currently deployed configurations
- [**Exposes a REST API**](/docs/developers/device-api/overview) over a Unix socket for programmatic access by applications running on the same machine

<Note>
The Miru Agent only supports Linux. Visit the [supported platforms](/docs/developers/agent/overview#supported-platforms) for a complete list of supported platforms.

Check warning on line 77 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L77

Did you really mean 'Miru'?
</Note>

Read more about the agent in the [Miru Agent](/docs/developers/agent/overview) section.

## Status

Devices leverage several states to track their registration and connectivity with the Miru servers.

Check warning on line 84 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L84

Did you really mean 'Miru'?

| Status | Description |
| ------------ | ----------------------------------------------------------- |
| `inactive` | The Miru Agent has not yet been installed and authenticated |

Check warning on line 88 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L88

Did you really mean 'Miru'?
| `activating` | The Miru Agent is registering itself with Miru's servers |

Check warning on line 89 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L89

Did you really mean 'Miru'?

Check warning on line 89 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L89

Did you really mean 'Miru's'?
| `online` | Device is currently connected to Miru's servers |

Check warning on line 90 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L90

Did you really mean 'Miru's'?
| `offline` | Device has lost connection to Miru's servers |

Check warning on line 91 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L91

Did you really mean 'Miru's'?

```mermaid
flowchart LR
Expand All @@ -101,9 +101,9 @@
D ---> C
```

Devices begin in the `inactive` state. During the Miru Agent install process, devices briefly enter the `activating` state before transitioning to `online`.

Check warning on line 104 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L104

Did you really mean 'Miru'?

Once the Miru Agent has been activated on a device, the device remains `online` or `offline` for the remainder of its existence--devices don't transition back to `inactive` or `activating`.
Once the Miru Agent has been activated on a device, the device remains `online` or `offline` for the remainder of its existencedevices don't transition back to `inactive` or `activating`.

Check warning on line 106 in docs/learn/devices/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/devices/overview.mdx#L106

Did you really mean 'Miru'?

The only exception to this is when a device is [reactivated](/docs/learn/devices/manage#reactivate-a-device). During reactivation, devices briefly enter the `activating` state before transitioning back to `online`.

Expand Down
2 changes: 1 addition & 1 deletion docs/learn/releases/deployment-history.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ To view the details of any config instances in the deployment, click into the co
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/deployments/deployed-panel:configurations.png)
</Frame>

The content tab contains the config instance's parameters, while the metadata tab contains audit information--the author, creation date, description, etc.
The content tab contains the config instance's parameters, while the metadata tab contains audit informationthe author, creation date, description, etc.

<Tabs>
<Tab title="Content">
Expand Down
8 changes: 4 additions & 4 deletions docs/learn/releases/staging-area.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
## Overview

The staging area for a release is where deployments are created in preparation for a
future rollout. The staging area only contains staged deployments. Currently deployed

Check warning on line 12 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L12

Did you really mean 'rollout'?
and previously deployed deployments are not accessible in the staging area.

Deployments in the staging area can be created freely _before_ being deployed to
Expand Down Expand Up @@ -64,7 +64,7 @@
<Note>
Some devices may be unavailable for selection. These devices are already running this
release and cannot be staged from this flow. You can only stage deployments for
devices that are running a _different release_.

Check warning on line 67 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L67

Did you really mean '_different'?

Check warning on line 67 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L67

Did you really mean 'release_'?
</Note>

After selecting a device, the release editor opens. The editor is pre-filled with the
Expand All @@ -89,7 +89,7 @@
![](https://assets.mirurobotics.com/docs/v03/images/releases/stage/stage-dialog.png)
</Frame>

Miru will return you to the staging area, where the new staged deployment appears in the

Check warning on line 92 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L92

Did you really mean 'Miru'?
list for the selected device.

<Frame>
Expand All @@ -114,7 +114,7 @@
</Frame>

The content tab contains the config instance's parameters, while the metadata tab
contains audit information--the author, creation date, description, etc.
contains audit informationthe author, creation date, description, etc.

<Tabs>
<Tab title="Content">
Expand Down Expand Up @@ -154,7 +154,7 @@
A dialog will appear asking for a description. Enter a description, then click
**Stage**.

After staging, Miru returns you to the staging area, where the updated staged deployment

Check warning on line 157 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L157

Did you really mean 'Miru'?
appears in the list.

## Archive a deployment
Expand All @@ -173,7 +173,7 @@
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/releases/stage/ellipses-dropdown:staged.png)
</Frame>

A confirmation dialog will appear--hit **Archive** to confirm.
A confirmation dialog will appearhit **Archive** to confirm.

<Frame>
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/releases/stage/archive-dialog:single.png)
Expand All @@ -194,7 +194,7 @@
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/releases/stage/bulk-actions.png)
</Frame>

A confirmation dialog will appear--hit **Archive** to confirm.
A confirmation dialog will appearhit **Archive** to confirm.

<Frame>
![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/releases/stage/archive-dialog:bulk.png)
Expand Down Expand Up @@ -234,13 +234,13 @@

Consider the following example:

![Miru UI screenshot](https://assets.mirurobotics.com/docs/v03/images/deployments/deployment-drift.png)

Check warning on line 237 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L237

Did you really mean 'Miru'?
Our device is currently running deployment `DPL-Npfzv`, which adheres to release `v1.5`.
Our device is about to be upgraded to release `v1.6` though, so we've staged deployment
`DPL-Q4CeX` for the upcoming upgrade.

However, before the upgrade occurs, our device receives some configuration updates on
release `v1.5`--`DPL-Npfzv` is patched with `DPL-BFwc3`. Since it's often the case that
release `v1.5``DPL-Npfzv` is patched with `DPL-BFwc3`. Since it's often the case that
this patch also needs to be applied to the staged deployment `DPL-Q4CeX`, we say
`DPL-Q4CeX` has _drifted_.

Expand All @@ -249,7 +249,7 @@
staged deployment.

The concept of deployment drift ensures that configuration changes aren't lost during
migrations between releases, preventing misconfigurations.

Check warning on line 252 in docs/learn/releases/staging-area.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/releases/staging-area.mdx#L252

Did you really mean 'misconfigurations'?

## Review a deployment

Expand Down
8 changes: 4 additions & 4 deletions docs/learn/schemas/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -43,15 +43,15 @@

The raw schema definition, written in the specified schema language.

The exact contents of a schema file is preserved in Miru, including any comments, whitespace, and formatting.

Check warning on line 46 in docs/learn/schemas/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/schemas/overview.mdx#L46

Did you really mean 'Miru'?
</ParamField>

<ParamField path="digest" type="string">
<ImmutableBadge />

A hash of the canonicalized schema content.

Check warning on line 52 in docs/learn/schemas/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/schemas/overview.mdx#L52

Did you really mean 'canonicalized'?

Digests are computed by converting schemas to a canonical format--a format that ignores whitespace, comments, and other non-semantic differences--and then hashing the result. This is useful for comparing schemas and detecting duplicates.
Digests are computed by converting schemas to a canonical formata format that ignores whitespace, comments, and other non-semantic differencesand then hashing the result. This is useful for comparing schemas and detecting duplicates.

Examples: `sha256:45YeoJJ2btBnAKQztAEXEjHsqyyQfC1z1Mw3LLM4xMUy`
</ParamField>
Expand All @@ -76,9 +76,9 @@

## Schema languages

Config schemas are defined using a schema language--a formal language for describing the structure, constraints, and data types of a configuration.
Config schemas are defined using a schema languagea formal language for describing the structure, constraints, and data types of a configuration.

Miru supports:

Check warning on line 81 in docs/learn/schemas/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/schemas/overview.mdx#L81

Did you really mean 'Miru'?

- [JSON Schema](https://json-schema.org/draft/2020-12) (draft 2020-12)
- [CUE](https://cuelang.org/)
Expand Down Expand Up @@ -146,7 +146,7 @@
- Names the available properties
- Organizes the configuration structure, placing some properties at the root while nesting other properties into logical groups
- Gives each property a type, such as `number`, `boolean`, etc.
- Constrains the values of each property--minimums, maximums, enumerations, etc.
- Constrains the values of each propertyminimums, maximums, enumerations, etc.
- Supplies default values to properties where appropriate

Most of these constraints are optional, and many features of JSON Schema are omitted here, but this gives you a flavor of what schemas are capable of.
Expand All @@ -173,13 +173,13 @@

This time, the config instance successfully validates against the schema and is deployed to the device.

Although simple in concept, schemas are a powerful tool for preventing typos, misconfigurations, and other preventable errors.

Check warning on line 176 in docs/learn/schemas/overview.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

docs/learn/schemas/overview.mdx#L176

Did you really mean 'misconfigurations'?

## Empty schemas

While schemas provide significant value in production deployments, defining one from scratch can be a considerable undertaking.

Many teams find it best to begin with an empty schema--one that accepts any configuration--and gradually add constraints. This approach allows you to define the most highly valued constraints first and progressively transition to stricter and stricter schemas as needed.
Many teams find it best to begin with an empty schemaone that accepts any configurationand gradually add constraints. This approach allows you to define the most highly valued constraints first and progressively transition to stricter and stricter schemas as needed.

Below are the empty schemas for JSON Schema and CUE, respectively.

Expand Down
9 changes: 9 additions & 0 deletions scripts/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ if ! command -v pnpm >/dev/null 2>&1; then
exit 1
fi

if ! command -v go >/dev/null 2>&1; then
echo "go is required for MDX prose linting. Install Go and rerun ./scripts/lint.sh." >&2
exit 1
fi

cd "${repo_root}"

collect_files() {
Expand Down Expand Up @@ -56,6 +61,10 @@ if [[ ${#openapi_targets[@]} -eq 0 ]]; then
exit 1
fi

echo "== MDX Prose =="
(cd "${repo_root}/tools/lint" && go build -o lint .)
"${repo_root}/tools/lint/lint" "${mdx_targets[@]}"

echo "== ESLint (MDX) =="
pnpm exec eslint --max-warnings=0 "${mdx_targets[@]}"

Expand Down
2 changes: 1 addition & 1 deletion snippets/definitions/release.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
A **release** is a version of software and its compatible config schemas.

Within a fleet of robots, multiple software versions may be deployed -- each release defines which config schemas are valid for that version.
Within a fleet of robots, multiple software versions may be deployedeach release defines which config schemas are valid for that version.

For example, software release `v1.7.0` might specify the following schemas:

Expand Down
2 changes: 1 addition & 1 deletion snippets/references/cli/releases/create/cue-packages.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[CUE](/docs/learn/schemas/languages/cue) supports the concept of a [package](https://cuelang.org/docs/tour/packages/packages/)—a way to spread a schema's definition across multiple files.

Check warning on line 1 in snippets/references/cli/releases/create/cue-packages.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

snippets/references/cli/releases/create/cue-packages.mdx#L1

Did you really mean 'schema's'?

For example, say we have a `communication` schema which contains the following files:

Expand All @@ -9,13 +9,13 @@
<Tree.File name="main.cue" />
</Tree.Folder>

Each file defines a portion of the schema, which is then aggregated by the `main.cue` file to define the schema. Miru fully supports CUE packages, treating the `communication` directory as a single schema.

Check warning on line 12 in snippets/references/cli/releases/create/cue-packages.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

snippets/references/cli/releases/create/cue-packages.mdx#L12

Did you really mean 'Miru'?

**Identifying packages**

The Miru CLI automatically identifies CUE packages for you when creating a release using the `package` clause at the top of each schema file (as described in the [CUE documentation](https://cuelang.org/docs/tour/packages/packages/)).

Check warning on line 16 in snippets/references/cli/releases/create/cue-packages.mdx

View check run for this annotation

Mintlify / Mintlify Validation (miru) - vale-spellcheck

snippets/references/cli/releases/create/cue-packages.mdx#L16

Did you really mean 'Miru'?

You don't need to explicitly specify the package in the CLI command--just provide the path to the package directory or to the individual schema files within the package.
You don't need to explicitly specify the package in the CLI commandjust provide the path to the package directory or to the individual schema files within the package.

**Annotations**

Expand Down
3 changes: 3 additions & 0 deletions tools/lint/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/mirurobotics/docs/tools/lint

go 1.24
Loading
Loading