First contribution in 5 minutes

August 19, 2026 ยท View on GitHub

CONTRIBUTING.md describes the standards a change has to meet. This page is the other half: where a small, low-risk change can start, and the shortest loop that proves it works.

Nothing here relaxes those standards. The privacy, benchmark, and compatibility requirements in CONTRIBUTING.md apply to a one-line documentation fix exactly as they apply to a new adapter.

Set up

git clone https://github.com/SignalLayerLabs/Marginal.git
cd Marginal
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
python -m pip install -e ".[dev]"

Run one focused test

While iterating, run only the tests you are touching:

pytest tests/test_budget.py -q

A single file returns in about a second, which is what makes an edit-run loop worth having. Narrow further with -k:

pytest tests/test_budget.py -q -k reservation

Run the full checks before opening a pull request

ruff format --check src tests examples
ruff check src tests examples
mypy src/marginal
pytest -q
python -m build
python -m twine check dist/*

Run these before pushing, not after review. They are the same checks a reviewer would otherwise run for you.

Where a first change can safely start

Documentation

The lowest-risk area, and the easiest place to be genuinely useful: a definition that is stated in two places and has drifted, a step that no longer matches the code, a missing link. Documentation must not broaden a capability claim: the Observe / Tool Enforcement / Full Compute Enforcement labels in the integration overview are the ones to be most careful with.

Synthetic fixtures

New test fixtures are welcome, with one hard rule.

Examples and fixtures must use synthetic identifiers. Never commit real customer, repository, model, incident, or employee names as telemetry fixtures. This is not a style preference -- fixtures end up in exports, and a real name in a fixture is a privacy incident that outlives the pull request. Use obviously invented values such as repo-alpha, session-0001, user-a.

Examples

The scripts in examples/ are executable and must stay runnable:

python examples/shadow_mode.py
python examples/universal_runtime.py

If you change a public API these exercise, run them. The same synthetic identifier rule applies.

Focused tests

Existing behavior that has no test is a good first contribution: it needs no design decision, and it makes the next refactor safer.

Note the asymmetry in CONTRIBUTING.md -- new behavior requires a failing test written before the implementation. Adding coverage for behavior that already exists is the easier case, and the one to start with.

What to expect in review

Pull requests should stay focused, and should explain the problem, interface, behavior, validation, compatibility, privacy, and scientific limitations that apply. Not every heading is relevant to every change -- a typo fix has no scientific limitations -- but a reviewer should not have to ask which ones you considered.