# Device Lab harness versions

> How the Device Lab versions its test pages: what harness v1 contains, how its files are hashed, and the change rule its lock file records.

import LabProvenance from '@components/lab/LabProvenance.astro';

The harness is the set of pages loaded on the device during a Device Lab test. It includes the lab app, probe pages, and small installable apps. Each harness version has a lock file that lists its files with their SHA-256 hashes, so you can check whether the bytes a server sends later match the frozen version. The [lab app page](https://openpwa.net/lab/device-tests/) carries `<meta name="robots" content="noindex, nofollow">`.

## Harness v1

[Harness v1](/lab/harness/v1/) is the tree at [/lab/device-tests/](/lab/device-tests/). Its lock file, [lock.json](https://openpwa.net/lab/harness/v1/lock.json), lists 52 files, and [SHA256SUMS.txt](https://openpwa.net/lab/harness/v1/SHA256SUMS.txt) gives one SHA-256 line per file for the bytes `openpwa.net` serves. The iOS 18.6.2 baseline on 2026-10-20 used these pages together with the demo pages. The [study report](https://openpwa.net/research/2026-10-ios18-home-screen-web-apps/data/REPORT.md) records which pages each test used and the hashes of selected files, and notes that `lab.js` changed during the run.

The lab app's [manifest](https://openpwa.net/lab/device-tests/manifest.webmanifest) sets `id`, `start_url` and `scope` to `/lab/device-tests/`, and `lab.js` registers the service worker `sw.js` with that same scope. The Home Screen apps on the test iPhone were installed from these URLs.

## Change rule

`lock.json` marks v1 as frozen in place, with no moves or redirects allowed. A file may change only to fix a privacy or security defect, with a dated erratum. Its `errata` list is empty.

To check the hashes before and after your own run, see [Run Device Lab tests on iPhone and iPad](/lab/guides/iphone-ipad/).

<LabProvenance locale="en" />