Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
14188fa
TASK-001: Bump C++ standard floor to C++20
etr Apr 30, 2026
5288ecd
Merge TASK-001: Bump C++ standard floor to C++20
etr Apr 30, 2026
638c26a
Ignore .groundwork-plans/
etr Apr 30, 2026
c80fdff
TASK-002: Lock public/private header surface and inclusion gates
etr Apr 30, 2026
48a8835
Merge TASK-002: Public/private header layout and inclusion guards
etr Apr 30, 2026
243ec8f
Fix CI: drop C++20-incompatible compilers and add libmicrohttpd-devel…
etr May 1, 2026
5b78014
Fix MSYS/Cygwin build: expose _DEFAULT_SOURCE for libmicrohttpd's fd_…
etr May 1, 2026
b9ef39d
Fix CI follow-up: add LGPL header to gate tests, drop ubuntu-toolchai…
etr May 1, 2026
6b87fea
TASK-003: Add httpserver::feature_unavailable exception type
etr May 1, 2026
a05f79c
Merge TASK-003: Add httpserver::feature_unavailable exception type
etr May 1, 2026
74c1726
TASK-004: Add httpserver::iovec_entry POD with layout-pinning asserts
etr May 1, 2026
259b4bb
TASK-004: fix use-after-free in copy ctor, header hygiene, test impro…
etr May 1, 2026
d2a2544
Merge TASK-004: Add httpserver::iovec_entry POD with layout-pinning a…
etr May 2, 2026
03533c6
TASK-005: Add http_method enum and method_set bitmask
etr May 2, 2026
a3ec719
Merge TASK-005: Add http_method enum and method_set bitmask
etr May 2, 2026
71bf2a2
TASK-006: Replace #define constants with httpserver::constants
etr May 3, 2026
c93ee31
TASK-006: housekeeping (status + checkboxes)
etr May 3, 2026
0e0d001
TASK-006: housekeeping (mark task complete in index)
etr May 3, 2026
7c2f460
Merge TASK-006: Replace #define constants with httpserver::constants
etr May 3, 2026
6018559
TASK-007: CI test for public-header hygiene
etr May 3, 2026
f3c0292
TASK-007: share staged install across check-local; skip make check on…
etr May 3, 2026
064b7fc
Merge TASK-007: CI test for public-header hygiene
etr May 3, 2026
1228e20
TASK-007: housekeeping (mark task complete in index)
etr May 3, 2026
13f0818
TASK-008: Internal detail::body hierarchy
etr May 3, 2026
828006c
TASK-008: review-pass fixes (security + performance iter1)
etr May 3, 2026
d206af5
Merge TASK-008: Internal detail::body hierarchy
etr May 3, 2026
454e3d4
TASK-008: housekeeping (mark task complete in index)
etr May 3, 2026
6388623
specs: add planning scaffolding and review records
etr May 3, 2026
c05e355
Fix CI: -Werror=type-limits and accumulated cpplint errors
etr May 3, 2026
098759d
Fix CI: gate POSIX struct iovec asserts on !_WIN32
etr May 3, 2026
13aa17a
Fix CI: gate iovec_entry_test struct iovec bridge on !_WIN32
etr May 3, 2026
c953e85
Fix CI: gate pipe_body tests on !_WIN32
etr May 3, 2026
f4bb3d2
TASK-009: http_response value type with SBO buffer + detail/ rename
etr May 3, 2026
146c85d
TASK-009: review-pass fixes (code-quality iter2: details→detail names…
etr May 3, 2026
eb1d233
TASK-009: housekeeping (status + checkboxes + arch doc syncs)
etr May 3, 2026
2af5e36
Merge TASK-009: http_response value type with SBO buffer + detail/ re…
etr May 3, 2026
798fa38
TASK-009 follow-up: forward-task spec edits (TASK-010, TASK-013)
etr May 3, 2026
8fa2c6b
TASK-010: http_response static factory functions
etr May 3, 2026
e997866
TASK-010: review-pass fixes (security: WWW-Authenticate header inject…
etr May 3, 2026
d497e50
TASK-010: housekeeping (status + checkboxes + review record)
etr May 3, 2026
21f1ab8
Merge TASK-010: http_response factory functions
etr May 3, 2026
0d0ea3d
TASK-011: http_response const-correct accessors
etr May 3, 2026
b7d9138
TASK-011: housekeeping (status + checkboxes + review records)
etr May 3, 2026
07af54a
Merge TASK-011: http_response const-correct accessors
etr May 3, 2026
81ab57a
TASK-012: http_response fluent with_* setters
etr May 3, 2026
fc0a773
TASK-012: review-pass fixes (security: header injection / simplify: &…
etr May 3, 2026
529d945
TASK-012: record unworked review issues from validation pass
etr May 3, 2026
67db6a4
Merge TASK-012: http_response fluent with_* setters
etr May 3, 2026
f4a5530
TASK-013: remove v1 *_response subclasses, seal http_response
etr May 3, 2026
fff3d62
TASK-013: review-pass fixes (DRY forbidden-char constant, dispatch nu…
etr May 4, 2026
98f6a2f
TASK-013: housekeeping (status + checkboxes + arch sync + review record)
etr May 4, 2026
ce14c7b
Merge TASK-013: remove v1 *_response subclasses and seal http_response
etr May 4, 2026
dea9c63
TASK-014: webserver_impl skeleton (PIMPL prep, structural only)
etr May 4, 2026
1b14dd1
TASK-014: housekeeping (status In Progress + index sync + review record)
etr May 4, 2026
369c2a8
Merge TASK-014: webserver_impl skeleton (PIMPL prep, structural only)
etr May 4, 2026
e9175c1
TASK-015: http_request_impl skeleton (PIMPL split, structural only)
etr May 4, 2026
fd6c984
TASK-015: wire test-request fallback through http_request_impl
etr May 4, 2026
01c425b
TASK-015: housekeeping (review record)
etr May 4, 2026
707bfbc
Merge TASK-015: http_request_impl skeleton (PIMPL split, structural o…
etr May 4, 2026
f57312c
TASK-016: per-connection arena for http_request_impl
etr May 4, 2026
f6ade0e
TASK-016: review-pass fixes (security, perf, tests)
etr May 4, 2026
1f0c04a
TASK-016: housekeeping (status Done + checkboxes + review records)
etr May 4, 2026
54cfe91
Merge TASK-016: per-connection arena for http_request_impl
etr May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 47 additions & 71 deletions .github/workflows/verify-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,26 +108,7 @@ jobs:
debug: debug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: gcc
c-compiler: gcc-9
cc-compiler: g++-9
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
debug: nodebug
coverage: nocoverage
shell: bash
# gcc-9 and gcc-10 dropped: lack full C++20 support (no concepts library, no std::span, no <bit> features).
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
Expand Down Expand Up @@ -168,26 +149,8 @@ jobs:
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-22.04
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-11
cc-compiler: clang++-11
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-22.04
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-12
cc-compiler: clang++-12
debug: nodebug
coverage: nocoverage
shell: bash
# clang-11, clang-12, clang-14, and clang-15 dropped: incomplete C++20 support (concepts/<bit>/<span> gaps).
# clang-13 retained: passes the autoconf C++20 feature check on ubuntu-22.04.
- test-group: extra
os: ubuntu-22.04
os-type: ubuntu
Expand All @@ -198,26 +161,6 @@ jobs:
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-14
cc-compiler: clang++-14
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-15
cc-compiler: clang++-15
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
Expand Down Expand Up @@ -275,8 +218,8 @@ jobs:
os-type: ubuntu
build-type: select
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
shell: bash
Expand All @@ -285,8 +228,8 @@ jobs:
os-type: ubuntu
build-type: nodelay
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
shell: bash
Expand All @@ -295,8 +238,8 @@ jobs:
os-type: ubuntu
build-type: threads
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
shell: bash
Expand All @@ -305,11 +248,29 @@ jobs:
os-type: ubuntu
build-type: lint
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: debug
coverage: nocoverage
shell: bash
# TASK-007: dedicated header-hygiene gate. Runs `make check-hygiene`
# (preprocesses <httpserver.hpp> against the staged install and greps
# for forbidden backend headers). Surfaces this gate as its own named
# GitHub Actions check so reviewers see header-hygiene status
# independently of the broader `make check` log. Until M5 lands the
# check is informational (HEADER_HYGIENE_STRICT defaults to "no");
# TASK-020 flips it to strict.
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: header-hygiene
compiler-family: gcc
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
linking: dynamic
shell: bash
- test-group: basic
os: windows-latest
os-type: windows
Expand Down Expand Up @@ -393,8 +354,12 @@ jobs:
pacman --noconfirm -S --needed msys2-devel gcc make libcurl-devel libgnutls-devel

- name: Install Ubuntu test sources
# ppa:ubuntu-toolchain-r/test was historically used to backport newer
# gcc onto older Ubuntu LTS. With the C++20 floor (TASK-001), our matrix
# only retains compilers that ship in stock ubuntu-22.04 / 24.04 repos
# (gcc-11..14, clang-13/16/17/18), so the PPA is no longer needed -- and
# add-apt-repository talks to launchpad, which is a flaky dependency.
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test ;
sudo apt-get update ;
if: ${{ matrix.os-type == 'ubuntu' }}

Expand Down Expand Up @@ -662,7 +627,7 @@ jobs:
# IWYU always return an error code. If it returns "2" it indicates a success so we manage this within the function below.
function safe_make_iwyu() {
{
make -k CXX='/usr/local/bin/include-what-you-use -Xiwyu --mapping_file=${top_builddir}/../custom_iwyu.imp' CXXFLAGS="-std=c++11 -DHTTPSERVER_COMPILATION -D_REENTRANT $CXXFLAGS" ;
make -k CXX='/usr/local/bin/include-what-you-use -Xiwyu --mapping_file=${top_builddir}/../custom_iwyu.imp' CXXFLAGS="-std=c++20 -DHTTPSERVER_COMPILATION -D_REENTRANT $CXXFLAGS" ;
} || {
if [ $? -ne 2 ]; then
return 1;
Expand All @@ -685,7 +650,18 @@ jobs:
run: |
cd build ;
make check;
if: ${{ matrix.build-type != 'iwyu' && matrix.compiler-family != 'arm-cross' }}
if: ${{ matrix.build-type != 'iwyu' && matrix.compiler-family != 'arm-cross' && matrix.build-type != 'header-hygiene' }}

- name: Run header-hygiene check
# TASK-007: dedicated public-header hygiene gate. Runs the
# preprocessor-grep target (Layer 2) against a staged install and
# reports any forbidden backend headers reaching <httpserver.hpp>.
# Currently informational (HEADER_HYGIENE_STRICT=no) -- TASK-020
# flips this to strict when M5 closes the umbrella.
run: |
cd build
make check-hygiene
if: ${{ matrix.build-type == 'header-hygiene' }}

- name: Print tests results
shell: bash
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,5 @@ libtool
.worktrees
.claude
CLAUDE.md
.groundwork-plans/
.DS_Store
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
Version 0.20.0

Raised minimum C++ standard to C++20. Build now requires gcc >= 10
or clang >= 13 (Apple Clang from Xcode 15+). Updated
AX_CXX_COMPILE_STDCXX macro (m4/ax_cxx_compile_stdcxx.m4) to
serial 25 to support C++20 detection. Pruned CI matrix rows
(gcc-9, clang-11, clang-12) that lack full C++20 support.
Raised minimum libmicrohttpd requirement to 1.0.0.
Migrated Basic Auth to v3 API (MHD_basic_auth_get_username_password3,
MHD_queue_basic_auth_required_response3) with UTF-8 support.
Expand Down
Loading
Loading