Anyone in the Sutro Group (or interested outsiders) can contribute experiments, findings, or raw results.
- Fork the repo
- Run an experiment on sparse parity (with any tool: Claude Code, Replit, Gemini, plain Python, pencil and paper)
- Submit a PR with your findings
We accept contributions at three levels of formality. Pick the one that fits your workflow.
Put whatever you have in contributions/. No format required.
contributions/
germain-depth1-results.md # copy-paste from your agent's output
michael-claude-log.txt # raw Claude conversation
notes-from-monday.md # meeting notes, ideas, observations
Someone (usually Claude Code) will reformat it later. The point is to get the information into the repo, not to make it pretty.
Copy the template and fill it in:
cp findings/_template.md findings/exp_your_name.mdThe template asks for: hypothesis, config, results table, analysis, open questions. See any file in findings/ for examples. This is the format that feeds into the survey.
Follow the lab protocol:
# 1. Read what's known
cat DISCOVERIES.md
# 2. Copy the code template
cp src/sparse_parity/experiments/_template.py src/sparse_parity/experiments/exp_yours.py
# 3. Edit, run, measure
PYTHONPATH=src python3 src/sparse_parity/experiments/exp_yours.py
# 4. Write findings
cp findings/_template.md findings/exp_yours.md
# 5. Submit PR with all three: experiment code, results JSON, findings docOne command gets you everything: Python, numpy, bun, pandoc, mkdocs.
# 1. Install nix (if you don't have it)
curl --proto '=https' --tlsv1.2 -sSf https://install.determinate.systems/nix | sh -s -- install
# 2. Clone and enter dev shell
git clone https://github.com/cybertronai/SutroYaro.git
cd SutroYaro
nix develop
# 3. Verify it works
python3 -m sparse_parity.fast
# Should print: 100% accuracy in ~0.12s
# 4. Run environment check
python3 checks/env_check.py
# Should print: All checks passed.The dev shell sets PYTHONPATH=src automatically, so imports work without manual setup.
What's included:
- Python 3 + numpy (core experiments)
- bun (Telegram sync)
- pandoc (Google Docs sync)
- mkdocs-material + plugins (docs site)
Direnv (optional): If you use direnv, direnv allow will auto-load the dev shell when you cd into the repo.
If you don't want to install nix:
git clone https://github.com/cybertronai/SutroYaro.git
cd SutroYaro
# Core deps only (experiments)
pip install numpy
# Or with uv
uv pip install numpy
# Set PYTHONPATH and verify
export PYTHONPATH=$PWD/src:$PYTHONPATH
python3 -m sparse_parity.fastOptional deps for sync/docs:
pip install mkdocs-material mkdocs-mermaid2-plugin pymdown-extensions
# pandoc: brew install pandoc (macOS) or apt install pandoc (Linux)
# bun: curl -fsSL https://bun.sh/install | bashOpen questions live in DISCOVERIES.md under "Open Questions." The task tracker has current priorities. Some starting points:
- Reproduce a result: pick any experiment from the survey and verify the numbers
- Try a new algorithm: check proposed-approaches.md for untested ideas
- Improve the metric: we just added DMC (Data Movement Complexity) alongside ARD. Both could use testing on more configs.
- Scale testing: does your method work at n=50/k=5? n=100/k=10?
- Read DISCOVERIES.md before experimenting so you don't repeat what's known
- One hypothesis per experiment so results are interpretable
- Always compare against a baseline so numbers have context
- Don't modify measurement code (tracker.py, cache_tracker.py, data.py, config.py). If you need to change the metric, that's a separate PR.
- Record negative results because knowing what doesn't work prevents others from trying it
- Fork and branch
- Push your branch, open a PR against
main - Describe what you tried and what happened
- Someone (human or AI) will review and merge
main is now branch-protected: PRs require 1 approval before merge. Repo admins can override for hotfixes (gh pr merge --admin). Force-push and branch deletion are blocked.
The only CI gate today: diagram-staleness.yml (see "Updating the repo diagrams" below). No test coverage requirements. Hard rule: don't break existing experiments.
The two diagrams on the docs site — Repo Layout (Mermaid) and Interactive Repo Tree (D3) — are generated from a single YAML.
Don't edit the .md files directly. They have BEGIN_AUTOGEN / END_AUTOGEN markers around the data blocks; anything between is rewritten by the generator.
# 1. Edit the source of truth
$EDITOR docs/research/_diagrams.yaml
# 2. Regenerate both diagrams
bin/regen-diagrams
# 3. Commit YAML + regenerated .md files together
git add docs/research/_diagrams.yaml docs/research/repo-{tree,layout}.md
git commit -m "diagrams: ..."CI (diagram-staleness.yml) fails any PR where the .md files have drifted from a fresh regen. The error message tells you to run bin/regen-diagrams locally and commit.
What's auto-counted (don't hardcode these in the YAML):
{findings_count}— number offindings/exp_*.mdfiles{experiments_jsonl_count}— line count ofresearch/log.jsonl{task_count}— number ofdocs/tasks/[0-9]*-*.mdfiles
Versions are recorded in docs/changelog.md following Semantic Versioning and the Keep a Changelog format.
Each released version has a matching annotated git tag (v0.29.0, v0.28.0, etc.) pointing at the changelog commit that shipped it. Browse them via git tag -l 'v*' or on the GitHub releases page.
When you add a new release entry to docs/changelog.md, the workflow is:
# After the changelog PR merges to main
git fetch origin --tags
git tag -a v0.X.0 <merge-commit-sha> -m "v0.X.0"
git push origin v0.X.0Tag the merge commit that landed the changelog entry, not your feature branch.
Tag coverage: v0.16.0, v0.17.0, v0.23.0, v0.24.0, v0.25.0, v0.27.0, v0.28.0, v0.29.0. Earlier releases (v0.5.0–v0.15.0, v0.18.0–v0.22.0, v0.26.0) are documented in docs/changelog.md but have no git tags — the corresponding commits couldn't be unambiguously identified retroactively. Use the changelog as the authoritative source for those versions.
Ask in the Telegram group or open a GitHub issue.