1# Data Export Specification23## Purpose45Lets project owners take their data out of Tally in open formats, either for reporting in spreadsheets or for migrating to another tool. Exports always reflect the project's tasks at the moment the export is requested.67## Requirements89### Requirement: CSV export10The system SHALL export all of a project's tasks as an RFC 4180 CSV file with a header row containing `id`, `title`, `status`, `assignee`, `created_at`, and `updated_at`.1112#### Scenario: Export a project13- **WHEN** a project owner requests a CSV export of a project with 3 tasks14- **THEN** the system returns a CSV file with a header row and 3 data rows15- **AND** the response has content type `text/csv; charset=utf-8`1617#### Scenario: Escape commas and quotes18- **WHEN** a task title contains a comma or a double quote19- **THEN** the field is wrapped in double quotes and embedded quotes are doubled2021### Requirement: JSON export22The system SHALL export a project's tasks as a JSON array where each element contains every task field, including the full description.2324#### Scenario: Export as JSON25- **WHEN** a project owner requests a JSON export26- **THEN** the system returns `application/json` containing an array of task objects2728### Requirement: Export authorization29Only project owners MUST be able to request an export of a project's data.3031#### Scenario: Non-owner attempts export32- **WHEN** a project member who is not an owner requests an export33- **THEN** the system rejects the request with a 403 error34- **AND** no export file is generated