Some checks failed
CI / lint (pull_request) Has been cancelled
CI / test (macos-latest, 3.10) (pull_request) Has been cancelled
CI / test (macos-latest, 3.11) (pull_request) Has been cancelled
CI / test (macos-latest, 3.12) (pull_request) Has been cancelled
CI / test (ubuntu-latest, 3.10) (pull_request) Has been cancelled
CI / test (ubuntu-latest, 3.11) (pull_request) Has been cancelled
CI / test (ubuntu-latest, 3.12) (pull_request) Has been cancelled
CI / test (windows-latest, 3.10) (pull_request) Has been cancelled
CI / test (windows-latest, 3.11) (pull_request) Has been cancelled
CI / test (windows-latest, 3.12) (pull_request) Has been cancelled
37 lines
943 B
Markdown
37 lines
943 B
Markdown
# Contributing
|
|
|
|
Early-stage project. The bar is architecture cleanliness, not feature
|
|
count. If your change breaks a layering rule below, it won't merge —
|
|
no matter how useful the feature.
|
|
|
|
## Dev setup
|
|
|
|
```bash
|
|
python -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -e ".[dev]"
|
|
pre-commit install
|
|
```
|
|
|
|
## Before opening a PR
|
|
|
|
```bash
|
|
ruff check src tests
|
|
ruff format src tests
|
|
mypy src/otko/core src/otko/services
|
|
pytest -m "not slow"
|
|
```
|
|
|
|
## Architectural rules (enforced in review)
|
|
|
|
1. `core/` may not import Qt or `openseespy`. Period.
|
|
2. `services/` may not import Qt.
|
|
3. `views/` may not import `openseespy` directly — go through a service.
|
|
4. Public functions and methods need type hints and a docstring.
|
|
5. New domain entities go through Pydantic validation.
|
|
6. Long-running operations (>50 ms) run off the GUI thread.
|
|
|
|
## Commit style
|
|
|
|
Conventional Commits — `feat:`, `fix:`, `refactor:`, `docs:`, `test:`,
|
|
`chore:`, `ci:`.
|