# Contributing to SocratiCode Thank you for your interest in contributing to SocratiCode! This document explains the process for contributing and what to expect. ## Contributor License Agreement By submitting a pull request, you agree to the [Contributor License Agreement (CLA)](CLA.md). This is necessary because SocratiCode is dual-licensed (AGPL-3.0 + commercial). The CLA allows us to offer commercial licenses that include community contributions. ## Getting Started ### Prerequisites - Node.js 18+ - Docker (for integration and E2E tests) - Git ### Setup ```bash git clone https://github.com/giancarloerra/socraticode.git cd socraticode npm install npm run build ``` ### Running Tests ```bash # Unit tests (no Docker needed) npm run test:unit # Integration tests (requires Docker) npm run test:integration # End-to-end tests (requires Docker) npm run test:e2e # All tests npm test # Type checking npx tsc --noEmit ``` See the [Developer Guide](DEVELOPER.md) for architecture details, data flows, and how the test infrastructure works. ## How to Contribute ### Reporting Bugs Use the [Bug Report](https://github.com/giancarloerra/socraticode/issues/new?template=bug_report.yml) issue template. Include: - Steps to reproduce - Expected vs actual behaviour - Your environment (OS, Node.js version, embedding provider, MCP host) - Log output if available (set `SOCRATICODE_LOG_LEVEL=debug`) ### Suggesting Features Use the [Feature Request](https://github.com/giancarloerra/socraticode/issues/new?template=feature_request.yml) issue template. Explain the problem you're trying to solve and your proposed approach. ### Submitting Pull Requests 1. **Fork** the repository and create a branch from `main` 2. **Make your changes** — follow the existing code style and conventions 3. **Add tests** — new functionality needs test coverage; bug fixes should include a regression test 4. **Update documentation** — if your changes affect the public API, update README.md and/or DEVELOPER.md 5. **Verify** — run `npm run lint && npx tsc --noEmit && npm run test:unit` 6. **Open a PR** — fill out the pull request template ### Commit Message Convention We use [Conventional Commits](https://www.conventionalcommits.org/) to auto-generate the changelog: ``` feat: add fuzzy search support fix: resolve race condition in watcher docs: update quickstart guide refactor: simplify provider factory test: add watcher edge-case tests chore: update dependencies ``` Prefix with the type, then a short imperative description. Use `feat:` for new features, `fix:` for bug fixes, and `chore:` for maintenance that doesn't need a changelog entry. ### What Makes a Good PR - **Focused** — one logical change per PR - **Tested** — unit tests at minimum; integration tests for infrastructure changes - **Documented** — JSDoc comments on public functions, README/DEVELOPER.md updates where needed - **Clean history** — squash fixup commits before requesting review - **Conventional commits** — use the format above so the changelog generates correctly ## Code Style - **TypeScript** with strict mode enabled - **ESM** (ES modules) — use `.js` extensions in imports - **Functional style** — prefer pure functions, avoid classes where unnecessary - **Structured logging** — use `logger.info/warn/error/debug` with context objects, not `console.log` - **Error messages** — user-friendly, actionable, include troubleshooting hints - **JSDoc** on all exported functions - **SPDX license header** on all source files: ```typescript // SPDX-License-Identifier: AGPL-3.0-only // Copyright (C) 2026 Giancarlo Erra - Altaire Limited ``` ## Project Structure ``` src/services/ — Core business logic (docker, indexer, embeddings, etc.) src/tools/ — MCP tool handlers (one file per tool group) src/config.ts — Project ID and collection naming src/constants.ts — All configurable constants tests/unit/ — Unit tests (no Docker) tests/integration/ — Integration tests (Docker required) tests/e2e/ — End-to-end tests (Docker required) ``` See [DEVELOPER.md](DEVELOPER.md) for the full architecture overview. ## Review Process - All PRs are reviewed by a maintainer - [CodeRabbit](https://coderabbit.ai) automatically reviews every PR — address or resolve all comments before requesting human review - CI must pass (tests + type checking) - One approval required to merge - Maintainers may request changes or suggest alternatives ## Questions? - Open a [Discussion](https://github.com/giancarloerra/socraticode/discussions) for questions - Check the [README](README.md) and [Developer Guide](DEVELOPER.md) for existing documentation Thank you for helping make SocratiCode better!