Neftedollar/orleans-fsharp
71.5
Strong · 22 September 2026
39.1k
lines of production code
F#
with C#
7
measurements over time
What this system is
Orleans.FSharp is an F\# library that provides a functional, code-generation-free runtime for Microsoft Orleans, enabling developers to define grains using idiomatic F\# types and computation expressions. It supports core distributed computing patterns including event sourcing, transactions, and real-time push notifications via functional observers, while maintaining full interoperability with C\# clients. The system includes comprehensive tooling for testing, serialization, and static analysis, alongside extensive examples demonstrating parity with the classic Orleans model.
Features
Add feature-tour example demonstrating functional grain capabilities
The new \examples/feature-tour\ project provides a runnable application that exercises the functional grain runtime (\grainContract\ + \grainFor\) against a live Orleans silo. It includes a status matrix documenting support for features such as persistence, scheduling, call filters, request context, cancellation, contract versioning, streams, observers, broadcast channels, heterogeneous clustering, implicit stream subscriptions, placement, distributed transactions, streaming replies, reentrancy, and event sourcing. The example also documents known hazards and workarounds, such as the need for C\#-declared observer interfaces due to Orleans' Roslyn generator constraints and the requirement to pre-load assemblies reached only through F\#.
examples/feature-tour · high confidence
Add functional journaled twin to the bank-account example
The bank-account example now includes a functional, journaled implementation of the account grain alongside the existing event-sourced grain. This new twin uses the \journaledGrainFor\ computation expression and provides a typed API (\AccountApi\) that returns specific refusal reasons (e.g., \InsufficientFunds\, \NonPositiveAmount\) instead of silently ignoring rejected commands, and exposes the journal version directly. It delegates to the same domain logic (\applyEvent\, \handleCommand\) as the classic grain to ensure business rule parity while demonstrating the functional runtime's capabilities.
examples/bank-account/src/Domain · high confidence
Add shared type definitions and counter contract for functional runtime
New shared files (CounterContract.fs, Types.fs) define the client/server boundary for the functional counter grain and introduce core domain types (CounterState, ChatMessage, MetricEvent, etc.) used across the testbed.
testbed/src/Shared · high confidence
Added functional-runtime twin for the DashboardGrain
The SignalR Realtime example now includes a functional-runtime implementation of the DashboardGrain (DashboardGrainFunctional.fs) alongside the existing computation-expression version. This new grain exposes a typed API with separate operations for retrieving the current sequence number and fetching the latest metrics, while maintaining the same 2-second timer-based metric generation logic. This provides a modern, type-safe alternative for consuming the dashboard data via SignalR.
examples/signalr-realtime/src/Grains · high confidence
Feature tour adds examples for broadcast channels, call filters, cancellation, event sourcing, heterogeneous placement, implicit subscriptions, reentrancy, observers, persistence, and placement strategies
The feature tour example now includes comprehensive demonstrations of key Orleans capabilities using the functional runtime. Broadcast channels and implicit subscriptions are showcased with F\# consumer grains that automatically activate upon receiving messages. Call filters are demonstrated by intercepting and rejecting specific operations before they reach handlers. Cooperative cancellation is shown with a slow operation that respects cancellation tokens. Event sourcing is implemented using journaled grains with state upcasting and two different storage providers. Heterogeneous placement is proven in a two-silo cluster where grain types are hosted selectively. Reentrancy variants are tested, including whole-grain reentrancy and per-request interleaving predicates. Grain observers are demonstrated with a functional notifier and client-side recording observers. Persistence is shown with primary state holders and secondary persistent states, including explicit read/write/clear operations. Finally, placement strategies are demonstrated with stateless workers and custom placement providers.
examples/feature-tour/src/FeatureTour · high confidence
Introduce F\# event-sourced grain authoring model with compile-time C\# stub generation
The Orleans.FSharp.EventSourcing package now provides a declarative F\# computation expression (eventSourcedGrain { }) for defining event-sourced grains, including support for custom log-consistency storage adapters and configurable snapshot strategies. To bridge F\# definitions to Orleans, the Orleans.FSharp.Generator tool scans assemblies at build time for \[FSharpEventSourcedGrain\] attributes and emits minimal C\# stub classes via Scriban templates, enabling zero-handwritten-C\# integration for both typed and universal grain patterns.
src/Orleans.FSharp.EventSourcing · high confidence
Introduce functional transport and journal abstractions for Orleans
This change adds the core abstractions for the new functional grain transport in \src/Orleans.FSharp.Abstractions\. It introduces \FunctionalGrainReference\ to handle acknowledged, one-way, transactional, and server-streaming requests via a fixed payload codec, and \FunctionalJournal\ to manage durable event-sourced state using immutable F\# types wrapped in serializable cells. Additionally, it defines \FunctionalObserver\ for push-based notifications and \FunctionalTransport\ for admission flags and payload limits, enabling a codegen-free, type-safe communication layer for F\# grains.
src/Orleans.FSharp.Abstractions · high confidence
Introduce idiomatic F\# functional grain runtime with client configuration DSL and serialization policies
The Orleans.FSharp.Runtime library now provides a complete functional grain implementation, replacing the previous grain{} surface with a new set of core modules. Users can now configure Orleans clients using a dedicated F\# computation expression (ClientConfigBuilder.fs) that supports localhost, static gateway, and custom clustering modes, along with TLS and stream provider settings. The runtime introduces a functional activation model (FunctionalActivation.fs) and dispatch layer (FunctionalDispatch.fs) that handles grain lifecycle, reminders, timers, and implicit stream/broadcast subscriptions without requiring C\# code generation. It also includes a journaled event-sourcing capability (FunctionalJournal.fs) that integrates with Orleans' log-consistency providers, and exposes configurable F\# serialization policies (FSharpBinaryCodec) to handle payload encoding without attributes.
src/Orleans.FSharp.Runtime · high confidence
Launch of Orleans.FSharp documentation site on Starlight
The Orleans.FSharp documentation is now published as a standalone website built with Astro and Starlight, hosted at neftedollar.com/orleans-fsharp/. The site features a black theme, a comprehensive sidebar covering functional runtime, data/messaging, and legacy archives, and includes SEO optimizations such as Open Graph tags, Twitter cards, and JSON-LD structured data. It also supports agentic search discovery via registered MCP actions and maintains a synchronized mirror of the source Markdown documentation.
website · high confidence
New Orleans F\# project template with idiomatic functional grain API
A new 'Orleans F\# Project' template is available, providing a self-contained solution structure for building Orleans applications in F\#. The template targets .NET 10.0 and is configured to opt out of Central Package Management to ensure it restores standalone. It demonstrates an idiomatic functional API for defining grains, featuring a typed \CounterApi\ with \increment\, \decrement\, and \value\ operations, implemented via \grainFor\ and \FunctionalGrain.ref\. The included sample silo configures localhost clustering and memory storage, running a demo that exercises the counter grain. The template also includes property-based tests using FsCheck and Unquote to verify the counter's state transition logic.
templates/orleans-fsharp · high confidence
New Orleans.FSharp.Analyzers package with OF0001 async detection
A new analyzer package, Orleans.FSharp.Analyzers, is introduced to enforce idiomatic F\# usage in Orleans grain code. It includes the OF0001 rule, which flags the use of \async { }\ blocks in favor of \task { }\ within grain handlers. Users can suppress this warning using the provided \\[\<AllowAsync\>\]\ attribute when \async\ is genuinely required, such as for interop with Async-returning libraries. The analyzer is implemented as a CLI plugin using the FSharp.Analyzers.SDK and requires explicit invocation via the \fsharp-analyzers\ tool in CI environments, rather than running automatically during standard builds.
src/Orleans.FSharp.Analyzers · high confidence
New Orleans.FSharp.Sample project with comprehensive grain demonstrations
A new sample project has been added to demonstrate the Orleans.FSharp library's capabilities. It includes runnable examples for various grain patterns: a chat room using the functional runtime (spec 003), an event-sourced bank account, a leaderboard with grain-to-grain communication, and grains using the universal pattern (FSharpGrain.ref) without C\# stubs. The sample also showcases features like additional state, lifecycle hooks (onActivate/onDeactivate), reminders, timers, and typed result extraction via ask.
src/Orleans.FSharp.Sample · high confidence
New Orleans.FSharp.Testing library with mock, property-based, and web test harnesses
The Orleans.FSharp.Testing package introduces a comprehensive testing toolkit for Orleans.FSharp applications. It includes GrainMock for unit-testing grain interactions without a silo, GrainArbitrary and FsCheckHelpers for automatic property-based testing of F\# discriminated unions and state machines, and LogCapture for asserting structured log output. For integration testing, it provides TestHarness for in-process silo testing with memory storage and WebTestHarness for end-to-end HTTP endpoint testing, including a lightweight WebUnitTestHarness that injects a mock grain factory into an ASP.NET Core TestServer.
src/Orleans.FSharp.Testing · high confidence
New SignalR Realtime example with functional grain runtime
Added a new \examples/signalr-realtime\ project that demonstrates Orleans grains pushing real-time metrics to a browser dashboard via SignalR. The example uses the functional grain runtime (reusing the pure \generateMetrics\ function) instead of the deprecated computation expression, targeting .NET 10. It includes a co-hosted ASP.NET Core and Orleans setup, fixing a standalone-hosting assembly loading issue and correcting a JSON casing mismatch in the client-side JavaScript to ensure metrics render correctly.
examples/signalr-realtime · high confidence
New Starlight-based documentation website with custom UI components
The Orleans.FSharp documentation site has been redesigned using the Starlight framework, introducing a new layout and navigation structure. This update adds custom Astro components, including \DocBreadcrumb\ for consistent page navigation and \FeatureCard\ for displaying feature highlights with interactive hover states. The site now includes a comprehensive set of documentation pages covering the functional grain runtime, API reference, advanced topics like transactions and state migration, and interop guides for C\# consumers.
website/src · high confidence
New bank-account example with functional journaled grain runtime
The bank-account example now includes a functional journaled twin alongside the existing event-sourced implementation. This new version uses the \journaledGrainFor\ definition to manage state via an immutable event log, providing typed refusals for invalid operations (such as overdrafts or non-positive amounts) instead of silently ignoring them. The example demonstrates inter-account transfers, overdraft protection, and event replay, with property-based tests ensuring parity between the classic and functional implementations.
examples/bank-account · high confidence
New bank-transactions example demonstrating functional grain runtime parity
A new \examples/bank-transactions\ project has been added, providing a complete ACID transaction demo for Orleans. It features a 'functional twin' implementation (\AccountGrainFunctional.fs\) that mirrors the classic \FSharpTransactionalGrain\ model using the new \grainFor\ and \transactional\ APIs, allowing users to compare the two authoring styles. The example includes a solution with Domain, Silo, and Test projects, demonstrating atomic cross-grain transfers, overdraft handling, and consistent balance snapshots, alongside property-based tests that verify business logic parity between the classic and functional approaches.
examples/bank-transactions, examples/dashboard · high confidence
New functional chat-room grain with observer-based push notifications
The chat-room example now includes a functional twin of the classic chat grain (ChatGrainFunctional.fs) that implements full room domain logic including join/leave, message posting with validation, history queries, and typing indicators. Unlike the classic grain which relies on IChatObserver interfaces requiring C\# code generation, this functional implementation uses functional observers (RoomObserverApi) that work without code generation, enabling live push notifications from F\# clients. The classic grain remains available but is marked obsolete, serving as a reference for the deprecated observer model.
examples/chat-room/src/Grains · high confidence
New functional grain quickstart sample added
A new \quickstart-functional.fsx\ sample demonstrates the idiomatic F\# API for defining and running Orleans grains using the functional runtime, allowing users to define grains via plain F\# records without needing C\# interfaces or code generation. This complements the existing \quickstart.fsx\ sample, which continues to illustrate the classic interface-based authoring style.
samples · high confidence
New testbed for multi-silo F\# Orleans cluster with Redis clustering
A new testbed has been added to demonstrate a two-silo Orleans cluster using F\# silos communicating via Redis. This includes Dockerfiles for the client and silo services, a docker-compose configuration to orchestrate the environment, and a solution file that ensures the CodeGen generator and sample projects are correctly included for Release builds. The testbed also features a comprehensive stress test script that validates grain activation, throughput, state consistency, and silo distribution under load.
testbed · high confidence
Orleans.FSharp v1.0.0 release with idiomatic functional grain API
This release introduces a new idiomatic F\# API for Microsoft Orleans, replacing the previous universal message-passing surface with a functional grain runtime. The new API uses API records and computation expressions (grainContract/contract) to define grain contracts and definitions without per-project C\# code generation. It includes a new FSharpBinaryCodec for serializing F\# types (discriminated unions, records, options, etc.) using TypeShape, eliminating the need for \[GenerateSerializer\] attributes. The release also adds broadcast channels, functional observers, lifecycle hooks, and various parity features with Orleans. The old grain{} message-passing surface is marked obsolete.
src/Orleans.FSharp · high confidence
Repository open-sourcing and standardization
The repository is now open-source under the MIT License, introducing standard project governance files including a Code of Conduct, CONTRIBUTING guide, and issue/PR templates. It also adds a .gitleaks configuration to prevent accidental secret commits and establishes a .gitignore to exclude build artifacts, IDE settings, and AI assistant data. The project structure is formalized with a solution file (Orleans.FSharp.slnx), centralized build properties (Directory.Build.props/targets) for versioning and packaging, and a comprehensive CHANGELOG documenting the 5.0.0 functional-first release.
(repo-wide) · high confidence
Standalone functional chat room silo with push notifications
The chat-room silo now runs as a standalone F\# application using the functional grain runtime, enabling real-time push notifications via functional observers without requiring C\# source generators or observer interfaces. This change replaces the previous classic grain model setup, allowing the silo to operate independently while demonstrating parity with the original C\#-based example through a fully functional F\# implementation.
examples/chat-room/src/Silo · high confidence
Standalone functional chat room with C\# interop
The chat-room example now runs as a standalone solution featuring a fully functional grain implementation that supports real-time push notifications via functional observers (eliminating the need for generated observer interfaces). It also introduces a C\# interop layer, allowing the F\# grain to be hosted and called directly from C\# code through a facade interface, with F\# types like Result and List mapped transparently to their CLR equivalents.
examples/chat-room · high confidence
Typesafe-ids example now uses the functional grain runtime
The typesafe-ids example has been rewritten to demonstrate the new functional grain runtime alongside the classic grain authoring style. The example now includes functional equivalents for the User, Order, and Router grains (UserGrainFunctional.fs, OrderGrainFunctional.fs, RouterGrainFunctional.fs) which use the new \grainContract\ and \grainFor\ constructs. The classic \grain {}\ CE versions are kept as deprecated references. The example highlights three key F\# features: type-safe IDs using units of measure to prevent mixing up User and Order IDs at compile time, active patterns for message routing in the Router grain, and exhaustive matching for order state transitions. The project now targets .NET 10.0 and includes a new solution structure with Domain, Silo, and Domain.Tests projects.
examples/typesafe-ids · high confidence
Removals
Removed Specify workflow scaffolding and automation scripts
The \.specify\ directory has been completely removed, deleting the entire Spec-Driven Development scaffolding. This includes the project constitution, all Markdown templates (spec, plan, tasks, checklist, constitution, and agent-file), and the Bash automation scripts used to manage feature branches, validate prerequisites, and update AI agent context files. Users will no longer have access to the \/speckit\ command-line workflow or the associated project structure conventions.
.specify · high confidence
Behavioural changes
Bank account example now uses functional journaled grains
The bank-account example has been updated to demonstrate a functional, journaled grain model alongside the classic event-sourced grain. The silo now registers both the traditional \AddFSharpEventSourcedGrain\ and the new \AddFunctionalJournaledGrain\, allowing the application to interact with accounts via a direct API record (\AccountApi\) without requiring interface-based code generation. This change enables users to observe specific behaviors of the functional runtime, such as separate journals for independent operations and explicit handling of refused commands (which do not advance the journal version).
examples/bank-account/src/Silo · high confidence
Fable Fullstack example now uses the functional grain runtime
The Fable Fullstack example has been updated to demonstrate the new functional grain runtime alongside the legacy computation expression model. The server now exposes the \/api/ITodoApi/\*\ endpoints via a functional twin (\TodoGrainFunctional.fs\) that uses \grainFor\ and explicit \stateFrom\ persistence, while the original \grain {}\ implementation is retained as a deprecated reference. This change also resolves a startup issue in \WebApplicationBuilder\-based hosts by ensuring required assemblies are pre-loaded before Orleans initialization, preventing activation failures for memory storage grains.
examples/fable-fullstack · high confidence
Hello World example now runs standalone using the functional grain runtime
The Hello World example has been restructured into a standalone F\# project that utilizes the functional grain runtime (grainContract + grainFor) instead of the legacy computation-expression model. This change eliminates the need for a C\# CodeGen bridge, allowing the example to run directly from an F\# silo. The example demonstrates key functional runtime features, including typed grain references, concurrent GrainBatch operations, and pure state migration chains, while keeping the original grain {} definition as a deprecated reference.
examples/hello-world · high confidence
Legacy C\# bridge project for Orleans source generation archived
The Orleans.FSharp.CodeGen project has been introduced as a non-packable source archive containing legacy C\# Roslyn bridge code. This project provides backward-compatible concrete grain implementations (such as Counter, Echo, and Order) that delegate to F\# GrainDefinitions, enabling Orleans source generators to produce grain metadata for the older per-grain interface pattern. It is retained solely to support migration examples and integration tests, as new functional grains now utilize the typed API records and fixed proxies from Orleans.FSharp.Abstractions without requiring per-grain C\# stubs.
src/Orleans.FSharp.CodeGen · high confidence
Order processing example now supports a standalone functional grain runtime
The order-processing example now includes a full-parity functional twin (OrderGrainFunctional.fs) that replaces the original grain computation expression with a pure transition function, typed Result replies, and explicit persistence. This functional grain can run standalone in a silo, resolving a previous limitation where the original F\# grain required C\# code generation to be hosted. The example also fixes a standalone hosting gap by ensuring the memory reminder service assembly is force-loaded before the silo starts.
examples/order-processing · high confidence
Silo host rewritten in F\# with dual grain definitions and Redis configuration
The testbed silo entry point (Program.fs) has been rewritten in F\#, replacing the previous C\# implementation. It now explicitly configures Redis clustering and grain storage, resolves advertised IP addresses for Docker environments, and registers a F\# JSON serialization fallback. The silo defines two grains (Counter and Chat) using the standard F\# grain builder and registers a new functional-runtime equivalent of the Counter grain (CounterGrainFunctional.fs) alongside the original, allowing the client to interact with the new functional-style grain definition.
testbed/src/Silo · high confidence
Fixes
Dashboard now uses a functional grain twin for SignalR updates
The dashboard hub and application startup have been rewritten to use a functional grain twin (DashboardFunctionalDef) instead of the classic Orleans grain model. This change resolves a critical issue where F\# assemblies lacked the necessary source-generated attributes for the classic grain interface, which previously caused connection crashes with 'Could not find an implementation for interface IDashboardGrain'. The new implementation registers the functional grain in Program.fs and updates DashboardHub.fs to call the functional API (DashboardApi.ref), ensuring stable real-time metric delivery to the browser client.
examples/signalr-realtime/src/Web · high confidence
Test coverage
Client-side stress test harness for Orleans.FSharp; Expanded integration and property-based test coverage for Orleans.FSharp; New CI validation scripts for documentation integrity, release packaging, and analyzer smoke tests.
Dependencies
Adopts Central Package Management and upgrades to .NET 10 / Orleans 10.x
The project now uses Central Package Management (Directory.Packages.props) to centrally version all dependencies, ensuring consistency across the solution. This change upgrades the target framework to .NET 10.0 and sets the minimum supported Microsoft Orleans version to 10.1.0 (with CI testing against 10.2.2). Key library updates include FSharp.Core 10.1.201, Microsoft.Extensions packages 10.0.9, and test tooling such as xunit 2.9.3 and FsCheck 3.3.3. Additionally, OpenTelemetry.Api is pinned to 1.16.0 to address a vulnerability in the Dashboard dependency.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 68 → 71 (+3.6)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 73 → 72 (-0.9)
- Architecture 95 → 100 (+4.8)
- Maturity 70 → 69 (-1.1)
- Readiness 68 → 80 (+11.7)
- Security 80 → 87 (+7.3)
- Performance 64 → 68 (+4.6)
Resolved (50)
- AstWalker.collectAsyncRanges (cognitive 32) (src/Orleans.FSharp.Analyzers/AsyncUsageAnalyzer.fs)
- AstWalker.collectAsyncRanges (cyclomatic 50) (src/Orleans.FSharp.Analyzers/AsyncUsageAnalyzer.fs)
- ClientConfigModule.applyToBuilder (cyclomatic 22) (src/Orleans.FSharp.Runtime/ClientConfigBuilder.fs)
- Discovery.discoverEventSourcedGrains (cognitive 67) (src/Orleans.FSharp.Generator/Discovery.fs)
- Duplicated block (11 lines × 2) (src/Orleans.FSharp.Runtime/SiloConfigBuilder.fs)
- Duplicated block (12 lines × 2) (src/Orleans.FSharp.Runtime/SiloConfigBuilder.fs)
- Duplicated block (17 lines × 3) (src/Orleans.FSharp/GrainDirectory.fs)
- Duplicated block (18 lines × 2) (src/Orleans.FSharp/GrainBuilder.fs)
- Duplicated block (19 lines × 3) (src/Orleans.FSharp.Abstractions/IFSharpGrainInterfaces.cs)
- Duplicated block (20 lines × 2) (src/Orleans.FSharp/GrainBuilder.fs)
- Duplicated block (20 lines × 2) (src/Orleans.FSharp/GrainBuilder.fs)
- Duplicated block (21 lines × 2) (src/Orleans.FSharp/GrainBuilder.fs)
- Duplicated block (5 lines × 2) (src/Orleans.FSharp/FSharpBinaryCodec.fs)
- Duplicated block (6 lines × 2) (src/Orleans.FSharp.EventSourcing/EventSourcedGrainDiscovery.fs)
- Duplicated block (6 lines × 3) (src/Orleans.FSharp.Runtime/SiloConfigBuilder.fs)
- Duplicated block (7 lines × 2) (src/Orleans.FSharp/FSharpBinaryCodec.fs)
- Duplicated block (7 lines × 2) (testbed/src/Client/Program.fs)
- Duplicated block (8 lines × 2) (src/Orleans.FSharp.Runtime/SiloConfigBuilder.fs)
- Duplicated block (8 lines × 2) (src/Orleans.FSharp/Streaming.fs)
- Duplicated block (8 lines × 4) (src/Orleans.FSharp/StreamProviders.fs)
- …and 30 more
New (142)
- Dependency advisory scan runs only on code events
- Documentation: no installation or build instructions (README.md)
- Documentation: written for insiders (examples/bank-transactions/README.md)
- Documentation: written for insiders (examples/chat-room/README.md)
- Duplicated block (10 lines × 2) (examples/feature-tour/src/FeatureTour/Program.fs)
- Duplicated block (11 lines × 2) (examples/feature-tour/src/FeatureTour/Interleaving.fs)
- Duplicated block (11 lines × 2) (src/Orleans.FSharp.Abstractions/FunctionalObserver.cs)
- Duplicated block (11 lines × 2) (testbed/src/Client/Program.fs)
- Duplicated block (12 lines × 3) (examples/hello-world/src/Grains/CounterGrainFunctional.fs)
- Duplicated block (12 lines × 4) (examples/hello-world/src/Grains/CounterGrainFunctional.fs)
- Duplicated block (14 lines × 2) (src/Orleans.FSharp.Abstractions/FunctionalTransportSerialization.cs)
- Duplicated block (15 lines × 2) (examples/hello-world/src/Grains/CounterGrainFunctional.fs)
- Duplicated block (22 lines × 7) (src/Orleans.FSharp.Abstractions/FunctionalObserver.cs)
- Duplicated block (23–25 lines × 2) (src/Orleans.FSharp.Abstractions/FunctionalRequestBody.cs)
- Duplicated block (25 lines × 3) (src/Orleans.FSharp.Abstractions/FunctionalObserver.cs)
- Duplicated block (37–41 lines × 3) (src/Orleans.FSharp.Abstractions/FunctionalTransportSerialization.cs)
- Duplicated block (8 lines × 2) (src/Orleans.FSharp.EventSourcing/EventSourcedGrainDiscovery.fs)
- Inconsistent naming for similar test facade methods that accept a string argument and likely perform a similar 'send message' or 'invoke action' behavior. 'SAY' and 'Shout' are semantically distinct verbs (volume/intent) but structurally identical in this test context (Facade methods taking a string). Given the other facades use 'Join', 'Post', 'MemberCount', etc., these two stand out as using imperative verbs for actions where a noun or standard verb might be expected, and they differ from each other without a clear semantic distinction in the test harness context.
- Low IaC: DS-0026 (testbed/Dockerfile.silo)
- Medium IaC: WD-COMPOSE-0002 (testbed/docker-compose.yml)
- …and 122 more
Changes since last survey
- 289 commits — 268 feature/other, 21 fixes
By area
- tests/Orleans.FSharp.Integration — 39 commits
- website/src — 36 commits
- src/Orleans.FSharp — 34 commits
- tests/Orleans.FSharp.Tests — 30 commits
- (root) — 21 commits
- examples/feature-tour — 20 commits
- specs/003-functional-grain-runtime — 15 commits
- src/Orleans.FSharp.Runtime — 15 commits
- (repo) — 10 commits
- docs/functional-grains.md — 9 commits
- specs/004-orleans-parity-extensions — 8 commits
- .github/workflows — 5 commits
- examples/chat-room — 5 commits
- docs/api-reference.md — 4 commits
- tests/Orleans.FSharp.SeamProof — 4 commits
- src/Orleans.FSharp.Abstractions — 3 commits
- src/Orleans.FSharp.CodeGen — 3 commits
- docs/resilience.md — 2 commits
- examples/signalr-realtime — 2 commits
- examples/typesafe-ids — 2 commits
Notable commits
- fix: Add Phase 0 seam-proof project with fixed transport and activation spike
- fix: Add protocol, fixed-codec, and binding test suites
- fix: Add the fixed functional transport types and explicit codecs
- fix: Derive every verdict from what the section observed, and fail on regression
- fix: Fix the testbed Release build by listing Sample and Generator in Testbed.slnx
- fix: Merge pull request #28 from Neftedollar/fix/pin-sdk-10-0-201
- fix: Merge pull request #30 from Neftedollar/fix/resilience-and-stream-cursor
- fix: Name the field a cleared state broke on, and fix two doc snippets
- fix: Publish the fixed transport codecs through an assembly manifest provider
- fix: fix(004): bind the journal facade to the invocation that resolved it
- fix: fix(004): do not read argument 0 of an invokable that has no arguments
- fix: fix(004): reject a second grain type binding one actor brand's interleave predicate
- fix: fix(004): surface a wrong-typed broadcast item instead of dropping it silently
- fix: fix: await the asTaskSeq stream subscription on first pull, and probe readiness in its test
- fix: fix: complete serialization hardening and 5.0 release gates (#34)
- fix: fix: harden persistence upgrades for 5.0
- fix: fix: make the GrainResilience deadline fire for the caller
- fix: fix: validate and run the packaged functional template
- fix: fix: validate silo startup before runtime initialization (#35)
- fix: samples: add a functional-runtime quickstart, fix the classic one's silent crash
- …and 269 more
API surface
- 1 added · 0 removed (a removed endpoint is potentially breaking)
Added endpoints (1)
- GET /exercise
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Neftedollar/orleans-fsharp was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 39baa5e44d6f883f562a8daf01b72c2aed24eedd — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-90d5d2fe38ee.