Contributing to Didacta¶
Didacta is in beta on its way to v1.0.0. External contributions are welcome — issues, installation feedback and focused PRs — with the caveat that the API and the schema can still change between pre-1.0 versions.
The canonical guide is CONTRIBUTING.md; this is the operational summary.
Your first contribution¶
- CLA. Every PR is blocked until you sign the Contributor License Agreement through cla-assistant.io. The bot asks you automatically the first time; one signature is good forever.
- Issue before PR. For non-trivial changes, open an issue first with the problem or the proposal. For small fixes (a typo, a doc) you can go straight to a PR.
- Branch.
git checkout -b <type>/<short-description>with the typesfeat/,fix/,chore/,docs/,refactor/,test/,perf/. - Conventional Commits are mandatory, with the body explaining the why. No AI attribution in commits (project policy).
- Tests. Every PR that touches business logic includes tests; minimum 70% coverage on services.
Checks before you push¶
pnpm lint
pnpm typecheck
pnpm test
pnpm tsx scripts/ee-fence.ts # open-core fence: .ee only in the core
pnpm tsx scripts/module-doctor.ts # the module contract
CI runs them again; if they fail, the PR is not merged. For the Docker-based integration suites, see Running tests locally.
Hard rules (a PR is rejected if they are broken)¶
- The
.eeconvention:*.ee.tsfiles andee/folders only inside the core. No module may contain.eefiles — every module is Community. - The module contract:
mod_<slug>_*tables withtenant_id+ RLS, zero cross-module foreign keys, zero imports of another module's private code, a validmodule.json, lifecycle hooks implemented. Details in Building a module. - No copyleft dependencies: MIT/Apache-2.0/BSD/ISC ✅ · LGPL case by case · GPL/AGPL/MPL/SSPL ❌. CI runs
scripts/license-check.ts.
Code style¶
- Strict TypeScript; no
anyexcept in justified cases, with a comment. - Prettier + ESLint (CI verifies it).
- Identifiers in English; comments and commits in Spanish or English.
- No
console.login production — use the Pino logger.
Architecture decisions¶
Changes affecting the module contract, the licensing model, the SDK or public APIs require an ADR first: propose it in an issue or a GitHub Discussion with context, options and trade-offs.
Contact¶
- 💬 Technical questions: GitHub Discussions or Discord
#didacta-alpha(pre-1.0 phase). - 🐛 Bugs: an issue using the bug template — how to prepare it in Reporting a bug.
- 🔒 Security:
security@didacta.io— never a public issue. See SECURITY.md. - 📜 Licensing / commercial:
licensing@didacta.io.