Nexus is open source so its guarantees can be verified — not just claimed.
PRs that weaken invariants will not be merged.
This is not a suggestion. The protocol's value depends on enforcement, not features.
These modules have strict review requirements:
nexus/protocol/— State machine, handler, reconciliationnexus/defense/— Escrow, slashing, challengesnexus/trust/— Trust ledger, interaction recordingnexus/payments/— Wallets, settlementnexus/policy/— Policy engine, compliance, localitynexus/verification/— Verifiers, verdict logicnexus/auth.py— HMAC, replay protection
Core PRs must:
- Not introduce alternative settlement/dispatch paths
- Not bypass the state machine
- Not weaken escrow exclusivity
- Use compare-and-swap (CAS) for any mutation of shared finalizable state
- Include invariant tests for any new guarantees
- Pass the merge checklist
CAS Rule: Any mutation of shared finalizable state must use UPDATE ... WHERE current_status = ? with rowcount check, or provide an equivalent atomic guarantee. SELECT-then-UPDATE is forbidden for state transitions.
These modules welcome contributions:
nexus/api/— New endpoints, response improvementsnexus/sdk.py— SDK improvements, new integrationsagents/— Demo agents, examplesdocs/— Documentation, diagramsstatic/— Dashboard UI- Tests — More adversarial tests are always welcome
Every core PR must answer:
- Does this make the protocol harder to bypass?
- Is the state machine still the exclusive authority?
- Can settlement still only happen through escrow?
- Are new invariants tested under failure conditions?
- Does the README match what the code actually enforces?
If any answer is unclear: no merge.
- PRs that add direct payment paths bypassing escrow
- PRs that allow state mutations outside the orchestrator
- "Improvements" that weaken terminal state guards
- Feature additions without corresponding invariant tests
- README changes that claim more than the code enforces
pip install -r requirements.txt
pytest -v --timeout=10All 152 tests must pass. Lint must be clean:
ruff check .
ruff format --check .- Python 3.11+, full async/await
- Ruff for linting and formatting (line length: 120)
- No emojis in code or docs