|
| 1 | +{ |
| 2 | + "id": "HB-013", |
| 3 | + "title": "M2: API — hook CRUD, request listing, request inspection", |
| 4 | + "type": "epic", |
| 5 | + "status": "ready", |
| 6 | + "priority": "critical", |
| 7 | + "labels": ["epic", "priority:critical", "api"], |
| 8 | + "milestone": "M2: API", |
| 9 | + "description": "Implement the full management API for hooks and captured requests. After this milestone, hookbin has a complete REST API: create hooks (already done in M1), list hooks, get/delete individual hooks, list captured requests per hook, and inspect individual requests with full detail. All endpoints return structured JSON with consistent error handling. Pagination support via query parameters.", |
| 10 | + "goals": [ |
| 11 | + "GET /api/hooks lists all hooks with summary info", |
| 12 | + "GET /api/hooks/{id} returns full hook details including request count", |
| 13 | + "DELETE /api/hooks/{id} removes a hook and all its captured requests (CASCADE)", |
| 14 | + "GET /api/hooks/{id}/requests lists captured requests with pagination", |
| 15 | + "GET /api/hooks/{id}/requests/{rid} returns full request detail including headers and body" |
| 16 | + ], |
| 17 | + "children": ["HB-014", "HB-015", "HB-016", "HB-017"], |
| 18 | + "acceptance_criteria": [ |
| 19 | + { |
| 20 | + "id": "AC-1", |
| 21 | + "given": "a running hookbin server with hooks and captured requests", |
| 22 | + "when": "using the API to list, inspect, and delete hooks and requests", |
| 23 | + "then": "all operations return structured JSON with consistent error handling" |
| 24 | + }, |
| 25 | + { |
| 26 | + "id": "AC-2", |
| 27 | + "given": "a hook with captured requests", |
| 28 | + "when": "deleting the hook via DELETE /api/hooks/{id}", |
| 29 | + "then": "the hook and all its requests are removed (CASCADE)" |
| 30 | + }, |
| 31 | + { |
| 32 | + "id": "AC-3", |
| 33 | + "given": "a hook with many captured requests", |
| 34 | + "when": "listing requests with limit and offset query parameters", |
| 35 | + "then": "pagination works correctly, returning the requested slice" |
| 36 | + } |
| 37 | + ], |
| 38 | + "out_of_scope": [ |
| 39 | + "Token-based authentication (M5: Hardening)", |
| 40 | + "Rate limiting on API endpoints (M4: Operations)", |
| 41 | + "Dashboard UI consuming these endpoints (M3: Dashboard)", |
| 42 | + "Request replay (M4: Operations)" |
| 43 | + ] |
| 44 | +} |
0 commit comments