review-code-craft
Skill11k starsChanged yesterdayMITView on GitHub
Code craft lens for Orleans — control flow, function shape, scope, signatures, conditions, naming, units, and compiler strictness. Use during code review, and when writing or refactoring code.
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 3 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Read the change top-down as a newcomer would.
- Distinctive: line 16
Prefer refactors that remove code or branches to those that add structure.
- Distinctive: line 17
Keep behavior identical when refactoring, verified by existing tests.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Code craft lens
Apply with root AGENTS.md and .editorconfig. This lens examines the code as
the next engineer reads it: control flow, function shape, scope, signatures, and
names. It covers changed code; unrelated refactoring stays out of scope.
Procedure
- Read the change top-down as a newcomer would.
- Flag control flow that hides cases, functions that do more than one thing, mutable state with more than one copy, and names that misdescribe.
- Prefer refactors that remove code or branches to those that add structure.
- Keep behavior identical when refactoring, verified by existing tests.
- Skip formatting the build already enforces.
Checklist
- Push
ifs up,fors down. Callers decide which case applies and pass helpers the whole batch; the coordinating method owns state mutation while the helpers it calls compute results without side effects (matklad). - Functions fit on a screen. A function reads as one unit; one beyond about 70 lines prompts a check for mixed responsibilities.
- Smallest scope. Values are computed close to their use, so nothing can invalidate a check between the check and the use; each piece of mutable state has one owner and one copy.
- Simple signatures. Each extra return dimension (nullability, error result, async) adds branches to every caller, so a method returns the simplest shape its contract allows (
voidoverbooloverintoverint?). - Positive conditions. Conditions read in positive form (
index < count, not!(index >= count)); compound conditions whose terms need different handling are split, and each branch is handled deliberately. - Explicit options. Behavior-critical choices are visible at the call site or the configuration boundary that owns them.
- Precise names. Names are precise nouns and verbs with one meaning each; abbreviations are limited to established terms (ID, ETag, GC, RPC).
- Units in types. Durations use
TimeSpan, instants useDateTimeOffsetin new APIs and the established type in existing contracts, and raw numbers carry the unit in the name (timeoutMs). - Grouped names. In new code, related names share a prefix so they sort together (
LatencyMax,LatencyMin), unless local conventions establish another pattern. - Compiler strictness. Code builds cleanly under warnings-as-errors and the repository's nullable settings; each null-forgiving operator or suppression relies on an invariant that is evident nearby or stated in a comment.
Findings
Report findings ordered by severity, each with the location, the principle at stake, and a concrete fix.
Trending
More talk lately.about the whole repository
Who's talking about dotnet/orleans
- Stack Overflow“Any good implementation of Actors for C#?”Stack Overflow · Jan 2, 2014 · 56 votes
- A Hacker News story“Orleans – Distributed Actor Model”Hacker News · Jan 26, 2015 · 36 points
- Stack Overflow“Any good implementation of Actors for C#?”Stack Overflow · Apr 11, 2014 · 25 votes
- Stack Overflow“Orleans slow with minimalistic use case”Stack Overflow · Nov 4, 2022 · 14 votes
- Stack Overflow“In Orleans when to use IGrainFactory vs IClusterClient”Stack Overflow · Feb 26, 2020 · 10 votes
The biggest 5 of 90 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 90
Talked about on GitHub, Stack Overflow, Hacker News and the web (90 times).
On GitHub · 50
- May 6, 2016Add public methods to supress visibility checks for compilation — dotnet/roslyn8 reactions · 15 comments
- Feb 13, 2024Orleans Broadcast Channels - Relationship between publisher and consumer is unclear — dotnet/docs7 reactions · 3 comments
- Oct 7, 2020Can more non-cryptographic hash algorithms be added into .NET BCL? — dotnet/runtime5 reactions · 21 comments
- May 19, 2019Microsoft.Azure.Storage.Common dependency — Azure/azure-cosmos-table-dotnet4 reactions · 6 comments
- Nov 29, 2024fix: target current LTS framework for `Microsoft.AspNetCore.Connections.Abstractions` — dotnet/aspnetcore3 reactions · 1 comment
45 more on GitHub
- Jul 3, 2024[Orleans] Update grain timer docs to account for new IGrainTimer APIs — dotnet/docs3 reactions · 2 comments
- Nov 7, 2022Perf-trap with `IBinaryInteger<T>.WriteLittleEndian` — dotnet/runtime3 reactions · 6 comments
- Nov 5, 2025Corrected Membership Session Handling — OrleansContrib/Orleans.Providers.MongoDB2 reactions · 2 comments
- May 23, 2025Proposal: Upstream MongoDB providers into dotnet/orleans — OrleansContrib/Orleans.Providers.MongoDB2 reactions · 8 comments
- Dec 19, 2023bugfix: using collection name as key for caching collections — OrleansContrib/Orleans.Providers.MongoDB2 reactions · 2 comments
- Jan 5, 2022.NET 7 Improvements — Dotnet-Boxed/Templates2 reactions
- Mar 8, 2020F# compiler warnings in .NET Core 3.1 — dotnet-websharper/core2 reactions · 5 comments
- Nov 7, 2019Clustering: support extended membership protocol — OrleansContrib/Orleans.Providers.MongoDB2 reactions · 4 comments
- Oct 29, 2026chore(deps): update orleans redis providers to 10.4.1 — thomhurst/Respire1 reaction · 3 comments
- Jul 8, 2026[API Proposal]: Amend `WritableMemoryStream` and `ReadOnlyMemoryStream` to derive from `Stream`, not `MemoryStream` — dotnet/runtime1 reaction · 6 comments
- Feb 9, 2026Bump Microsoft.Orleans.Persistence.AzureStorage from 10.0.0 to 10.0.1 — Gibbs-Morris/mississippi1 reaction · 1 comment
- Feb 9, 2026Bump Microsoft.Orleans.Clustering.AzureStorage from 10.0.0 to 10.0.1 — Gibbs-Morris/mississippi1 reaction · 1 comment
- Feb 9, 2026Bump Microsoft.Orleans.Client from 10.0.0 to 10.0.1 — Gibbs-Morris/mississippi1 reaction · 1 comment
- May 29, 2025[New article]: [Orleans] Add doc/details for Grain Migration — dotnet/docs1 reaction · 2 comments
- Jan 24, 2024Upgrade to Orleans 8 — VincentH-Net/Orleans.Multitenant1 reaction · 12 comments
- Aug 15, 2023Update the KubernetesClient NuGet package. — OrleansContrib/Orleans.Clustering.Kubernetes1 reaction
- Nov 30, 2022Fixed OrleansAdventure.sln broken link to github — dotnet/docs1 reaction
- Aug 17, 2022Fixed issue when EventFlowLogger throws on duplicate log message arguments — Azure/diagnostics-eventflow1 reaction
- Mar 28, 2017Evaluate sqlite as a replacement for BDB — zcash/zcash1 reaction · 7 comments
- Oct 15, 2026Bump Microsoft.Orleans.EventSourcing from 10.1.0 to 10.4.0 — devlooped/CloudActors0 reactions
- Oct 15, 2026Bump Microsoft.Orleans.CodeGenerator from 10.1.0 to 10.4.0 — devlooped/CloudActors0 reactions
- Oct 15, 2026Bump Microsoft.Orleans.Clustering.AzureStorage from 10.1.0 to 10.4.0 — devlooped/CloudActors0 reactions
- Oct 7, 2026Bump the dotnet group with 7 updates — IvanMarkitan/dotnet-docs0 reactions
- Sep 18, 2026Bump Microsoft.Orleans.Reminders and Microsoft.Orleans.Reminders.AzureStorage — en-gen/Wayfinder0 reactions · 1 comment
- Sep 18, 2026Bump Microsoft.Orleans.Reminders and Microsoft.Orleans.Sdk — en-gen/Wayfinder0 reactions
- Sep 16, 2026Bump the dotnet group with 6 updates — zbalkan/docs0 reactions
- Sep 16, 2026Bump the dotnet group with 5 updates — zbalkan/docs0 reactions
- Sep 16, 2026Bump the dotnet group with 7 updates — zbalkan/docs0 reactions
- Sep 16, 2026Bump the dotnet group with 7 updates — IvanMarkitan/dotnet-docs0 reactions
- Sep 16, 2026Bump the dotnet group with 6 updates — IvanMarkitan/dotnet-docs0 reactions
- Sep 16, 2026Bump the dotnet group with 4 updates — IvanMarkitan/dotnet-docs0 reactions
- Sep 9, 2026Bump the dotnet group with 10 updates — zbalkan/docs0 reactions
- Sep 9, 2026Bump the dotnet group with 7 updates — IvanMarkitan/dotnet-docs0 reactions
- Sep 9, 2026Bump Microsoft.Orleans.Sdk and Microsoft.Orleans.Server — IvanMarkitan/dotnet-docs0 reactions
- Jul 31, 2026Bump Microsoft.Orleans.Persistence.AzureStorage from 10.2.1 to 10.2.2 — en-gen/Wayfinder0 reactions
- Jul 31, 2026Bump Microsoft.Orleans.EventSourcing from 10.2.1 to 10.2.2 — en-gen/Wayfinder0 reactions
- Jul 31, 2026Bump Microsoft.Orleans.Clustering.AzureStorage from 10.2.1 to 10.2.2 — en-gen/Wayfinder0 reactions
- Jul 30, 2026Bump the orleans group with 4 updates — rick-dev-creator/Observa0 reactions
- Apr 29, 2026Bump Microsoft.Extensions.Hosting and 3 others — IEvangelist/docs0 reactions
- Apr 29, 2026Bump the dotnet group with 6 updates — IEvangelist/docs0 reactions
- Apr 22, 2026Bump Microsoft.Extensions.Hosting and 4 others — IEvangelist/docs0 reactions
- Apr 22, 2026Bump the dotnet group with 3 updates — IEvangelist/docs0 reactions
- Apr 22, 2026Bump Microsoft.Extensions.Hosting and 7 others — TimShererWithAquent/dotnet-docs0 reactions
- Apr 22, 2026Bump the dotnet group with 8 updates — TimShererWithAquent/dotnet-docs0 reactions
- Apr 20, 2026Bump Microsoft.Orleans.Core and Microsoft.Orleans.Core.Abstractions — mivertowski/Orleans.GpuBridge.Core0 reactions
On Stack Overflow · 30
- Jan 2, 2014Any good implementation of Actors for C#?56 votes
- Apr 11, 2014Any good implementation of Actors for C#?25 votes
- Nov 4, 2022Orleans slow with minimalistic use case14 votes
- Feb 26, 2020In Orleans when to use IGrainFactory vs IClusterClient10 votes
- Dec 12, 2015Orleans cluster communication7 votes
25 more on Stack Overflow
- Apr 6, 2016Using SQL Server as Orleans storage6 votes · 1 answer
- Jul 8, 2015MSR Orleans, How does PlacementStrategy work?5 votes
- Apr 6, 2016Using SQL Server as Orleans storage4 votes
- Jan 14, 2022How to configure TestClusterBuilder such that the test cluster has access to SMSProvider?3 votes
- Jul 22, 2021Is it possible to run Microsoft Orleans in classic ASP.NET MVC 43 votes
- May 20, 2019What is the Relaese date for Microsoft Orleans which can support service fabric?3 votes
- May 9, 2016How to make simple state presistance work in MS Orleans?3 votes
- Dec 16, 2015Getting exceptions when running basic orleans application3 votes
- May 22, 2017How can I start the server with the code configuration rather than the XML file configuration?2 votes
- Aug 8, 2021Orleans When Use RedisGrainStorage for "PubSubStore" throw GrainReferenceNotBoundException1 vote
- Mar 31, 2021Orleans Multi Region Deployments1 vote · 1 answer
- Dec 13, 2019How to properly inherit from tuples so that serializer generation from orleans is correct?1 vote
- Jan 19, 2019Asynchronous message passing in .NET1 vote
- Jan 11, 2019Understanding Elixir1 vote
- Jul 31, 2018microsoft orleans how to IServiceCollection replace to Castle Windsor1 vote
- Jun 2, 2016what could be reason for client silo not getting initialized in azure?1 vote
- Oct 5, 2015Saving state that resides in POCO/DTO using Actor Model1 vote
- Jul 26, 2024Orleans IPersistentState POCO Namespace Versioning problems0 votes
- Dec 22, 2019MSOrleans 2.0 Ado.net Persistent0 votes
- Mar 6, 2019Orleans - Custom TCP Socket Connection0 votes
- Nov 15, 2017Orleans - how to implement storage sharding by Tenant with AdoNetStorageProvider0 votes
- Oct 28, 2016"key was not present in the dictionary" when using generic orleans grains0 votes
- Jun 2, 2016Serializers for Orleans streams payload classes0 votes
- Mar 15, 2016Orleans Extension not installed0 votes
- Dec 12, 2015Orleans Error while Initializing Orleans Client0 votes
On Hacker News · 9
- Jan 26, 2015Orleans – Distributed Actor Model36 points · 19 comments
- Jun 23, 2016Orleans – Distributed Virtual Actor Model from Microsoft Research10 points · 1 comment
- Jan 23, 2015Microsoft Orleans – Distributed actor system open sourced – GitHub5 points
- Feb 22, 2017Orleans – Distributed Virtual Actor Model v1.44 points
- Jul 12, 2024Microsoft Orleans v8.2.02 points
4 more on Hacker News
- Nov 7, 2023Orleans v7.2.3 Released2 points
- Dec 5, 2019Orleans: Cross-platform framework for building distributed apps in .NET2 points · 1 comment
- Jul 7, 2017Microsoft Orleans v1.5.0 (Distributed Virtual Actor Framework for Dotnet)2 points
- Feb 18, 2015Microsoft Research New Orleans Framework2 points
On the web · 1
- Sep 17, 2018Distributed tracing and Orleans · Issue #4992 — google.com
In this repository10 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs/AGENTS.mdAGENTS.md
- samples/AGENTS.mdAGENTS.md
- test/AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- code-reviewSkill
- review-architectureSkill
- review-invariantsSkill
- review-performanceSkill
- review-testingSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

