Thank you for your interest in contributing to EricksonLopez.DistributedLock! This project is an enterprise-grade, high-performance distributed locking framework for .NET 8, .NET 9, and .NET 10 with 100% Native AOT compatibility and zero-allocation error handling.
To maintain professional software quality and long-term maintainability, all contributions must adhere to the standards outlined below.
All contributors and maintainers must abide by our Code of Conduct. Please report any unacceptable behavior to ericksonlopezf@gmail.com.
Every pull request must preserve the following non-negotiable architectural invariants:
- Native AOT Compatibility (
IsAotCompatible=true):- Zero trimmer warnings (
IL2026,IL3050). - No runtime reflection or dynamic IL emission in hot paths.
- All concrete provider classes and lock handles must be
sealedto facilitate devirtualization.
- Zero trimmer warnings (
- Zero-Allocation Error Handling (Result Pattern):
- Contention, timeout, or lock loss must return typed
Result<T>orResult<IAsyncDisposable>without throwing exceptions.
- Contention, timeout, or lock loss must return typed
- One Type Per File:
- Every C# file must declare at most one top-level type whose name matches the filename.
- Explicit Usings (
ImplicitUsings=disable):- Solution-wide
ImplicitUsingsis disabled. All namespaces must be explicitly imported to guarantee clarity, deterministic compilation, and full isolation.
- Solution-wide
- MIT License Header:
- Every
.csfile must begin with:// Copyright © Erickson Lopez. MIT License.
- Every
- Zero
[Obsolete]Policy:- No
[Obsolete]attributes or deprecated API calls are permitted in the codebase.
- No
- Document Naming Convention (kebab-case):
- All markdown documentation files must use lowercase kebab-case (e.g.,
functional-parity-audit.md,adr-001-distributed-lock-abstraction.md), with the sole exception of standard tooling files (README.md,LICENSE,SECURITY.md,SUPPORT.md,CONTRIBUTING.md,CHANGELOG.md,CODE_OF_CONDUCT.md,PULL_REQUEST_TEMPLATE.md).
- All markdown documentation files must use lowercase kebab-case (e.g.,
- English-First Documentation & Code:
- All comments, XML documentation, diagnostic messages, ADRs, and documentation must be written in clear technical English.
- .NET 10 SDK (or .NET 8/9 SDK)
- PowerShell 7+
- Docker (required for integration tests using Testcontainers)
# Restore dependencies
dotnet restore EricksonLopez.DistributedLock.slnx
# Compile with warnings as errors and full documentation generation
dotnet build EricksonLopez.DistributedLock.slnx -c Release /warnaserror
# Execute all unit and architecture tests
dotnet test EricksonLopez.DistributedLock.slnx -c Release
# Verify formatting and analyzer conventions
dotnet format --verify-no-changesBefore submitting major modifications to providers or abstractions, audit mutation resistance:
cd src/EricksonLopez.DistributedLock.PostgreSql
dotnet-stryker --config-file stryker-config.json- Fork the repository and create a feature branch (
feature/your-feature-nameorfix/issue-description). - Implement your changes adhering to the architectural standards.
- Add or update unit tests to ensure 100% test symmetry and full branch coverage.
- Run
dotnet testanddotnet formatlocally. - Submit a pull request against
main. All CI checks and automated architectural tests must pass before review.
For architectural inquiries, discussions, or assistance, contact:
- Maintainer: Erickson Lopez
- Email: ericksonlopezf@gmail.com
- GitHub Issues: Issue Tracker