Project

Contributing to Yoke

Yoke is an early software reference and endpoint engineering project. Hardware assumptions are recorded separately from tested software behavior. Small changes with a reproducible failure case are the most useful way to contribute.

Developer setup

Use Python 3.12 or later and GNU Make:

make verify

The Makefile creates .scratch/venv and installs the exact versions in the dev extra. Runtime code has no third-party dependencies. Set PYTHON=python3.12 to select an interpreter or VENV=.scratch/dev to reuse an existing environment. Generated docs, caches, and benchmark output belong under .scratch and are disposable.

Useful individual targets:

make lint type test
make simulate
make benchmark-control
make benchmark-media
make docs
make docs-serve
make browser-install verify-browser

make verify includes the static documentation build. The site generator uses Python-Markdown to render content, rewrites repository links, and checks all generated local links and anchors. Edit site content in site/pages/, canonical design documents in doc/, navigation in site/site.toml, and presentation in site/assets/ or site/template.html. ADRs in doc/decisions/ are published automatically.

Keep the reader paths distinct: site/pages/ explains the product and organizes get-started, guides, reference, and engineering content; doc/design/ holds the canonical detailed designs. Link a design from a hub rather than copying it. site/site.toml lists published pages and curated navigation separately. A new ADR belongs in the decision index; publication alone does not make it a primary navigation item. Preserve published page URLs and add compatibility anchors when changing a heading that has inbound links.

For browser checks, run make browser-install verify-browser once to provision the Chromium revision pinned by the development Playwright version and check the generated site. After provisioning, make verify-browser reuses that browser; verification never downloads one. Linux CI also sets BROWSER_INSTALL_OPTIONS=--with-deps during its explicit installation step. Browser evidence is written under .scratch/browser-report.

Design boundaries

Read the architecture before structural changes. The wire protocol is normative; propose a protocol behavior change in that document and an ADR before code. Keep the protocol core sans-I/O: callers inject time and perform effects. Runtime imports stay in the Python standard library.

The agent and control plane never inspect media payload. Separate media reference tools may handle unprotected synthetic content. No component may decrypt protected content, hold HDCP secrets, alter HDCP messages or capabilities, or instruct endpoints to weaken protection. The exact scope is recorded in ADR 0011.

Reproducing a problem

For protocol or driver behavior, add a deterministic offline test before or with the fix. Include the seed and fault schedule for a simulation failure. Use scripted driver transcripts for vendor API assumptions; label assumptions that have not been checked on actual hardware.

For performance changes, record the interpreter, workload, machine, parameters, and repeated measurements. Keep software model performance separate from physical video/USB timing and real codec throughput. Avoid machine-specific timing thresholds in CI.

Before submitting, run make verify; for site changes also run make verify-browser after browser provisioning. Describe the user-visible change, the reproduction, and the checks that actually ran. Report skipped socket tests explicitly. Do not include site keys, endpoint credentials, real site inventories, or private captures in a report.

Publication

CI runs the software and browser gates on Python 3.12 and 3.14, plus the separate ESP32 firmware gate. Pages publication requires all three job families to pass and deploys the exact browser-verified static artifact from feature/ir. Maintainers can also dispatch it manually on that branch. Generated HTML is a build artifact and is not committed.