Thank you for your interest in contributing to AETHER! This document provides guidelines and instructions for contributing.
Be respectful, inclusive, and professional. We welcome contributions from everyone.
- Node.js 18+ (20 recommended)
- Python 3.9+ (3.11 recommended)
- Git
# Clone the repository
git clone https://github.com/chrbailey/aether.git
cd aether
# Install Node.js dependencies
npm install
# Install Python dependencies
pip install -e ".[dev]"
# Build TypeScript
npm run build
# Run all tests
npm run test:allaether/
├── core/ # Python ML core
│ ├── encoder/ # Event encoding
│ ├── world_model/ # JEPA predictor
│ ├── critic/ # Uncertainty & calibration
│ ├── training/ # Training loops & losses
│ ├── inference/ # FastAPI server
│ └── tests/ # Python tests (303)
├── mcp-server/ # TypeScript MCP server
│ └── src/
│ ├── governance/ # Adaptive thresholds
│ ├── bridge/ # Python HTTP client
│ ├── tools/ # MCP tool definitions
│ ├── types/ # TypeScript types
│ └── __tests__/ # TypeScript tests (99)
├── scripts/ # Training & benchmark scripts
├── data/ # Datasets & benchmarks
└── docs/ # Documentation
git checkout -b feature/your-feature-name
# or
git checkout -b fix/your-bug-fixFollow the coding standards below.
# TypeScript tests
npm test
# Python tests
npm run test:python
# Both
npm run test:all
# With coverage
npm run test:coverage
npm run test:python:coverage# TypeScript
npm run lint
npm run format
# Python
pip install ruff
ruff check core/ scripts/
ruff format core/ scripts/Use Conventional Commits:
# Features
git commit -m "feat(governance): add vocabulary-aware floor"
# Bug fixes
git commit -m "fix(bridge): handle connection timeout"
# Documentation
git commit -m "docs: update QUICKSTART guide"
# Tests
git commit -m "test(modulation): add vocab normalization tests"
# Chores
git commit -m "chore(deps): update vitest to 4.0.16"git push origin feature/your-feature-nameThen create a Pull Request on GitHub.
- Strict mode: All TypeScript uses strict mode
- ES Modules: Use
import/export, notrequire - Type everything: Avoid
any, use proper types - Naming: camelCase for variables/functions, PascalCase for types/classes
- File structure: One module per file, tests in
__tests__/
// Good
export function computeThreshold(value: number): number {
return Math.max(0.5, Math.min(0.99, value));
}
// Avoid
export function computeThreshold(value: any) {
return value > 0.99 ? 0.99 : value < 0.5 ? 0.5 : value;
}- Type hints: Use type hints for function signatures
- Docstrings: Use Google-style docstrings
- Naming: snake_case for functions/variables, PascalCase for classes
- Formatting: Follow ruff/black style
# Good
def compute_threshold(value: float, min_floor: float = 0.5) -> float:
"""Compute clamped threshold value.
Args:
value: Raw threshold value.
min_floor: Minimum allowed value.
Returns:
Clamped threshold between min_floor and 0.99.
"""
return max(min_floor, min(0.99, value))- Descriptive names:
it('returns base floor for small vocabularies') - Arrange-Act-Assert: Structure tests clearly
- Edge cases: Test boundary conditions
- No flaky tests: Use deterministic seeds for randomness
- Tests pass locally (
npm run test:all) - Linting passes (
npm run lint) - Types check (
npm run typecheck) - Documentation updated if needed
- No secrets or credentials in code
Include:
- What: Brief description of changes
- Why: Motivation/context
- How: High-level implementation approach
- Testing: How you tested the changes
- Automated CI runs tests, linting, security scans
- Maintainer reviews code
- Address feedback
- Squash and merge
- Add configuration in
mcp-server/src/governance/aether.config.ts - Implement computation in
mcp-server/src/governance/modulation.ts - Add tests in
mcp-server/src/__tests__/modulation.test.ts - Update documentation
- Create
scripts/parse_<dataset>.py - Follow existing parser patterns
- Output to
data/external/<dataset>/ - Add to
scripts/generate_benchmark_report.pyDATASETS config
- Define in
mcp-server/src/tools/ - Add types in
mcp-server/src/types/ - Register in tool list
- Add tests
Include:
- AETHER version
- Node.js and Python versions
- Operating system
- Steps to reproduce
- Expected vs actual behavior
- Error messages/logs
Include:
- Use case description
- Proposed solution
- Alternatives considered
- Open a Discussion
- Check existing Issues
Thank you for contributing!