Contributing to SkillFortify
March 6, 2026 ยท View on GitHub
Thank you for your interest in contributing to SkillFortify. This document covers the process for setting up a development environment, running tests, and submitting changes.
Development Setup
Prerequisites
- Python 3.11 or later
- Git
Clone and Install
git clone https://github.com/qualixar/skillfortify.git
cd skillfortify
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e ".[dev]"
The [dev] extra installs testing and linting tools required for development.
Optional: SAT Solver
For full dependency resolution features:
pip install -e ".[dev,sat]"
Running Tests
Full Test Suite
pytest -v
Quick Check (No Verbose Output)
pytest -q
Specific Test File
pytest tests/test_analyzer.py -v
With Coverage Report
pytest --cov=skillfortify --cov-report=term-missing
Property-Based Tests
SkillFortify uses Hypothesis for property-based testing. These run automatically as part of the standard test suite. If you need to reproduce a specific failure, Hypothesis stores its database in .hypothesis/.
Linting
SkillFortify uses Ruff for linting and formatting:
# Check for lint errors
ruff check src/ tests/
# Auto-fix where possible
ruff check src/ tests/ --fix
# Format code
ruff format src/ tests/
The CI pipeline enforces lint checks on every pull request.
Code Standards
- Target Python version: 3.11+ (use modern syntax:
X | Yunions,matchstatements where appropriate) - Line length: 100 characters maximum
- Type annotations: Required on all public functions and methods
- Docstrings: Required on all public classes, functions, and methods. Use Google-style format
- Test coverage: Every new feature or bug fix must include tests. Aim for comprehensive coverage of edge cases
- No print statements: Use
click.echo()in CLI code andloggingelsewhere
Submitting Changes
Before You Start
- Check existing issues to see if someone is already working on the same area
- Open an issue first for significant changes to discuss the approach
- Keep PRs focused -- one logical change per pull request
Pull Request Process
-
Fork the repository and create a feature branch from
main:git checkout -b feat/your-feature-name -
Make your changes. Ensure:
- All existing tests still pass:
pytest -v - Lint passes:
ruff check src/ tests/ - New code has tests
- All existing tests still pass:
-
Write a clear commit message describing WHAT changed (not why -- that goes in the PR description)
-
Push and open a pull request against
main -
The CI pipeline will run tests across Python 3.11, 3.12, and 3.13. All checks must pass before merge
What Makes a Good PR
- Clear title (under 70 characters)
- Description explaining the motivation and approach
- Tests for new behavior
- No unrelated changes mixed in
Reporting Security Issues
If you discover a security vulnerability in SkillFortify, do not open a public issue. Instead, email the maintainer directly. Responsible disclosure is appreciated and will be acknowledged.
Code of Conduct
This project follows the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this standard. Report unacceptable behavior to the project maintainer.
Summary
- Be respectful and constructive
- Focus on technical merit
- Welcome newcomers
- No harassment, discrimination, or personal attacks
Questions?
Open a GitHub Discussion or an issue tagged question. We are happy to help contributors get oriented.