C++26 standard library and language experiments.
One dispatch refactor resolves three different symptoms in the C++26 reflection validator. Split the walker into walk_members<T> and dispatch_value<Member, V>, let the ladder run against the value in hand at every level, and the annotation traverses through optional / vector / aggregate wrappers. Stage 13's optional<Scalar>+Range and Stage 14's vector<Scalar>+Range un-skip themselves, vector<optional<Aggregate>> composes without special cases, and two Predicate annotations on the same field — one over the container, one over the element — fire at the correct level because the requires-guard selects the scope.
Closed-set annotation dispatch + one wrapper branch: Predicate<F>. Captureless lambda closures ride through [[=...]] as structural NTTPs, capturing ones don't, and textually identical lambdas at two sites don't fold the way Regex<N> did.
Three stages extending the aggregate-only recursion rule past std::optional and std::vector. Type-driven dispatch with a has_value() gate + NotNullopt{}, path_stack switched to variant<string, size_t> so indices render as [N] and stay structurally distinct from field names, and container-level MinSize / MaxSize annotations on top.
Four stages on caching std::regex from a reflected annotation. A Regex<N> annotation that sidesteps the NTTP-string-view rejection, the naive per-call rebuild cost, a function-local static map + mutex cache, and a template-parameter cache keyed on std:
Eight stages from a one-field reflection smoke test to a header-only validator. [[=Range{0,150}]]-style annotations on fields, structured errors with dotted paths, three policy wrappers (throw / expected / vector), and one core-always-collects invariant with fail-fast living on the context. No macros, no codegen — the type is the schema.
Building Bloomberg clang-p2996 from scratch on WSL2. Three things the README doesn't warn about — LLVM_ENABLE_RUNTIMES for libcxx (GCC's libstdc++ has no <meta>), the consteval-only rule that makes std: