> ## Documentation Index
> Fetch the complete documentation index at: https://docs.destrier.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Submission

Submit challenge boxes from a **private repository** created from the [Destrier box template](https://github.com/destrierio/boxes-template).

## Before you submit

Make sure the box is complete and ready to reproduce:

| Item        | Requirement                                                                            |
| ----------- | -------------------------------------------------------------------------------------- |
| `box.yaml`  | Valid against the current Destrier box schema.                                         |
| `target/`   | Contains the source and build files required for each source-built host.               |
| `solver/`   | Includes a reference solver that demonstrates the intended solution.                   |
| `README.md` | Documents the scenario, vulnerability, objectives, solve path, and any reviewer notes. |
| Disk images | Included only for approved image-backed hosts, such as a domain controller.            |

You will also need the relevant local tools for your box:

| Tool       | Used for                                                     |
| ---------- | ------------------------------------------------------------ |
| `boxr`     | Validation, builds, submission, and status checks.           |
| Docker     | Building container hosts.                                    |
| Packer     | Building virtual machine hosts from source.                  |
| `qemu-img` | Inspecting or converting image-backed virtual machine disks. |

<Callout icon="" color="#ffffff" iconType="">Keep the repository and all challenge materials private during review and after the competition.</Callout>

## Submit your box

<Steps>
  <Step title="Sign in">
    Authenticate with your Destrier account:

    ```shell theme={null}
    boxr login
    ```
  </Step>

  <Step title="Validate">
    Check the manifest and repository structure before building:

    ```shell theme={null}
    boxr box validate <path>
    ```

    <ParamField path="path" type="string" required>
      Path to the challenge box directory.
    </ParamField>

    Fix any reported errors before continuing.
  </Step>

  <Step title="Build">
    Build the hosts declared by the box:

    ```shell theme={null}
    boxr box build <path>
    ```

    Container hosts are built with **Docker**, while virtual machine hosts are built with **Packer**. Approved image-backed hosts are supplied separately.
  </Step>

  <Step title="Submit">
    Submit the completed box for review:

    ```shell theme={null}
    boxr box submit <path>
    ```

    The command handles the submission and uploads any required image-backed host artifacts.
  </Step>

  <Step title="Check status">
    Track the submission and any associated image uploads:

    ```shell theme={null}
    boxr box status <path>
    ```
  </Step>
</Steps>

Run any command with `--help` to see its available arguments and options:

```shell theme={null}
boxr box build --help
```

For top-level CLI commands and environment variables, see [CLI](/cli).

## Validation

Validation checks both `box.yaml` and the files referenced by it.

| Check                  | What it catches                                                                       |
| ---------------------- | ------------------------------------------------------------------------------------- |
| **Schema**             | Missing or unknown fields, invalid values, and malformed YAML.                        |
| **References**         | Flags, hosts, networks, or entry points that reference objects that do not exist.     |
| **Flag values**        | Missing, malformed, or duplicate static flags.                                        |
| **Run type**           | Host layouts that do not match the declared `container`, `vm`, or `network` run type. |
| **Build inputs**       | Missing or invalid source and image paths.                                            |
| **Network layout**     | Duplicate names, CIDRs or IP addresses, and host IPs outside their assigned network.  |
| **Required structure** | Missing required files or directories, including `solver/`.                           |
| **Identity**           | Duplicate `competitionId/id` pairs used by more than one box.                         |

Local validation uses the **same box rules** checked by **CI**, so resolve any failures before submitting for review.

## Review process

<Steps>
  <Step title="Access">
    Reviewers confirm that the **private repository** and **any required image** artifacts are accessible.
  </Step>

  <Step title="Build and start">
    The declared hosts are built or loaded, the environment starts, and its health checks are verified.
  </Step>

  <Step title="Verify the solve">
    Reviewers inspect or run the reference solver to confirm that the **intended objectives** can be captured.
  </Step>

  <Step title="Calibrate difficulty">
    The submitted category and difficulty are reviewed against the actual environment and solve path.
  </Step>

  <Step title="Accept the box">
    Once approved, that version is locked for use in Destrier. Further changes require a **new version**.
  </Step>
</Steps>

## After acceptance

Accepted boxes may still receive feedback related to stability, fairness, or objective verification. Any changes made after acceptance should be **submitted as a new version**.

If Destrier **pays for the contribution**, a **confidentiality agreement** may also be required. **Do not disclose** the box, solver, flags, write-up, or intended solution **unless Destrier explicitly approves it**.
