2026-06
Common Foundations
June started with a fairly deep cleanup of the lower layers of the project.
The old shape was that many libraries depended on Foundation even when they only needed a small primitive such as Result, Span, Function, compiler macros, platform detection, or a basic string/path view.
That is much cleaner now.
A large set of these small building blocks has been moved into common fragments, so libraries can include only the pieces they actually need.
The practical consequence is important: many more libraries now have no real library dependency at all.
This fits the direction I want for Sane C++ Libraries.
The libraries should be easy to pick up individually, easy to amalgamate, and easy for tools or agents to reason about without dragging a large conceptual dependency tree behind every include.
Smaller dependency surfaces also make the single-file outputs less surprising, because the generated order is closer to the actual code structure.
Plugin and SerializationText also got dependency simplifications in the same spirit.
They no longer need to pull in Strings, which removes another bit of unnecessary coupling from libraries that should stay small and composable.
There were also follow-up fixes around per-library assert providers, documentation, CI, and the JavaScript single-file generation path.
Detailed list of commits:
- d7c1e68 Foundation: Split Compiler.h, Platform.h and PrimitiveTypes.h in common code fragments
- 87ceb89 Foundation: Remove SC_COMPILER_UNUSED
- 6b8eede Foundation: Integrate CompilerMacrosExport.h
- e5ff093 Foundation: Move Result.h to Common
- c5c45d8 Foundation: Move Deferred.h to Common
- 0b26ab5 Foundation: Move UniqueHandle.h to Common
- 17c22cf Foundation: Move Function.h and TypeTraits.h to Common
- 7b54864 Foundation: Move AlignedStorage.h to Common
- bbee085 Foundation: Formatting for Result.h
- 69d464f Foundation: Move OpaqueObject.h to Common
- e2eee9d Foundation: Move InitializerList.h to Common
- a0bb73f Foundation: Move Span.h to Common
- 10802c9 Foundation: Move IGrowableBuffer.h to Common
- f0924c6 Foundation: Move StringSpan.h to Common
- 7bd01bd Foundation: Move StringPath.h to Common
- fa6dcd9 Foundation: Move Assert.h to Common
- accab40 Foundation: Make Assert providers per library
- cf889c5 Foundation: Fix JS single-file Common order resolution
- 4334e63 Foundation: Fix documentation after Common moves
- ecc6d6e Foundation: Fix CI after Common fragment moves
- 6058db8 Foundation: Simplify StringSpan.h
- 5f412ca Everywhere: Remove Foundation dependency
- f7ce361 Documentation: Clarify the No Allocations clauses
- 22464bb SerializationText: Remove Strings dependency
- 2a6aaff Plugin: Remove dependency on Strings library
Agentic Repository Workflow
Another theme this month was making the repository easier to navigate and change with agents.
The documentation now has an explicit agentic contribution workflow.
The website tagline also moved toward the "built for Agents" direction, and the documentation CI can trigger publishing of the website source.
This matters because I think that the era of manual coding is over (excluding recreative purposes of course).
Humans and agents both need routes through the codebase: library docs, skills, examples, local AGENTS.md and more, all pointing in the same direction.
I plan to expand more on this theme in the coming months, adding more formal constraints and ADR to prevent agents from derailing.
Detailed list of commits:
- e9dd479 Documentation: Define agentic contribution workflow
- 212ec9f CI: Trigger website source publish from documentation CI
- 3aecf59 Documentation: Add "built for Agents" to the tagline
- 474a5e2 Documentation: Correct coverage links
Windows Long Paths
Windows long paths also deserve their own section.
This work started right at the end of May and carried into June with follow-up fixes, documentation, and build-tool integration.
The short version is that Windows runtime targets are now long-path-aware by default where it makes sense.
SC::Build can emit the manifest support needed for console executables, GUI applications, and shared libraries, while static libraries reject that option because there is no runtime manifest to embed.
There is common Windows path handling, long-path-aware bootstrap behavior, PowerShell launcher support, Visual Studio project generation support, native build command rewriting, manifest/resource staging, and test coverage around long directory names.
Hopefully now this just works transparently without too many issues (and if there are, just as your agent to report them).
Detailed list of commits:
- dc129f0 Everywhere: Support windows long paths
- 34e3c825 Build: Add Windows long-path policy switch
- e2ed6ab Tools: Fix Windows UNC bootstrap and manifest staging
Async Contracts
The biggest library-specific work this month was Async.
May introduced Await as a coroutine layer on top of Async, so June spent a lot of time tightening the lower-level contracts that everything else depends on.
The new AsyncContractTest is the clearest sign of that shift.
Instead of only testing individual operations, the test suite now captures more of the lifecycle rules around event loops, requests, close paths, cancellation state, manual completions, sequence shutdown, submitted request stops, blocking polls, and request reuse from callbacks.
AsyncFilePoll was also split into AsyncFileReadiness and AsyncExternalCompletion.
That is a better separation: one concept is about file readiness, while the other is about manually injecting completions into the event loop.
Those were related implementation paths, but they are not the same API idea.
There was also a lot of wording cleanup in the docs.
Signal fanout, signal option semantics, request enumeration, event-loop run behavior, and thread-pool policy are all more explicit now.
That should help both direct Async users and the newer Await layer avoid relying on behavior that was accidental or underspecified.
Detailed list of commits:
- e880c34 Async: Split AsyncFilePoll into AsyncFileReadiness and AsyncExternalCompletion
- 1ba3b50 Async: Stabilize FileSystemWatcher async submission test
- 6329867 Async: Stop dispatching completions inside close()
- 7e7ba88 Async: Add AsyncContractTest
- 7ce1f93 Async: Strengthen core lifecycle contracts
- dd9936b Async: Enumerate active sequenced requests
- 56f467e Async: Clarify signal watcher fanout
- 87c796f Async: Clarify signal option semantics
- c500315 Async: Cover submitted request stop contract
- cdb4b91 Async: Document request enumeration contract
- be9e748 Async: Mark cancellation enumeration nonportable
- db46aa4 Async: Remove misleading signal one-shot no-op
- 137774a Async: Cover event loop recreation contract
- 54039e4 Async: Cover blocking poll listeners
- 35d3f79 Async: Cover excluded active run semantics
- 4c2565a Async: Cover interrupted run contract
- 670f5f9 Async: Clarify event loop contracts
- 5faa029 Async: Clarify thread pool policy
- 9beba99 Async: Clean wakeup test noise
- 799e99e Async: Reset external completion cancellation state
- e011f54 Async: Cover event loop close completion paths
- a9b0969 Async: Cover reactivation decision contracts
- c69f298 Async: Cover sequence shutdown contracts
- 2a942cd Async: Preserve run progress for manual completions
- 4f1cd16 Async: Cover request reuse from close callback
- a6801c4 Async: Handle missing thread pool completion removal
Http, HttpClient and Everything Else
The rest of the month is mostly hardening and small practical fixes.
Http and HttpClient got a lot of edge-case coverage.
Most of this is diagnostic and validation work: pinned error messages, disabled upload policies, multipart behavior, router and header helpers, WebSocket frame/hub diagnostics, server parser behavior, client TLS diagnostics, URL and proxy validation, authorization origin checks, cookie scope, and response header length limits.
That may sound less exciting than adding new HTTP features, but it is the work that makes the newer HTTP surface safer to build examples on.
May made the HTTP libraries more useful; June made more of their failure modes explicit.
There were also smaller platform and tooling fixes.
Process has a larger Windows environment arena, FileSystemWatcher handles zero-byte Windows change completions, SCExample is a little more robust around plugin files and example paths, the Windows bash launcher forwards to SC.bat, Visual Studio LLVM tool discovery was fixed in CI, and Time avoids an integer conversion warning.
Detailed list of commits:
- 1a132c0 Process: Increase Windows process environment arena
- 0d727ca Http: Pin diagnostic result messages
- 714ecf7 Http: Add public header compile smoke
- 5878819 Http: Stress large multipart uploads
- 97fa03f Http: Pin WebSocket hub diagnostics
- d0483e4 Http: Clarify server lifecycle errors
- c67168c Http: Pin file server option diagnostics
- 1029e1d Http: Fix server storage diagnostics
- 649645e Http: Pin router diagnostics
- 392fa55 Http: Pin multipart writer diagnostics
- a893f23 Http: Pin header helper diagnostics
- d7ff02a Http: Pin WebSocket frame diagnostics
- 9517792 Http: Add form value lookup helper
- b675c12 Http: Pin URL decode diagnostics
- f15a836 Http: Add request option setters
- 5f302ee Http: Use request option setters
- 436187b Http: Pin multipart header diagnostics
- 63a87eb Http: Cover disabled uploads policy
- 0967e75 Http: Pin client trailer diagnostic
- 7cbb5f1 Http: Smoke client option helpers
- 312fa17 Http: Pin client TLS diagnostics
- b8fdf14 Http: Pin server parser diagnostics
- 8daceaa Http: Cover disabled multipart uploads
- 5ec2528 HttpClient: Align session URL validation
- 2fd398d HttpClient: Tighten proxy URL validation
- 5ab1d2f HttpClient: Document proxy URL constraints
- 2c116fd HttpClient: Validate cached authorization headers
- 04d443b HttpClient: Document session authorization validation
- 3ba07c1 HttpClient: Validate cached authorization origins
- 09a1b95 HttpClient: Validate TLS CA paths
- dc3bd1c HttpClient: Clamp response header length
- dc84026 HttpClient: Enforce session cookie scope
- e328807 FileSystemWatcher: Handle zero-byte Windows change completions
- f6a3d59 SCExample: Make it more solid regarding plugin files modified in Visual Studio
- 3ae2378 SCExample: Normalize examples path
- a5ea07c Tools: Forward SC.sh to SC.bat on Windows bash
- ff69ee9 Plugin: Route build products to PluginDefinition::directory
- f44adda CI: Fix Visual Studio LLVM tool discovery
- 8a38a0e Everywhere: Avoid integer conversion warning
- 22620d5 SerializationBinary: Remove Assert provider
- aa665a5 SingleFileLibs/Python: Exclude Common in LOC computation
See you next month!
Full Changelog: release/2026/05...release/2026/06