# ADR-v2-150 — Community hardware QA and human research are separate evidence classes

**Status:** Proposed (2026-09-22)  
**Context links:** [[adr-011]], [[adr-v2-145-shared-camera-perception]], [[adr-v2-148-hands-free-composition]], [[adr-v2-149-gaze-calibration-coordinate-space]]

## Context

YazSes needs real-world eye/camera evidence from:
- automated CI;
- synthetic traces;
- contributors running hardware tests on different computers/operating systems;
- repeated sessions;
- future controlled human-participant studies.

The measurements can look superficially similar. A public tester might report:
"40 gaze trials, 35 correct, 2 wrong, 3 fallback." A research participant may produce the same four
numbers.

That does **not** make the two data sources interchangeable.

A public GitHub issue:
- is visible under a GitHub identity;
- was primarily submitted for engineering QA;
- may not contain the information/consent process required for research;
- may persist in mirrors/archives;
- is not an appropriate place to store consent records/contact mappings.

Retroactively treating a public bug/test report as a research participant record creates a purpose,
privacy and ethics mismatch.

At the same time, requiring formal study enrollment for every volunteer hardware smoke test would make
ordinary open-source validation unnecessarily difficult.

## Decision

YazSes uses explicit evidence classes and a machine-readable `study_mode`.

Required modes:

- `ci` — automated software/platform evidence;
- `synthetic` — generated/replayed non-human traces;
- `community_qa` — human-operated engineering validation submitted outside a research protocol;
- `research` — data collected under a named/versioned research protocol after the applicable
  ethics/review determination and participant information/consent.

### Rule 1 — Community QA is not research by default

A public GitHub report is `community_qa`.

It may be used to:
- reproduce bugs;
- validate hardware/OS support;
- identify failure modes;
- prioritize engineering;
- describe community testing coverage in a non-participant engineering sense.

It is not silently inserted into participant-level paper analyses.

### Rule 2 — Research mode requires a protocol identifier

A result may be `research` only when it carries a named/versioned protocol ID and was collected
under that protocol.

Changing the JSON enum after collection is not a consent mechanism.

### Rule 3 — Interested community testers enroll separately

A public tester may say "I am willing to be contacted about future research."

That does not change the existing report from QA to research. If the tester later participates, a new
research session is collected under the research protocol.

### Rule 4 — Raw face/screen/audio data is not part of standard community QA

Default community testing shares derived metrics/provenance only.

The standard report must not request:
- raw webcam frames/video;
- detailed face mesh/eye imagery;
- private desktop recordings/screenshots;
- private dictated text/audio;
- diagnosis/medical records;
- device serials/secrets.

A future study that genuinely requires raw sensor data needs a separate decision/protocol/storage and
consent plan.

### Rule 5 — Public issue identity never enters the research analysis dataset

Research uses random participant/session IDs.

If a contact-to-participant mapping is required, it is private and separate from measurements.
GitHub username/email is not a paper analysis identifier.

### Rule 6 — Paper evidence declares its source class

Tables/analysis pipelines know whether inputs are:
- CI;
- synthetic;
- community QA;
- research.

Research analysis refuses community QA rows by default.

### Rule 7 — Human research is a pre-collection gate

Before collecting publication-intended human-participant data:
- the responsible research environment/institution determines the applicable ethics/review process;
- the protocol, measures, exclusions and analysis are versioned;
- participant information/consent is finalized;
- data sharing/retention/withdrawal are defined.

This happens before recruitment/data collection, not retroactively while writing the paper.

## Alternatives considered

### Treat every hardware report as consent to use the numbers in a paper

Rejected. Contribution to an open-source QA issue and participation in research are different
purposes and expectations.

### Require research enrollment for every community hardware test

Rejected. It would make ordinary engineering validation too difficult and unnecessarily collect
participant-process data.

### Allow an analysis script to choose how to classify old reports

Rejected. Source class is a fact about how/why data was collected and must travel with the artifact.

### Collect raw video "just in case" for future analysis

Rejected. It increases privacy/re-identification risk and storage burden without being necessary for
the current reliability metrics.

## Consequences

Positive:
- non-experts can contribute hardware evidence safely;
- paper data has a defensible provenance/consent boundary;
- analysis scripts can prevent accidental source mixing;
- the project does not need to centralize raw face data;
- withdrawal/research records remain separate from public issue history.

Costs:
- some community QA cannot be repurposed later as participant evidence;
- a future paper requires a separate study/recruitment process;
- result schema and tooling must carry `study_mode` + protocol metadata.

## Implementation

See:
- `design/eye-control/EVALUATION.md`;
- `design/eye-control/METRICS.md`;
- `design/eye-control/DATA_SHARING.md`;
- `design/eye-control/PAPER_EVIDENCE.md`;
- #421–#427;
- public hardware slots #428–#437.

