Bump Suave from 2.6.2 to 3.4.6 - #1272
Merged
Merged
Conversation
Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0.
17 tasks
dsyme
pushed a commit
that referenced
this pull request
Sep 8, 2026
Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0.
dsyme
pushed a commit
that referenced
this pull request
Sep 8, 2026
Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0.
dsyme
pushed a commit
that referenced
this pull request
Sep 8, 2026
Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0.
dsyme
added a commit
that referenced
this pull request
Sep 8, 2026
…in HtmlFormatting (#1271) * perf: avoid sprintf overhead for no-arg format strings in HtmlFormatting Replace sprintf "<pre><code>" with a plain string literal in three call sites within the hot code/output block rendering path. sprintf with zero format specifiers still incurs printf-format parsing overhead on every call; a plain literal avoids that with no behavior change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Bump Suave from 2.6.2 to 3.4.6 (#1272) Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0. * Improve Mermaid setup (#1274) * Move the Mermaid example from docs/sidebyside/sidemermaid.md to docs/mermaid.md and rewrite it around plain ```mermaid fenced blocks promoted by a docs/_body.html script, the pattern used by the fantomas docs. The source now renders on GitHub and the recipe page actually renders its own diagrams. * Add Docs pipeline to easily launch documentation locally. * perf: avoid sprintf overhead for no-arg format strings in HtmlFormatting Replace sprintf "<pre><code>" with a plain string literal in three call sites within the hot code/output block rendering path. sprintf with zero format specifiers still incurs printf-format parsing overhead on every call; a plain literal avoids that with no behavior change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Florian Verdonck <florian.verdonck@outlook.com> Co-authored-by: Don Syme <dsyme@github.com>
dsyme
added a commit
that referenced
this pull request
Sep 8, 2026
…sting mechanism (#1267) * docs: describe Literate scripts as a lightweight doc-testing mechanism Addresses feedback in #1221 by explicitly documenting that Literate's --eval execution of embedded F# code, combined with (*** include-output ***) and (*** include-value ***), functions as a low-effort doc-test workflow: code samples are executed for real and failures surface at build time. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Bump Suave from 2.6.2 to 3.4.6 (#1272) Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0. * Improve Mermaid setup (#1274) * Move the Mermaid example from docs/sidebyside/sidemermaid.md to docs/mermaid.md and rewrite it around plain ```mermaid fenced blocks promoted by a docs/_body.html script, the pattern used by the fantomas docs. The source now renders on GitHub and the recipe page actually renders its own diagrams. * Add Docs pipeline to easily launch documentation locally. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Florian Verdonck <florian.verdonck@outlook.com> Co-authored-by: Don Syme <dsyme@github.com>
dsyme
added a commit
that referenced
this pull request
Sep 8, 2026
…1264) * Add support for top-level <seealso> XML doc tags in API docs Renders a 'See also' section (list of links) for members and entities that have top-level <seealso cref="..."/> XML doc tags, per the xmldoc recommended-tags convention. Previously these tags were silently ignored. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Document agentic contribution workflow (#1266) * Bump Suave from 2.6.2 to 3.4.6 (#1272) Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start. While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets. Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when <FsDocsLogoLink> is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected. Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang. Release notes: 22.2.0. * Improve Mermaid setup (#1274) * Move the Mermaid example from docs/sidebyside/sidemermaid.md to docs/mermaid.md and rewrite it around plain ```mermaid fenced blocks promoted by a docs/_body.html script, the pattern used by the fantomas docs. The source now renders on GitHub and the recipe page actually renders its own diagrams. * Add Docs pipeline to easily launch documentation locally. * Add support for top-level <seealso> XML doc tags in API docs Renders a 'See also' section (list of links) for members and entities that have top-level <seealso cref="..."/> XML doc tags, per the xmldoc recommended-tags convention. Previously these tags were silently ignored. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Don Syme <dsyme@users.noreply.github.com> Co-authored-by: Florian Verdonck <florian.verdonck@outlook.com> Co-authored-by: Don Syme <dsyme@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumped Suave, remove a redundant web socket log, use the root url for the logo during watch mode.
Migrate the fsdocs watch server to Suave 3's Task-based socket API: the websocket handler and reload broadcast now use ValueTask/Result, the removed Suave.Logging module is dropped, and the server task from startWebServerAsync is already hot so it no longer needs Async.Start.
While migrating, fix a crash in watch mode: clients that disconnect without a close handshake stayed registered, and broadcasting to such a dead socket throws ObjectDisposedException in Suave 3, killing the whole watch process. Clients are now deregistered whenever their connection ends, and the broadcast tolerates stale sockets.
Also in watch mode, the logo now links to the locally hosted site root instead of the production URL (even when is set), and the console no longer logs websocket connection chatter on every page reload. Release builds are unaffected.
Bump Fun.Build from 1.0.4 to 1.1.18 and make build.fsx directly executable via a dotnet fsi shebang.