🌐 Translations • 📜 Code of Conduct
Thanks for contributing to modulify/conventional.
This document describes our expectations for contribution quality.
We keep a high engineering bar in this repository and expect the same level of
discipline from every contribution.
modulify/conventional is a Yarn workspaces monorepo:
packages/conventional-gitpackages/conventional-bumppackages/conventional-changelog
We treat workspace boundaries as an important design constraint.
Changes are expected to stay well-scoped and logically separated.
Before working on changes, we use:
make .yarnrc.yml
yarn installBefore handoff or PR, we expect the contribution to pass:
- Tests:
make test- Coverage:
make test-coverage- Type checks:
make typecheck- Eslint when changed files include linted code (
*.ts,*.js, etc.):
make eslintCoverage thresholds are strict and enforced in configuration:
100%statements100%branches100%functions100%lines
External contributions that reduce coverage quality are not accepted.
A contribution is considered done when all points below are satisfied:
- The change is scoped clearly to the intended workspace and behavior.
- Required checks pass (
test,test-coverage,typecheck, andeslintwhen applicable). - Documentation is updated when behavior or public API changed.
- Commits are split by logical intent and workspace boundaries.
Coverage in this repository is a quality gate, not a vanity metric.
For external contributions, we expect this order of work:
- Cover real public API scenarios first.
- Add missing realistic scenarios that were overlooked.
- Treat remaining uncovered code as a quality signal:
- potential bug source,
- redundant/dead logic,
- architecture smell.
- Add controlled failure scenarios for defensive branches.
- Prefer removing redundant logic or improving architecture over artificial tests for impossible paths.
- If real-world coverage already includes both normal and failure public API flows, but total coverage is still below
100%, treat it as a design flaw and/or a bug, not as a reason to add synthetic edge-case tests just to satisfy the metric.
This philosophy is codified in:
skills/coverage-recovery/SKILL.md
When working with AI agents in this repository, do not make your agents walk in circles.
If progress stalls after reasonable attempts, ask for escalation instead of another brute-force pass:
- Request an exact report of uncovered paths and why they remain.
- Ask for concrete options and tradeoffs:
- keep defensive code and accept the gap,
- refactor architecture for testability,
- remove redundant/impossible branches.
- Make the architecture decision explicitly before continuing.
Final decisions on controversial architectural tradeoffs remain with the human developer.
Flaky tests are not acceptable in external contributions.
- Do not submit known flaky behavior.
- Do not mark unstable behavior as acceptable because coverage passes.
- Stabilize the scenario before expecting review/merge.
Before opening or updating a PR, verify:
- Scope is correct and workspace boundaries are respected.
- Public API behavior is covered by tests.
-
make typecheckpasses. -
make test-coveragepasses. -
make eslintpasses when linted code files were changed. - Related docs are updated.
- Commit messages follow repository conventions.
We expect all commits to follow repository conventions:
- Conventional Commits format.
- English commit messages by default.
- Completed historical wording (concise, changelog-friendly).
- Workspace scope for workspace-local changes:
conventional-gitconventional-bumpconventional-changelog
- No synthetic scope for global/manual commits (scope is usually omitted).
- Logical split by workspace and intent.
yarn.lockin a separate commit with exact header:chore: Updated yarn.lock
For detailed commit flow:
skills/commit-workflow/SKILL.md