Files
geointel/docs/REPOSITORY_CONVENTIONS.md
T
Jens faeb58ef6d
GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 1m49s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m39s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 58m43s
Initial public release
2026-08-31 21:56:53 +02:00

135 lines
2.9 KiB
Markdown

# Repository Conventions
## Canonical structure
```text
GeoIntel/
backend/
app/
api/
routes/
deps.py
core/
config.py
errors.py
logging.py
db/
session.py
base.py
migrations/
models/
schemas/
services/
repositories/
workers/
providers/
utils/
tests/
pyproject.toml
README.md
frontend/
src/
app/
pages/
components/
features/
hooks/
lib/
services/
stores/
types/
styles/
package.json
README.md
docs/
datasets/
raw/
processed/
cache/
storage/
uploads/
tiles/
masks/
reports/
exports/
models/
scripts/
tests/
fixtures/
```
## Backend naming
- SQLAlchemy models: singular class names, e.g. `Project`, `Dataset`, `AnalysisRun`.
- Pydantic schemas: `ProjectCreate`, `ProjectRead`, `DatasetRead`.
- Services: `ProjectService`, `RasterService`.
- Repositories: `ProjectRepository`.
- Route files: plural noun, e.g. `projects.py`, `datasets.py`, `analysis_runs.py`.
## Frontend naming
- Pages end with `Page`, e.g. `DatasetManagerPage.tsx`.
- Components are PascalCase.
- Hooks start with `use`, e.g. `useProjects.ts`.
- API clients live under `src/services/api`.
- Domain types live under `src/types`.
- Feature-specific components live under `src/features/<feature>`.
## Documentation rule
When Codex implements or changes a module, it must update at least one of:
- docs/TODO.md
- docs/IMPLEMENTATION_BACKLOG.md
- docs/CODEX_EXECUTION_LOG.md
- relevant technical spec if a documented decision changes
## No generated noise
Do not commit:
- node_modules
- .venv
- __pycache__
- large raw datasets
- model weights unless explicitly requested
- generated tiles/masks/reports except small fixtures
## Environment variables
All configurable external sources must use environment variables:
- DATABASE_URL
- REDIS_URL
- STORAGE_ROOT
- GRB_WFS_URL
- OSM_OVERPASS_URL
- OPENAI_API_KEY optional later
- MODEL_STORAGE_ROOT
## Testing conventions
Backend:
- pytest
- fixture datasets under tests/fixtures
- geometry tests must use small artificial polygons
Frontend:
- typecheck must pass
- lint must pass if configured
- components must handle loading/error/empty states
## Build conventions
Every build pass should report:
- files changed
- modules completed
- tests run
- known limitations
- next recommended pass
## Geospatial correctness conventions
- Never compute area/length in EPSG:4326.
- Always store CRS metadata.
- Always warn on missing CRS.
- Never export geospatial outputs from non-georeferenced rasters unless the output is explicitly marked image-space only.
## Mocking rule
Mock providers are allowed only when:
- they are named `Development...Provider` or `Fixture...Provider`;
- they are clearly isolated;
- UI labels say development/demo provider;
- real provider interfaces are already defined.