Getting Started
Contributing Guidelines
Standards and processes for contributing to Featuresmith
Featuresmith welcomes community contributions! To maintain code stability and high quality, please review our requirements below.
Package Separation Guardrails
To enforce our "one core, many thin surfaces" architecture, we use import-linter. The rule is simple:
Surface wrappers (such as
featuresmith-cli and featuresmith-dashboard) MUST NOT import internal core logic. They can only interface with the library via the public API endpoints exposed in featuresmith.api.Commit Conventions
We follow the Conventional Commits standard, scoped by package:
bash
feat(rules): add zero variance numerical checkfix(cli): correct formatting of json output reportsdocs(architecture): expand connectors descriptiontest(profiling): add test for datetime timezone offset handlingTesting Standards
PRs without comprehensive test coverage will not be merged.
- Every new rule must have at least one positive fixture test (violations triggered) and one negative test (violations not triggered).
- New connectors must include unit tests utilizing physical mockup fixtures.
- Core logic packages require at least 85% statement coverage.
Pull Request Checklist
Before submitting a pull request, ensure that:
- Strict type hinting is present on all new inputs/outputs (verified with
mypy --strict .). - Formatting conforms to Ruff (
ruff format .). - No new external library dependencies are introduced without a corresponding Architecture Decision Record (ADR) under
docs/adr/.