Contributing
August 26, 2026 ยท View on GitHub
Security and privacy boundaries are product requirements, not optional style.
Before opening a pull request
- Create a virtual environment:
python3 -m venv .venv. - Activate it and install locked tools:
python -m pip install --require-hashes -r requirements-dev.txt. - Install the locked JavaScript test dependency without lifecycle scripts:
npm ci --ignore-scripts. - Run
make check. - Confirm the diff contains no credentials, local paths, databases, logs, prompts, session transcripts, generated caches, or unrelated refactors.
- Update tests and documentation for behavior changes.
Property-based fuzzing
make fuzz runs bounded fast-check properties against the Web and Desktop product
bundles through the same VM fixture pattern as their smoke tests. It exercises nested
and malformed history responses, valid zero histories, counter and percentage
boundaries, quota windows, row/profile/series shapes, and hostile strings. The
properties require fail-closed history rendering, bounded percentages, no raw-HTML
sink, and matching Desktop/Web semantics.
CI runs this suite on every push and pull request; exact-tag release verification runs
it again through make check. An actual fast-check counterexample prints a replayable
seed and shrink path; copy both exactly and replay with
FUZZ_SEED=<seed> FUZZ_PATH='<path>' make fuzz. A timeout interruption has no shrink
path to replay. Use FUZZ_RUNS=<1..1000> for a longer bounded local run. Invalid run,
seed, or path values fail before fuzzing starts. This improves schema robustness; it is
not complete vulnerability coverage and does not replace review, static analysis, or
dedicated security testing.
Pull-request expectations
- Keep changes focused and explain the threat-model impact.
- Add a regression test for security or correctness fixes.
- Do not weaken read-only database access, response allowlists, query bounds, profile scoping, or error redaction.
- Do not add runtime dependencies without a documented necessity and supply-chain review.
- Never add telemetry, external analytics, or outbound calls outside Hermes provider adapters.
- Use normal React element rendering; raw HTML sinks are prohibited.
- All required GitHub checks must pass. Maintainers may request independent review for changes affecting credentials, authentication, database queries, or release workflows.
Reporting vulnerabilities
Follow SECURITY.md. Never include vulnerability details in a public issue.
License
By contributing, you agree that your contributions are licensed under Apache-2.0.