# QNE Development Network Rollout v00616

This rollout brings seven devices onto the real QNE development network using
the first minimal permanent qne-node runtime. The initial network is node-only:
no user ids and no `users/<base36>` directories are created yet.

## Device Inventory

| Device | Role | Platform | Installer | Startup | Verify |
| --- | --- | --- | --- | --- | --- |
| founder-device | founder/workstation | macOS arm64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-macos-arm64.zip` | LaunchAgent `au.qne.node.v00616` | `launchctl print gui/$(id -u)/au.qne.node.v00616` |
| platform-macos-intel | platform test | macOS x86_64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-macos-x86_64.zip` | LaunchAgent `au.qne.node.v00616` | `launchctl print gui/$(id -u)/au.qne.node.v00616` |
| platform-linux-x86_64 | platform test | Linux x86_64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-linux-x86_64.zip` | user systemd `qne-node-v00616.service` | `systemctl --user status qne-node-v00616.service` |
| platform-windows-x86_64 | platform test | Windows x86_64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-windows-x86_64.zip` | scheduled task `\QNE\QneNodeV00616` | `Get-ScheduledTask -TaskPath \QNE\ -TaskName QneNodeV00616` |
| development-master-0001 | cloud master | Linux x86_64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-linux-x86_64.zip` | user systemd `qne-node-v00616.service` | `systemctl --user status qne-node-v00616.service` |
| development-seed-master-0001 | seed/DHT future | Linux x86_64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-linux-x86_64.zip` | user systemd `qne-node-v00616.service` | `systemctl --user status qne-node-v00616.service` |
| development-skill-repo-0001 | skill/project authority future | Linux x86_64 | `https://qne.info/downloads/dex-network/qne-node-v00616/qne-node-v00616-linux-x86_64.zip` | user systemd `qne-node-v00616.service` | `systemctl --user status qne-node-v00616.service` |

## Shared Layout

```text
~/QNE/
  qne-node/
    persist/
      node-state.toml
      last-presence.json
      contact-status.json
      presence/
      reports/
  runtimes/
    qne-node-v00616/
  users/
  logs/
```

## Acceptance Checks

Run after install on each device:

```sh
~/QNE/runtimes/qne-node-v00616/bin/qne-node status --home ~/QNE/qne-node/persist
~/QNE/runtimes/qne-node-v00616/bin/qne-node report \
  --home ~/QNE/qne-node/persist \
  --device-label DEVICE_LABEL \
  --role DEVICE_ROLE \
  --service-status running \
  --codex-status CODEX_STATUS
```

For the three Hetzner nodes, install with the matching profile:

```text
development-master-0001:      qne-installer install --profile development-master
development-seed-master-0001: qne-installer install --profile development-seed-master
development-skill-repo-0001:  qne-installer install --profile development-skill-repo
```

Each profile creates the base qne-node persist, initializes the expected node
name, and runs the service with the matching role.

The report must contain `qne-development-network`, `last_presence`, and
`contact_status`. A device should not be treated as connected until
`contact_status.ack_count` is greater than zero.

## Codex Check

The Codex bootstrap qneskill only checks runtime presence and local sign-in
status. It never copies credentials:

```sh
qneskill-codex-bootstrap check \
  --device-label DEVICE_LABEL \
  --out ~/QNE/qne-node/persist/reports/DEVICE_LABEL-codex.json
```
