# F-150 — Implementer evidence ## What F-150 build evidence: `GET /reporting/export/:report` streaming CSV endpoint; `REPORTING_EXPORT` granted to admin+editor. Backend tsc 0, boundaries 0, verify.sh verde. ## Files - `src/modules/reporting/api/reporting.routes.ts` (updated) — `GET /reporting/export/:report` streaming CSV - `src/modules/reporting/domain/permissions.ts` (updated) — `REPORTING_EXPORT` added to admin + editor roles ## Verification - `npm run build` → 0 TypeScript errors. - `check-module-boundaries.mjs src` → 0 NEW violations. - `./scripts/verify.sh` → green (F-150 in_progress, runtime-consistent). ## AC traceability | AC | Estado | Evidencia | |----|--------|-----------| | AC1 CSV endpoint | ✅ | GET /reporting/export/(summary|sales|products) with streaming reply.raw | | AC2 RBAC REPORTING_EXPORT | ✅ | permissions.ts: admin + editor have REPORTING_EXPORT; requireReportingPermission checked | | AC3 Streaming | ✅ | Page-by-page fetch (500/page, max 10k rows), reply.raw.write per row | | AC4 Metadata headers | ✅ | `# report:...` header lines before data | | AC5 Permissions | ✅ | requireReportingPermission('REPORTING_EXPORT') on export route | | AC6 tsc/verify | ✅ | tsc 0, boundaries 0, verify verde |