v0.1.0 — M1 walking skeleton
First milestone: a thin, deterministic end-to-end slice proving the architecture — ingest → probe → verdict. No LLM and no frontend yet (those begin in M2).
Included
- FR-02 — ingest DefectDojo-style JSON findings into SQLite via the API.
- FR-06 — target-authorization allowlist: an unbypassable httpx transport that refuses any target not explicitly allowlisted (SSRF guard), built only from trusted config.
- FR-07 — one verification-only HTTP probe (the OWASP Juice Shop SQLi login bypass), executed through the FR-06 guard, capturing full request/response/timing evidence.
- FR-09 — evidence-backed verdicts (
still_open/fixed/inconclusive) with machine-readable reason codes, persisted and exposed atPOST /findings/{id}/retestandGET /verdicts.
Run it
make lab-up # OWASP Juice Shop (pinned v17.1.1), localhost only
make demo-walking-skeleton # prints INGEST / PROBE / EVIDENCE / VERDICT
make test-system # asserts still_open against the live lab
make lab-downQuality
Lint, mypy --strict, xenon complexity gate, and 96 unit/integration tests pass; coverage ~98%. Security review of the retest executor and a codebase-sanity audit both came back clean (HEALTHY).