# Contributing to PACTBench ## Development setup ```bash python3 -m venv .venv source .venv/bin/activate python3 -m pip install -r requirements.txt ``` Before submitting a change, run: ```bash PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v python3 pact/validate_pactbench.py --require_v5 ``` Shell entry points must also pass `bash -n`. ## Code and experiment changes - Put shared Python implementation in `pact/`. - Keep per-game files in `games//` as thin wrappers and configuration. - Do not hand-edit published aggregate values in `registry/registry.json`. - A result is publishable only when its code, configuration, ordered rows, metrics, model identity, and source identities are available to the gate. - Keep unreviewed runs outside the published registry and README results. Follow the review-isolation procedure in `docs/MAINTAINERS.md`. ## Repository hygiene Do not commit: - API keys, access tokens, private endpoints, or credential files; - machine-specific absolute paths in code or documentation; - raw caches that can be rebuilt from documented inputs; - internal reviews, meeting notes, temporary reports, or backup copies; - new headline numbers that have not passed maintainer review. Use environment variables for model paths, service URLs, and credentials. Keep one canonical implementation for every runnable tool; avoid copied scripts that can silently diverge. ## Documentation Update the narrowest relevant document. Dataset facts belong in `docs/DATA.md`, experiment definitions and results in `docs/EXPERIMENTS.md`, commands in `docs/REPRODUCE.md`, and game-specific entry points in the corresponding game README. Historical reasoning and future experiment wish lists do not belong in the release documentation.