4.8 KiB
4.8 KiB
Coding Standards
This document defines the coding conventions and quality standards for the AITBC project. All agents should adhere to these when writing or modifying code.
Python Style
- Follow PEP 8 with 4-space indentation.
- Maximum line length: 88 characters (Black default) or 100 if team agrees.
- Use type hints for function signatures and public methods.
- Use
snake_casefor variables and functions;PascalCasefor classes;UPPER_SNAKE_CASEfor constants.
Formatting
- Black code formatter is preferred (if configured). Otherwise, consistent indentation and spacing.
- Use
isortto sort imports: standard library, third-party, local. - Remove unused imports and variables.
Imports
Prefer absolute imports over relative imports for clarity. For intra-package modules, absolute imports from the package root are fine.
Example:
from app.services.trading_surveillance import SurveillanceService
# not
from ..services.trading_surveillance import SurveillanceService
However, within the cli commands, we currently add sys.path to include apps/coordinator-api/src and then import via app.services.xxx. This is acceptable for now, but consider packaging coordinator-api as a dependency in the future.
Docstrings
Public functions, classes, and modules should have docstrings in Google style or NumPy style. Example (Google):
def send_transaction(sender: str, recipient: str, amount: int) -> str:
"""Send coins from sender to recipient.
Args:
sender: Wallet address of sender.
recipient: Wallet address of recipient.
amount: Amount in smallest unit (e.g., wei).
Returns:
Transaction hash.
Raises:
InsufficientBalanceError: If sender lacks funds.
"""
Error Handling
- Use specific exception types; avoid bare
except:. Preferexcept SomeError:. - Log exceptions with context; do not swallow silently.
- For CLI commands, exit with non-zero status on error; print useful message to stderr.
Logging
- Use the
loggingmodule, notprint()for informational output. - Configure log level via environment variable
LOG_LEVEL. - Use module-level logger:
logger = logging.getLogger(__name__). - Log at appropriate levels:
debugfor verbose,infofor normal operations,warningfor recoverable issues,errorfor failures.
Async Code
- Use
async deffor I/O-bound functions;awaitappropriately. - Avoid blocking calls (like
time.sleep) in async functions; useasyncio.sleep. - Use
asyncio.create_taskfor fire-and-forget; handle exceptions.
Testing
- Write unit tests for new features and bug fixes.
- Place tests in
tests/directory adjacent to package or intests/at repo root. - Use
pytestfixtures for common setup/teardown. - Aim for high coverage of critical paths; not necessarily 100% trivial code.
- Tests should be hermetic: no external service dependencies (use mocking) except integration tests (marked separately).
Commit Messages
- Follow Conventional Commits:
feat:,fix:,docs:,refactor:,test:,chore:. - Keep subject line under 50 characters; body wrapped at 72 if needed.
- Reference issue numbers:
Closes #12orFixes #34.
Git Workflow
- Create feature branches from
main:aitbc1/<issue>-<slug>. - Commit logical units; avoid mixing unrelated changes.
- Push frequently to remote to back up work.
- Before opening PR, ensure tests pass locally; run
pre-commitif configured. - Request review from
@aitbc(or appropriate agent).
Security
- Never commit secrets (tokens, private keys) to the repository. Use environment variables or config files outside version control.
- Validate external input (user-provided data) to prevent injection attacks.
- Use parameterized queries for SQL; never string-concatenate.
Performance
- Avoid N+1 queries; use eager loading where appropriate.
- Profile slow code; add indexes to database if needed.
- Consider async for I/O-bound services.
API Design
- RESTful endpoints: use nouns, plural (
/v1/jobs,/v1/wallets), proper HTTP verbs. - Version APIs (
/v1/) to allow future upgrades. - Use appropriate status codes (200, 201, 400, 404, 409, 500).
- Return JSON with consistent structure:
{"data": ..., "error": null}or error envelope.
Documentation
- Update README.md when user-facing changes occur.
- Document new CLI commands in
README.mdordocs/. - Keep
ai-memory/knowledge/files up to date with environment details, dependencies, and coding standards.
Code Review
- Respect Stability Rings: Ring 0 (core packages) requires meticulous review.
- Reviewers: look for correctness, security, performance, readability, tests.
- Approve only when CI passes and code meets standards.
- Address review comments promptly.
By adhering to these standards, we maintain a clean, maintainable, and robust codebase.