You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
unworked validation sweep: close task-053 + task-054 minor findings
TASK-053 (lookup_v2 dispatch cutover):
- Merge the two split `namespace detail` blocks in webserver_dispatch.cpp
into one continuous block with a section banner separator.
- Replace bare __builtin_unreachable() in webserver_routes.cpp with
assert(!"unreachable: ...") + __builtin_unreachable() so debug builds
crash with a clear diagnostic; drop the dead trailing break.
- Brace-initialize cache_value at the lookup_v2 insert site; condense
the verbose move-vs-copy comment to a one-liner.
- Trim invalidate_route_cache's comment — no more references to the
removed v1 dispatch-cache field names.
- Add an Invariant 5 contract test, unregistered_path_returns_404, to
close the miss-path safety net in v2_dispatch_contract_test.
- Correct the bench_route_lookup.cpp radix-tier comment: the 16 paths
fit in the 256-entry LRU after warmup, so the bench measures a mix
of cache-warm + radix latency, not pure radix.
- Rewrite REGRESSION.md §"Why two surfaces" and §3 (custom-regex
constraints) to reflect the post-cutover reality.
- 05-cross-cutting.md §5.1 internal-locks table: route_table_mutex →
route_table_mutex_; route_cache_mutex entry replaced with a note
about the LRU mutex being owned by detail::route_cache.
- v2-deferred-backlog-plan.md summary table now carries a Status
column with TASK-053..059 marked Done.
TASK-054 (auth_handler_ptr → optional<http_response>):
- Gate the std::string path(...) allocation in the auth before_handler
alias behind auth_skip_paths_normalized.empty() so production servers
with no skip paths pay zero allocation per authenticated request.
- Rename install_log_access_alias_ → install_log_access_alias (no
trailing underscore on file-scope free functions in anonymous
namespace; matches the codebase convention the comment cites).
- Tidy the auth hook: drop the explicit type annotation, rename the
local to `rejection`, switch to idiomatic `if (!rejection)`.
- Simplify adapt_legacy_auth's lambda return to `std::move(*ptr)`
(implicit conversion to optional handles the wrap).
- Add paired PORT_N / PORT_N_STRING macros in
auth_handler_legacy_shim_test.cpp and replace the two hardcoded
localhost:8296 / 8297 strings (matches the iter1 fix for the
optional-signature TU).
- Simplify std::optional<http_response>(...) → direct returns in the
example, the integration test, and the two unit-test sites.
- Add a comment to the centralized auth example noting that production
should read AUTH_USER/AUTH_PASS once at startup (per-request getenv
is not thread-safe vs concurrent setenv).
- create-webserver.md and RELEASE_NOTES.md now name v2.1 as the
concrete removal target for the compat::auth_handler_v1_ptr alias.
- v2-deferred-backlog-plan.md acceptance criteria rewritten so the
grep AC explicitly excludes the intentional compat shim, and the
heap-allocation criterion documents the by-inspection verification
(citing webserver_aliases.cpp:221).
TASK-055 (carry-over):
- Add expose_exception_messages note to the create-webserver component
doc to round out the security-opt-in documentation alongside
expose_credentials_in_logs.
Compacted both task-053 and task-054 unworked-review files: closed
items collapsed into a single-line table with disposition; substantive
deferred items grouped into named clusters for follow-up.
Tested
- libhttpserver.la rebuilds clean.
- v2_dispatch_contract: 5 tests / 15 checks pass (was 4 / 12).
- auth_handler_optional_signature: 9 successes.
- auth_handler_legacy_shim: 5 successes.
- routing_regression: clean.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: specs/tasks/v2-deferred-backlog-plan.md
+19-14Lines changed: 19 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,15 +21,15 @@ can be split out into individual task files when work starts.
21
21
22
22
## Summary
23
23
24
-
| Task ID (proposed) | Name | Severity | Milestone | Estimate | GA-blocker? |
25
-
|---|---|---|---|---|---|
26
-
| TASK-053 | Wire `lookup_v2()` into dispatch hot path | Major | M5 | L |**Yes** — TASK-027 work is dead code today |
27
-
| TASK-054 | Migrate `auth_handler_ptr` to `optional<http_response>`| Major | M4/M5 | M |**Yes** — last `shared_ptr<http_response>` on public API |
28
-
| TASK-055 | DR-009 revision: default error body must not surface `e.what()`| Major | M6 | M |**Yes** — CWE-209 information disclosure |
29
-
| TASK-056 | Hash-DoS hardening + prefix-route disambiguation in radix tree | Major | M5 | M |**Yes** — security hardening |
30
-
| TASK-057 | Redact credentials in `http_request::operator<<`| Minor (sec) | M3 | S |**Yes** — A09:2021 logging failure |
31
-
| TASK-058 | Hot-path allocation pass: canonicalize/normalize/serialize_allow_methods | Minor | post-v2.0 | L | No — perf polish |
32
-
| TASK-059 | Supply-chain: sha256-pin PMD analyzer download in CI | Minor (sec) | M6 | S | Yes — quick win |
24
+
| Task ID (proposed) | Name | Severity | Milestone | Estimate | GA-blocker? | Status |
25
+
|---|---|---|---|---|---|---|
26
+
| TASK-053 | Wire `lookup_v2()` into dispatch hot path | Major | M5 | L |**Yes** — TASK-027 work is dead code today | Done |
27
+
| TASK-054 | Migrate `auth_handler_ptr` to `optional<http_response>`| Major | M4/M5 | M |**Yes** — last `shared_ptr<http_response>` on public API | Done |
28
+
| TASK-055 | DR-009 revision: default error body must not surface `e.what()`| Major | M6 | M |**Yes** — CWE-209 information disclosure | Done |
29
+
| TASK-056 | Hash-DoS hardening + prefix-route disambiguation in radix tree | Major | M5 | M |**Yes** — security hardening | Done |
30
+
| TASK-057 | Redact credentials in `http_request::operator<<`| Minor (sec) | M3 | S |**Yes** — A09:2021 logging failure | Done |
31
+
| TASK-058 | Hot-path allocation pass: canonicalize/normalize/serialize_allow_methods | Minor | post-v2.0 | L | No — perf polish | Done |
32
+
| TASK-059 | Supply-chain: sha256-pin PMD analyzer download in CI | Minor (sec) | M6 | S | Yes — quick win | Done |
33
33
34
34
GA-blockers (six of seven) should land before v2.0 cuts a release tag.
35
35
TASK-058 is a post-v2.0 polish but the prep work (string_view return type
@@ -154,14 +154,19 @@ TODO comment marking this migration already lives at
154
154
- Blocks: None
155
155
156
156
**Acceptance Criteria:**
157
-
-`grep -rE 'shared_ptr<.*http_response' src/httpserver/` returns no
0 commit comments