Ctrl K
ComunidadGuías…

CONTRIBUTING.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Contributing

Thanks for your interest — this is an open, IFC-native AEC platform and contributions are welcome,
whether it's a bug report, a module, a viewer tool, or docs.

## Ground rules
- **IFC is the source of truth.** Reference model elements by IFC `GlobalId` (GUID), never by
  transient viewer IDs. Keep geometry (`.frag`) and data (the API) separate.
- **Pins / RFIs / punchlist follow the BCF model** so they round-trip with other BIM tools.
- The web viewer must run **fully offline** (local WASM, self-hosted tiles).
- Pin a compatible **`@thatopen/components` ↔ `@thatopen/fragments` ↔ `three`** version pair.

## Dev setup
```bash
# full stack (web + API + Python data service + MinIO/Postgres)
docker compose --profile full up --build      # web :8080 · api :8000

# or run pieces directly
cd apps/web && npm install && npm run dev      # vite dev server (:5173)
```

## Before you open a PR
Run the gates locally — CI runs the same:
```bash
cd services/api && python -m ruff check ../..    # static-analysis gate, WHOLE tree (dead code + defects)
python services/api/run_tests.py               # API suites
cd services/data && PYTHONPATH=src ./.venv/Scripts/python test_massing.py   # (+ test_families, test_analysis)
cd apps/web && npm run typecheck && npm run test && npm run build
python -m bandit -q -r services/api/src services/data/src -ll -ii   # security scan (before shipping)
```
- Keep changes focused; match the surrounding code's style and comment density.
- Add/extend a test for behavior changes (the suites are plain scripts — easy to extend).
- Update `CHANGELOG.md` and, if relevant, `docs/roadmap.md`.

## Reporting bugs / ideas
Use **Issues** for bugs (include the IFC/model if you can share it) and **Discussions** for
questions, ideas, and "is this possible?" — both are watched.

## License
By contributing, you agree your contributions are licensed under the repository's `LICENSE`.