Skip to content

Commit ea63ffe

Browse files
etrclaude
andcommitted
TASK-031: validation fixes — housekeeping (status Done, unworked findings recorded)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b40b00e commit ea63ffe

3 files changed

Lines changed: 196 additions & 8 deletions

File tree

specs/tasks/M5-routing-lifecycle/TASK-031.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
Implement the 6-point error-propagation contract from §5.2 / DR-009 in the dispatch path so any uncaught exception lands at the configured `internal_error_handler` with documented behavior.
99

1010
**Action Items:**
11-
- [ ] Wrap handler invocation in dispatch with `try { ... } catch (const std::exception& e) { ... } catch (...) { ... }`.
12-
- [ ] On `std::exception`: log via `error_logger` (whatever callback the user wired), invoke `internal_error_handler` with `e.what()`, send the resulting response (default 500 if no handler set).
13-
- [ ] On non-`std::exception`: same path but with message `"unknown exception"`.
14-
- [ ] If `internal_error_handler` itself throws: log generically, send hardcoded 500 with empty body.
15-
- [ ] `feature_unavailable` is a `std::runtime_error`; no special status mapping (just lands as a 500 like any other exception).
16-
- [ ] Document the contract in `webserver.hpp` Doxygen comments (full README pass in M6).
11+
- [x] Wrap handler invocation in dispatch with `try { ... } catch (const std::exception& e) { ... } catch (...) { ... }`.
12+
- [x] On `std::exception`: log via `error_logger` (whatever callback the user wired), invoke `internal_error_handler` with `e.what()`, send the resulting response (default 500 if no handler set).
13+
- [x] On non-`std::exception`: same path but with message `"unknown exception"`.
14+
- [x] If `internal_error_handler` itself throws: log generically, send hardcoded 500 with empty body.
15+
- [x] `feature_unavailable` is a `std::runtime_error`; no special status mapping (just lands as a 500 like any other exception).
16+
- [x] Document the contract in `webserver.hpp` Doxygen comments (full README pass in M6).
1717

1818
**Dependencies:**
1919
- Blocked by: TASK-027, TASK-030
@@ -29,4 +29,4 @@ Implement the 6-point error-propagation contract from §5.2 / DR-009 in the disp
2929
**Related Requirements:** PRD-FLG-REQ-002 (sentinel/throw behavior)
3030
**Related Decisions:** DR-009, §5.2, AR-007
3131

32-
**Status:** In Progress
32+
**Status:** Done

specs/tasks/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Nominally: **13 sequential tasks**, each S–XL. Most other tasks parallelize of
113113
| TASK-028 | Routing-semantics regression gate | M5 | Done | TASK-027 |
114114
| TASK-029 | Naming consistency — `stop_and_wait`, `block_ip`/`unblock_ip` | M5 | Done | TASK-014 |
115115
| TASK-030 | `_handler` suffix renames + `explicit` constructor | M5 | Done | TASK-014 |
116-
| TASK-031 | Handler error-propagation contract (DR-009) | M5 | In Progress | TASK-027, TASK-030 |
116+
| TASK-031 | Handler error-propagation contract (DR-009) | M5 | Done | TASK-027, TASK-030 |
117117
| TASK-032 | Thread-safety contract stress test (DR-008) | M5 | Not Started | TASK-027, TASK-031 |
118118
| TASK-033 | `create_webserver` builder cleanup | M5 | Not Started | TASK-006, TASK-014 |
119119
| TASK-034 | Build-flag-independent public API + `webserver::features()` | M5 | Not Started | TASK-003, TASK-019, TASK-033 |

0 commit comments

Comments
 (0)