Contributing
Thank you for considering contributing to Slncs! Because this project is still experimental, early feedback and focused contributions are especially valuable.
Ways to Contribute
Type | Examples |
---|---|
Feedback | Ergonomics, confusing behavior, missing docs |
Bug reports | Crashes, incorrect .slnx , build forwarding issues |
Feature proposals | Open an RFC issue with rationale + alternatives |
Documentation | Clarify concepts, add examples, fix typos |
Tests | Edge cases (paths, duplicates, unusual folder layouts) |
Project Structure (High-Level)
Path | Purpose |
---|---|
Slncs/ |
Core DSL library (fluent solution builder) |
SlncsGen/ |
Roslyn scripting host producing .slnx |
Slncs.Sdk/ |
MSBuild tasks + SDK packaging (SlncsExec, SlnxParse) |
Slncs.Tool/ |
slncs-build tool (pure script helper) |
samples/ |
Example wrapper + script usage |
tests/ |
Unit & end-to-end tests |
docs/ |
DocFX site content |
Development Workflow
# Clone
git clone https://github.com/<you>/Slncs.git
cd Slncs
# Build everything
dotnet build
# Run tests
dotnet test
# Try sample wrapper
dotnet build samples/template/MyCsSln.slncs
# Try pure script mode (create a single .slncs file)
dotnet run --project src/Slncs.Tool -- samples/pure/MyCsSln.slncs
Branching & PRs
- Base all changes on
main
unless instructed otherwise. - Keep PRs small & focused; large multi-theme PRs are harder to review.
- Include tests for new behavior or clearly justify why tests are not needed.
- Update or add documentation in
docs/
if user-visible behavior changes.
Commit Message Guidelines (Conventional Commits)
This project uses Conventional Commits for commit messages. Prefix your commit message with one of the following:
feat
: New featurefix
: Bug fixdocs
: Documentation only changestest
: Adding missing tests or correcting existing testsrefactor
: Code refactoringperf
: Performance improvementbuild
: Changes that affect the build system or external dependenciesci
: Changes to our CI configuration files and scriptschore
: Other changes that don't modify src or test files
Use the imperative, present tense: "change" not "changed" nor "changes". Don't capitalize the first letter.
<type>[optional scope]: <description>
RFC Process
For non-trivial features or schema additions:
- Open an issue labeled
rfc
. - Provide: Problem, Motivation, Proposed Design, Alternatives, Risks.
- Collaboratively refine; a maintainer will mark as accepted / needs revision / declined.
- Submit implementation PR referencing the RFC issue.
Testing Guidance
Test Type | Location | Notes |
---|---|---|
DSL basics | tests/Slncs.Tests/ |
Generator smoke and DSL composition |
Task behavior | tests/Slncs.Sdk.Tests/ |
SlncsExec & SlnxParse behavior |
End-to-end | tests/E2E.Tests/ |
Full wrapper & pure script build pipelines |
Add tests where bugs could reappear (regressions). Deterministic ordering assertions are especially helpful.
Coding Style
- Prefer explicit, readable code over cleverness in core tasks.
- Keep public surface documented (XML docs).
- Avoid unnecessary dependencies to keep package size minimal.
Performance Considerations
If adding logic in generator or tasks:
- Avoid repeated disk scans.
- Defer expensive work until needed (lazy patterns welcome).
Security Considerations
Scripts execute arbitrary C# during build:
- Do not add automatic network calls or side-effects without explicit user opt-in.
- Validate file existence gracefully (log & continue where safe).
Reporting Security Issues
For any security-sensitive finding, open a GitHub security advisory or contact the maintainer privately—avoid filing public issues first.
License
All contributions are under the project’s MIT license. By submitting a PR you agree to license your work accordingly.
Recognition
We plan to maintain a CONTRIBUTORS section or acknowledgements after early stabilization. Your early feedback directly shapes the future direction.
Thank you for helping explore a simpler way to express solution structure!