# Repository Guidelines ## Project Structure & Module Organization FullMooncGPT hosts the orchestration code for conversational agents. Place runtime modules in `src/fullmooncgpt/`, grouped by feature folders such as `agents/`, `pipelines/`, and `integrations/`. Shared helpers belong in `src/fullmooncgpt/common/` so they can be reused without circular dependencies. Prompt templates, YAML configs, and sample payloads live in `assets/`, with a short `README.md` per subsection describing expected inputs and outputs. Tests sit in `tests/`, mirroring the module layout, and notebooks or exploratory scripts go under `research/` so they never ship with the package. ## Build, Test, and Development Commands 1. `python -m pip install -r requirements.txt` installs the runtime stack; add dev-only tooling to `requirements-dev.txt`. 2. `python -m pip install -e .[dev]` enables editable development once `pyproject.toml` is in place. 3. `python -m fullmooncgpt.cli --help` exercises the primary entry point; add new subcommands under `src/fullmooncgpt/cli/`. 4. `python -m pytest` runs the entire suite; pass `-k` to focus on a subset during iteration. 5. `ruff format && ruff check` enforce formatting and linting; run before every commit to match CI. ## Coding Style & Naming Conventions Target Python 3.11+, annotate public functions, and rely on dataclasses or pydantic models for structured payloads. Follow snake_case for modules and functions, PascalCase for classes, and keep module names short but descriptive. Stick to 4-space indentation and keep functions focused on a single responsibility. Store configuration in `.env` files loaded through `pydantic-settings` rather than hard-coding credentials. ## Testing Guidelines Use pytest and hypothesis for property-based coverage. Name files `test_.py` and isolate test data under `tests/fixtures/`. Aim for ≥85% statement coverage; capture notable gaps in the PR description. Mark slow or external-integration tests with `@pytest.mark.slow` so CI can opt in. ## Commit & Pull Request Guidelines Adopt Conventional Commits (for example, `feat: planner adds multi-hop support`) to keep changelog generation simple. Keep PRs scoped; include a checklist covering tests run, documentation updates, and backward compatibility notes. Link related issues with `Closes #ID` and attach logs or screenshots for UI-facing adjustments. Request at least one maintainer review and avoid force pushes after review without coordination.