## Phase 3 — ZAP DAST Integration & Reliability **Depends on:** Phase 2 ### Drips Wave alignment - Mirrors Wave [#1034 health check automation](https://www.drips.network/wave/stellar/issues/b6dc5386-c56c-4c79-9b71-ece7b61d43e8) for scanner dependency readiness - Graceful degradation when ZAP unavailable (similar to dependency-unavailable error contracts) ### Deliverables - [ ] ZAP spider/AJAX spider timeout hardening in `zap_client.py` - [ ] Passive scan wait optimisation with progress callbacks - [ ] Active scan policy profiles: `quick` / `standard` / `deep` - [ ] `/ready` includes ZAP connectivity check when `SCANNER_MODE=zap` - [ ] Structured `DEPENDENCY_UNAVAILABLE` error when ZAP down - [ ] Integration tests with mocked ZAP API ### Acceptance criteria - Full lab scan (`./start-lab.sh full`) completes without timeout on DVWA - Fallback to `builtin` logged clearly when ZAP unreachable - Contract test for dependency-unavailable envelope - `docker compose ps` documented in runbook ### References - `docker-compose.yml` — ZAP on :8081 - Drips [#159 API contract tests](https://www.drips.network/wave/stellar/issues/c495ac8a-b875-4d03-a8a4-a6f59065dc6d)
Phase 3 — ZAP DAST Integration & Reliability
Depends on: Phase 2
Drips Wave alignment
Deliverables
zap_client.pyquick/standard/deep/readyincludes ZAP connectivity check whenSCANNER_MODE=zapDEPENDENCY_UNAVAILABLEerror when ZAP downAcceptance criteria
./start-lab.sh full) completes without timeout on DVWAbuiltinlogged clearly when ZAP unreachabledocker compose psdocumented in runbookReferences
docker-compose.yml— ZAP on :8081