Thank you for your interest in contributing! This project is built in the open and small, focused contributions are welcome.
🇯🇵 日本語の貢献者向けノート: 文書は英語ベースで管理していますが、issue / PR は 英語または日本語のどちらでも 構いません。コードコメント・docs は英語推奨ですが、補足コメントとして日本語も歓迎です。
git clone https://github.com/abyo-software/claude-hippo
cd claude-hippo
cargo test # default suite (129 pass + 3 ignored)
cargo test --features candle # full suite incl. candle wiring
cargo clippy --features candle --all-targets -- -D warnings
cargo fmt --checkIf cargo test is green and clippy --all-targets -- -D warnings is clean, your local environment is ready.
- Open an issue first for non-trivial changes (new MCP tools, schema changes, scoring formula tweaks). For small fixes (typos, docs, tightening assertions), feel free to send the PR directly.
- Branch off
main. Usefeat/<topic>orfix/<topic>naming. - One logical change per PR. A bench-harness change shouldn't share a PR with an unrelated CLI flag rename.
- Tests are required for behavior changes. The harness style is documented inline in
tests/eval/mod.rs— extend the existing pattern rather than introducing a parallel one. - Honest disclosures: if your change leaves a corner unfinished (e.g. "works for Qwen2 only, Llama-3 in v0.6"), say so explicitly in the PR description and the CHANGELOG entry. We treat partial-but-disclosed as strictly better than appearing-complete-but-broken.
- Rust edition 2021, MSRV
1.80.cargo fmtenforced;cargo clippy -- -D warningsenforced both with and without--features candle. - Comments: only when the why is non-obvious (hidden constraint, surprising invariant, workaround for a specific upstream bug). Don't restate what well-named identifiers already say.
- Docs strings: required on public types and public functions in
src/. Short paragraph + bullet points beats a multi-page docstring. - Tests: small, targeted, deterministic. If a test needs network or downloads >10 MB, gate it
#[ignore]and document the manual run command. - No backwards-compat shims for code that's only ever lived in this repo. If you're removing an unused field, just remove it.
- CHANGELOG.md is part of the change. Add an entry under
## [Unreleased]describing what shipped in user-visible terms.
- Additional client compat snippets (
docs/CLIENT_COMPAT.md) — Cursor, Continue, Aider, Goose, etc. - Bench fixtures that surface failure modes the current A/B/C/D set doesn't cover (e.g. multilingual content, very long context, code-heavy memories).
- Schema migrations: if you find a real-world DB swap edge case with
mcp-memory-service-rs, a regression test inscripts/conformance_swap.pyis gold. - Embedding backends: BGE / E5 / multilingual-MiniLM behind the same 384-dim contract.
- Real-GPU smoke: candle-cuda actual-GPU latency numbers (Phase E left this as v0.6 work).
- Include
hippo --version,cargo --version, OS, and the relevantRUST_LOG=hippo=debugexcerpt. - For data-corruption or schema-related issues, include the output of
hippo verify --db <path>if possible. - For surprise-scoring questions, include the input content and expected vs actual ranking.
Maintainers cut releases via:
Cargo.tomlversion bumpCHANGELOG.mdentry under## [Unreleased]→ moved to a dated sectionchore(release): vX.Y.Zcommitgit tag -a vX.Y.Z,git push origin main && git push origin vX.Y.Zcargo publishgh release create vX.Y.Z --notes-file <notes>
External contributors don't need to worry about steps 4–6; flag the release intent in your PR description and a maintainer will handle it.
Please do not open public issues for security-sensitive bugs. See SECURITY.md for the responsible-disclosure path.
By contributing, you agree that your contributions will be dual-licensed under Apache-2.0 OR MIT, matching the project's existing license terms.