# Data Center Cabling Challenge — builder instructions

## Start here

Download the simulator ZIP from the challenge page and unzip it. No private
repository access is needed. The archive includes the simulator source, all four
level scenes, runtime pins, policy template and training tools. Source snapshot:
`b31c816` (see SOURCE.json for the full commit and per-file hashes).

This is a development simulator candidate, not a calibrated hardware model.
Full Level 2–4 demonstrations and final-source qualification remain unfinished.
Submitted uploads are entries for review; they are not automatically official
leaderboard scores or evidence of real-world transfer.

## 1. Set up

Use Linux x86_64, an RTX GPU with 24 GB VRAM (4090 class), and 100 GB free on
persistent POSIX storage. macOS can run CPU interface checks, not Isaac Sim.
Runtime pins: Isaac Lab 3.0 EA, Isaac Sim 6.1, Python 3.12. Keep runtime.lock.json.

In the extracted folder, initialize a local Git snapshot. The simulator uses Git
for run provenance; this does not connect to or publish any repository:

```bash
cd him-cabling-sim-b31c816
git init
git add .
git -c user.name="Arena builder" -c user.email="builder@localhost" commit -m "Simulator snapshot b31c816"
./arena doctor
```

Review NVIDIA's license before accepting it:
https://docs.omniverse.nvidia.com/platform/latest/common/NVIDIA_Omniverse_License_Agreement.html
Then, on the RTX host:

```bash
./arena install --accept-eula
./arena qualify --include-learning
./arena run --level 1 --steps 100 --record --output outputs/first-look
```

The random policy checks the pipeline; it is not a solution. Open the generated
`outputs/first-look/episode.mp4`. Runtime qualification must pass on your host
before training. No NVIDIA runtime or external vendor assets are bundled.

## 2. Train a learned vision policy

Level 0 is an unscored RJ45 warm-up. The scored levels are:

1. LC: clean, insert, link light, remove.
2. MPO: clean, align the key, insert; push-pull and push-only variants.
3. Transceiver swap: unplug, remove, replace with the right module, reconnect.
4. Ordered run: connect eight labeled hanging cables to assigned ports in order.

```bash
./arena teleop --level 1 --output data/my-demo.h5
./arena train_bc data/my-demo.h5 --output outputs/my-bc
# Or train from interaction:
./arena train_ppo --level 1 --iterations 2000 --output outputs/my-ppo
```

Your policy must learn and use camera images. Joint states and force readings
may supplement vision. Scripted task policies, fixed action sequences and the
organizer diagnostic controller are not valid entries. No ground-truth object
poses, hidden task state, reward or seed may enter the submitted policy.

Implement `reset(obs)` and `act(obs)` in submission_template/policy.py. Inputs
include three 640×480 RGB-D streams, joint position/velocity, gripper opening,
wrist force/torque, target port and elapsed time. Return 14 finite normalized
values in [-1, 1]: six motion values plus one gripper command for each arm.
Keep the supplied JSON-lines server and echoed request IDs. The complete units,
transport and compute contract are in submission_template/README.md.

## 3. Check and package

For a CPU-only interface check, create a Python environment, install the project,
and point ARENA_TEST_PYTHON at it. This does not qualify physics or task success.

```bash
python3 -m venv .venv
.venv/bin/pip install -e .
ARENA_TEST_PYTHON=.venv/bin/python ./arena check_policy --template --output outputs/template-check
```

On a Docker-capable machine, build your image with weights baked in:

```bash
docker build -f submission_template/Dockerfile -t my-cabling-policy .
./arena check_policy --image my-cabling-policy --output outputs/policy-check
```

BC/PPO exports can use the supplied Torch wrapper:

```bash
./arena package_policy outputs/my-bc/actor.pt --image my-cabling-policy --output outputs/my-package
```

On a qualified Docker-capable RTX host:

```bash
./arena eval --image my-cabling-policy --record --output outputs/my-evaluation
```

Ordinary RunPod Pods support trusted training and playback, but generally cannot
run this nested-Docker evaluator. Use `./arena play --trusted-actor` only with
your own trusted export. Keep real outcomes and report failures honestly.
Public development seeds and subset/smoke runs do not establish official scores.

## 4. Submit on Arena

Return to the challenge page, sign in and upload:

- **Project ZIP:** Dockerfile, policy/server code, dependency pins, final weights
  or an immutable downloadable image/model reference with digest, and a README.
  Do not put a multi-gigabyte Docker image tarball in the ZIP. If weights are too
  large, include their download URL and SHA-256 plus exact packaging commands.
- **Result MP4:** real simulator footage of your policy. Maximum 50 MB; ZIP and
  MP4 together must be 100 MB or less. Label simulation footage accurately.
- **README:** supported levels, model and vision inputs, training data, compute,
  source snapshot, exact build/evaluation commands, results and limitations.
  Include compatibility/evaluation reports when available. State any missing
  evidence; an organizer diagnostic does not count as your policy's performance.

Select Data Center Cabling, UR5e and Isaac Lab; upload type is Policy only.
The entry and ZIP are public. Uploaded code stays unreviewed; submitting does
not execute it on a robot or establish an official score. Use the provided
hardware adapter contract for eventual sim2real evaluation; hardware use requires
separate operator approval.

Submission deadlines: Level 1 — November 15, 2026. All four levels — December 31, 2026. The deadline time zones and exact cutoff times will be specified separately.
There is no interest-registration step. Questions: ethan@himrobotics.com.
