{ "feature_id": "F-150", "agent": "security", "stage": "security_gate", "verdict": "APPROVED", "summary": "CSV export requires REPORTING_EXPORT permission (admin/editor only). No new auth paths; uses same auth as other reporting endpoints. No user input in CSV content (data from DB only). Streaming prevents memory overload.", "checks": [ {"item": "RBAC enforced", "ok": true, "evidence": "requireReportingPermission('REPORTING_EXPORT') on export route; admin+editor only"}, {"item": "No new auth", "ok": true, "evidence": "Same authenticate() as other reporting endpoints"}, {"item": "No user input in output", "ok": true, "evidence": "All CSV data from DB columns; filters are validated via reportingFiltersSchema (Zod)"}, {"item": "Streaming prevents memory", "ok": true, "evidence": "500 rows/page; max 10k rows; reply.raw.write per batch"} ], "issues": [] }