Contributing¶
Contributions are welcome. go-ruby-securerandom/securerandom is built to a small
set of non-negotiable rules — they are what keep it pure-Go, correct, and
MRI-compatible. Please read these before opening a pull request.
Hard rules¶
- Build from source — no vendoring. Everything compiles from source. Being able to compile from source is a guarantee of independence.
- 100% test coverage target, enforced in CI. New code ships with tests, and coverage is a CI gate. Fill the error branches, not just the happy path.
- All GitHub content in English. Issues, pull requests, commits, comments, and discussions are English-only.
- Differential testing against MRI. Correctness is defined by reference Ruby.
Each method is run through both
rubyand this library and the outputs are compared for the same format, length, charset and UUID bit-layout — not approximated from memory. Inject a fixedRandSourcewhen exact bytes are asserted. - Pure Go, cgo disabled. The whole point is a single static binary with no C
toolchain. Code must build with
CGO_ENABLED=0. The SIMD encoders are go-asmgen Plan 9 assembly, not C — if a feature seems to need C, it needs a pure-Go path instead. - Randomness stays injectable. Entropy comes from the
RandSourceseam; the formatting is deterministic and testable. Never read a live source directly from a formatter. - A reusable library, not the interpreter. This module implements the deterministic formatting layer. Anything that needs a live Ruby binding belongs in the consumer, not here.
Workflow¶
- Pick or open an issue describing the change.
- Work test-first: add the differential / unit tests, then make them pass.
-
Run the full suite with coverage and confirm the gate is green:
-
Open a PR in English, referencing the issue.
Where things live¶
The library is in
github.com/go-ruby-securerandom/securerandom.
This documentation site is in
github.com/go-ruby-securerandom/docs.
Start from the Usage & API page and the Roadmap to find
the right place for your change.