Skip to content
skyl

Contributing

How to propose a change, and what CI will run.

skyl is a small library with an unusually explicit standard for what "done" means. Reading Engineering Rules first will save you a round trip — they are the checklist a reviewer actually applies.

Before you start#

Open an issue for anything larger than a bug fix. The project has explicit non-goals, and a change that conflicts with one is better discussed than written.

Good first contributions:

  • A cassette recording of a real provider exchange. One contributor with a key records; everyone else replays offline, forever. This is the single most valuable thing you can contribute right now.
  • A feature-matrix correction. If a cell no longer matches the code, that is a bug — and making drift somebody's problem is the only way it gets fixed.
  • An adapter for a provider whose API is genuinely a different shape.

The DCO#

Every commit must be signed off:

Terminal
git commit -s -m "fix: correct the retry-after cap"

That adds a Signed-off-by line certifying you have the right to submit the work. CI enforces it, and a repository hook can add it for you:

Terminal
git config core.hooksPath .githooks

What CI runs#

CheckWhat it means for you
go build per module, with GOWORK=offEach module must resolve on its own — the workspace is for local development only.
go test ./...Unit tests, under -race.
go test -tags=sandbox ./...The full stack over real sockets. Needs no credential.
golangci-lintThe configuration is in the repository.
Coverage thresholdNew code needs tests. §3.1: every exported function has one.
govulncheck, CodeQL, ScorecardSupply chain.
DCOEvery commit signed off.

The -tags=integration suite is not run in CI — it needs real keys and costs money. Run it locally if your change touches an adapter's wire mapping.

The rules that catch people out#

Adding an adapter#

Every adapter runs the shared contract suite in internal/providertest. It enforces the adapter rules uniformly, so a rule added there is enforced everywhere at once and no adapter can regress behind another's tests.

See Writing an Adapter.

Commit messages#

Conventional commits: feat:, fix:, docs:, test:, refactor:, chore:. The subject is lowercase and imperative. Explain why in the body — the diff already says what.

Releasing#

Contributors do not cut releases. If your change is user-visible, add a CHANGELOG.md entry under Unreleased, with a migration note if it is breaking. See Releasing.

Code of conduct#

By participating you agree to the Code of Conduct.

Edit this page on GitHub