cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

fix/website-download-wiring
goq / docs / hardware-uat / README.md
README.md 4.2K rendered
1# Bazzite hardware acceptance23The cross-host claim contract is4[`MATRIX.md`](MATRIX.md). A successful run on one machine establishes only5named reference-host evidence; it does not prove a hardware class or transfer6to another commit. Both required matrix rows must pass the same exact candidate7before unqualified hardware-proof language is allowed.89Matrix pass reports use the structured report, shared candidate-manifest, and10row evidence layout defined by `MATRIX.md`. Run11`scripts/tests/hardware-matrix.sh` before committing a status change. Its12fixture suite rejects incomplete reports, fabricated commits or artifact-set13digests, row/class mismatches, and premature claims in public documentation.1415The repository's hardware acceptance is a two-stage, commit-pinned gate:16171. `.github/workflows/sigil-hardware-uat.yml` builds and inspects an unsigned18 development candidate for one clean commit already on `main`.192. `scripts/run-bazzite-hardware-uat.sh` verifies that artifact and exercises it20 against a live Gamescope PipeWire session on a Bazzite host.2122The runner is intentionally disruptive for the duration of the test. It stops23the installed `sigil-host.service`, runs isolated fixed and native candidates,24then restores the original service. Invocation-specific systemd rollback timers25and a host-wide lock prevent an interrupted or concurrent run from stranding the26host. A run can report `hardware_uat=pass` only after verifying the original27service, config, identity, and release link.2829The enforced performance target is 1280x800 at at least 55 encoded frames per30second. Native resolution is a functional compatibility leg: its actual cadence31is recorded without claiming that every native mode meets the fixed performance32target. Both legs require 300 captured frames with zero post-encode drops, ten33authenticated Iroh/MoQ sessions, ten grouped-v3 sessions, bounded forced-IDR34recovery, input acknowledgement, direct-path confirmation, and zero sequence35gaps.3637When the panel's native mode is already 1280x800, the native leg still runs with38width and height omitted from its Sigil configuration. The evidence records39`native_mode_relation=identical-to-fixed`; this proves native-mode resolution40without requiring a second pixel size that the panel cannot provide. Other41panels record `native_mode_relation=distinct-from-fixed`.4243Each evidence directory is named after the first 12 characters of its exact44source commit. It contains the aggregate result, both bounded capture logs, and45the GitHub Actions provenance used to obtain the candidate. Probe session IDs46are deliberately excluded from committed evidence.4748To run the gate, download the artifact produced by the pinned workflow into a49new owner-only directory matching:5051```text52$HOME/.local/state/goq-hardware-uat.<12-char-commit>.<6-char-suffix>53```5455Place the archive, its checksum, `release-manifest.json`, and56`uat-provenance.txt` in an owner-only `incoming/` subdirectory on the Bazzite57host, copy the runner to that host, then execute there:5859```sh60./run-bazzite-hardware-uat.sh UAT_ROOT FULL_COMMIT WORKFLOW_RUN_ID61```6263If more than one exact render-node/factory pair satisfies the complete UAT64contract, discovery fails closed and prints the eligible pairs. Select one pair65explicitly and rerun:6667```sh68./run-bazzite-hardware-uat.sh UAT_ROOT FULL_COMMIT WORKFLOW_RUN_ID \69 --render-node /dev/dri/renderD129 \70 --va-encoder varenderD129h264enc71```7273The two override options are inseparable, and the requested pair must pass the74same device, factory binding, programmatic property, CBR, and CQP checks as automatic75selection. The runner rejects reused output directories and concurrent hardware76runs.77Before generating its isolated configs, it enumerates accessible DRM render78nodes and uses Sigil's GObject probe to match each one to the exact dynamically79registered GstVA H.264 factory whose read-only `device-path` names that node.80No kernel-driver name or `gst-inspect` property formatting is required. The81chosen factory must advertise both CBR (for82the in-process fixed/native legs) and CQP (for the external compatibility leg).83The gate therefore does not assume either `/dev/dri/renderD128` or the generic84`vah264enc` factory. The selected pair is recorded in `summary.env`.