# Contributing to the Nexus **Every PR: net ≤ 10 added lines.** Not a guideline — a hard limit. Add 40, remove 30. Can't remove? You're homebrewing. Import instead. ## Why Import over invent. Plug in the research. No builder trap. Removal is a first-class contribution. Baseline: 4,462 lines (2026-03-25). Goes down. ## PR Checklist 1. **Net diff ≤ 10** (`+12 -8 = net +4 ✅` / `+200 -0 = net +200 ❌`) 2. **Manual test plan** — specific steps, not "it works" 3. **Automated test output** — paste it, or write a test (counts toward your 10) Applies to every contributor: human, Timmy, Claude, Perplexity, Gemini, Kimi, Grok. Exception: initial dependency config files (requirements.txt, package.json). No other exceptions. Too big? Break it up. ## Reviewer Policy **Every PR must have a reviewer assigned before merge.** See [docs/pr-reviewer-policy.md](docs/pr-reviewer-policy.md). # Contribution Guidelines ## Branch Protection Policy All repositories follow these mandatory rules for the `main` branch: ### Required for All Merges - [ ] Pull Request must exist for all changes - [ ] At least 1 approval from reviewer - [ ] CI checks must pass (where available) - [ ] No force pushes allowed - [ ] No direct pushes to main - [ ] No branch deletion ### Review Requirements by Repository ```yaml hermes-agent: required_owners: - perplexity - Timmy the-nexus: required_owners: - perplexity timmy-home: required_owners: - perplexity timmy-config: required_owners: - perplexity ``` ### CI Status ```text - hermes-agent: ✅ Active - the-nexus: ⚠️ CI runner disabled (see #915) - timmy-home: - (No CI) - timmy-config: - (Limited CI) ``` ## Workflow 1. Create feature branch 2. Open PR against main 3. Get 1+ approvals 4. Ensure CI passes 5. Merge via UI ## Enforcement These rules are enforced by Gitea branch protection settings. Direct pushes to main will be blocked. ## Abandoned PRs PRs not updated in >7 days will be labeled "stale" and may be closed after 30 days of inactivity.