Contributing
The contribution workflow — from signed-commit setup through issue, core-behind-boundary implementation, a matching test assertion, and a green, signed PR.
The repeatable loop for landing a change. Two habits carry through everything: put the logic in
core behind the boundary, and every core change gets a scripts/*.ts assertion.
0. On-ramp (once)
- Signed commits are required —
mainrejects unsigned pushes. Set up SSH signing (gpg.format ssh,commit.gpgsign true), register the key on GitHub as a Signing Key (not Authentication), and ensure your commit email is a verified email on your account. Verify withgit log --format='%h %G? %s' -3→ you wantG. npm install && npm test→ green (hermetic: no DB, no network).
The loop
- Pick an issue. Edge / no-dependency fixes first. Anything touching the privacy or security
model needs discussion in the issue before coding (governance gate). Security disclosures go
via
SECURITY.md, not a public issue. - Understand the code path. Read the file and the
scripts/*.tssmoke that covers it. - Branch off fresh
main(protected — PR only):fix/<purpose>, signed commits. - Implement. Put decision-logic in
src/corebehind a port; keep the controller thin; preserve the boundary (zero framework imports in core). - Test. Add or update a
scripts/*.tsassertion — mandatory for core changes, or the PR is sent back. - Verify.
npm testgreen ⇒ green in CI (the suites are hermetic). - Self-review. Correctness, performance, security, conventions.
- Fix findings, re-test.
- Docs. Update
docs/INTEROP.mdfor anything a wallet/verifier sees;docs/openapi.yamlfor HTTP-surface changes. - Ship. Signed commit (
Closes #<n>, one concern, say why, note security implications) → push → open the PR.
The two non-negotiables
Logic in core behind the boundary, and a matching scripts/*.ts assertion for every
core change. Internalise those plus the trust-flow spine and you have both the
system and the process.
What CI gates
Prisma client generation → typecheck → the core / OpenID4VCI / OpenID4VP / SSO / W3C-conformance
suites → Docker image build. All hermetic, so a green npm test locally is a green CI run.
Source: CONTRIBUTING.md,
.github/workflows/ci.yml.