Description
Expose the persisted findings for a job via a simple GET endpoint. This is useful for debugging, for the frontend to re-load findings without re-scanning, and for future ML tooling to pull labeled data.
What to implement
GET /jobs/{job_id}/findings — returns all findings for a job from SQLite as JSON
GET /jobs/{job_id}/verify — returns the verify outcome for a job if it exists
- Return
404 with a clear message if the job_id doesn't exist in the DB
Response shape for /findings:
{
"job_id": "abc123",
"finding_count": 12,
"findings": [
{
"id": "uuid",
"rule_id": "...",
"severity": "HIGH",
"scanner": "semgrep",
...
}
]
}
Acceptance criteria
Description
Expose the persisted findings for a job via a simple GET endpoint. This is useful for debugging, for the frontend to re-load findings without re-scanning, and for future ML tooling to pull labeled data.
What to implement
GET /jobs/{job_id}/findings— returns all findings for a job from SQLite as JSONGET /jobs/{job_id}/verify— returns the verify outcome for a job if it exists404with a clear message if thejob_iddoesn't exist in the DBResponse shape for
/findings:{ "job_id": "abc123", "finding_count": 12, "findings": [ { "id": "uuid", "rule_id": "...", "severity": "HIGH", "scanner": "semgrep", ... } ] }Acceptance criteria
job_id404for unknownjob_id