Repository navigation
Contributing
Arnel Robles edited this page Sep 29, 2026
·
1 revision
Comment /take on an issue to get it assigned. Open a PR from a feature branch; do not push to master.
-
Zero dependencies in the core packages. A PR that adds a NuGet reference to
CaromorCarom.Extensionswill be declined regardless of what it buys. - A bug fix needs a test that fails without it. Either write the failing test first, or revert the fix and show the test go red. Say in the PR which production line you reverted.
-
Plain xUnit
Assert. No assertion libraries. -
MPL-2.0 header on every source file under
src/. Copy the two lines from any existing file. -
Public API changes show up in
tests/Carom.ApiApproval.Tests. Commit the updated approved file together with the change that caused it, and call out the change in the PR body. - No em dashes in code, comments, or docs.
dotnet build -c Release
dotnet testThe full suite runs in about 90 seconds. Time-dependent tests use the injectable clock (CushionState/ThrottleState take a Func<long> timestamp); new time-dependent tests should too, not Task.Delay.
Written from the Carom source. The repository is the source of truth; if a page disagrees with the code, the code wins. Licensed MPL-2.0.
Core
Carom.Extensions
Integrations
Project