# STEP1_5_CONSOLIDATION.md

## Doel
Consolidatie van stap 1 t/m 5 (backend skeleton, path_guard, unit tests, browse endpoint, golden tests).

## 1. Test-run context

Tests draaien vanuit repository root met:
- `PYTHONPATH=webui`

Definitieve testcommando's voor deze fase:
- `PYTHONPATH=webui python3 -m unittest discover -s webui/backend/tests/unit -p "test_*.py" -v`
- `PYTHONPATH=webui python3 -m unittest discover -s webui/backend/tests/golden -p "test_*.py" -v`
- `PYTHONPATH=webui python3 -m unittest discover -s webui/backend/tests -p "test_*.py" -v`

## 2. Minimale dependencies voor stap 1-5

Vastgelegd in:
- `webui/backend/requirements.txt`

Benodigd voor deze fase:
- FastAPI app + browse endpoint
- unit tests
- golden tests

Dependencies:
- `fastapi==0.111.0`
- `starlette==0.37.2`
- `pydantic==2.12.5`
- `httpx==0.27.2`
- `anyio==4.4.0`
- `sniffio==1.3.1`

## 3. Minimale wijzigingen in deze fase

Functioneel gewijzigde bestanden:
- `webui/backend/app/api/routes_browse.py`
- `webui/backend/app/dependencies.py`
- `webui/backend/app/main.py`

Testmatig gewijzigde bestanden:
- `webui/backend/tests/golden/test_api_browse_golden.py`
- `webui/backend/tests/golden/test_api_errors_golden.py`

Waarom golden tests van TestClient naar `httpx.ASGITransport` zijn omgezet:
- In deze omgeving blokkeerde de TestClient-runner op sync execution pad.
- `httpx.ASGITransport` voert requests in-memory tegen de ASGI app uit zonder die blokkade.
- Dit is een testuitvoerbaarheidsfix, geen API-contractwijziging.

Waarom async wijzigingen nodig waren:
- Error-pad en dependency-pad moesten async blijven om runtime-blokkade in deze omgeving te vermijden.
- De wijzigingen zijn intern uitvoeringsgericht; het HTTP-contract blijft gelijk.

## 4. Contractbehoud (expliciet)

Door deze consolidatiestap is niets gewijzigd aan:
- endpointpad: `GET /api/browse`
- query parameters: `path`, `show_hidden`
- response shape: `path`, `directories[]`, `files[]` met dezelfde velden
- error codes: o.a. `invalid_root_alias`, `path_traversal_detected`, `path_not_found`, `path_type_conflict`
- hidden files policy: default hidden uit, optioneel via `show_hidden=true`

## 5. Scopebevestiging

Niet geïmplementeerd in deze consolidatiestap:
- rename
- mkdir
- delete
- copy
- move
- tasks/worker
- frontend
