Name | forkscout JSON |
Version |
1.0.5
JSON |
| download |
home_page | None |
Summary | Forkscout: Powerful GitHub repository fork analysis tool that discovers valuable features across forks, ranks them by impact, and can create pull requests to integrate improvements back to upstream projects |
upload_time | 2025-09-10 08:52:12 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | MIT License
Copyright (c) 2024 Forkscout Team
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. |
keywords |
analysis
automation
code-analysis
code-quality
collaboration
developer-tools
feature-discovery
fork
git
github
open-source
productivity
pull-request
repository
workflow
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Forkscout ๐
A powerful GitHub repository fork analysis tool that automatically discovers valuable features across all forks of a repository, ranks them by impact, and can create pull requests to integrate the best improvements back to the upstream project.
## Features
- **Fork Discovery**: Automatically finds and catalogs all public forks of a repository
- **Feature Analysis**: Identifies meaningful changes and improvements in each fork
- **Smart Ranking**: Scores features based on code quality, community engagement, and impact
- **Report Generation**: Creates comprehensive markdown reports with feature summaries
- **Automated PRs**: Can automatically create pull requests for high-value features
- **Caching**: Intelligent caching system to avoid redundant API calls
## Installation
### Prerequisites
- Python 3.12 or higher
- [uv](https://docs.astral.sh/uv/) package manager
### Install uv
```bash
# On macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# On Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# Or with pip
pip install uv
```
### Install Forkscout
#### From PyPI (Recommended)
```bash
# Install with pip
pip install forkscout
# Or with uv
uv add forkscout
```
#### From Source (Development)
```bash
# Clone the repository
git clone https://github.com/Romamo/forkscout.git
cd forkscout
# Install dependencies
uv sync
# Install in development mode
uv pip install -e .
```
## Quick Start
1. **Set up your GitHub token**:
```bash
cp .env.example .env
# Edit .env and add your GitHub token
```
2. **Analyze a repository**:
```bash
uv run forkscout analyze https://github.com/pallets/click
```
3. **Generate a report**:
```bash
uv run forkscout analyze https://github.com/psf/requests --output report.md
```
4. **Auto-create PRs for high-value features**:
```bash
uv run forkscout analyze https://github.com/Textualize/rich --auto-pr --min-score 80
```
## Configuration
Create a `forkscout.yaml` configuration file:
```yaml
github:
token: ${GITHUB_TOKEN}
scoring:
code_quality_weight: 0.3
community_engagement_weight: 0.2
test_coverage_weight: 0.2
documentation_weight: 0.15
recency_weight: 0.15
analysis:
min_score_threshold: 70.0
max_forks_to_analyze: 100
excluded_file_patterns:
- "*.md"
- "*.txt"
- ".github/*"
# Commit counting configuration
commit_count:
max_count_limit: 100 # Maximum commits to count per fork (0 = unlimited)
display_limit: 5 # Maximum commits to show in display
use_unlimited_counting: false # Enable unlimited counting by default
timeout_seconds: 30 # Timeout for commit counting operations
cache:
duration_hours: 24
max_size_mb: 100
```
## Usage Examples
### Basic Analysis
```bash
forkscout analyze https://github.com/pallets/click
```
### Fork Analysis Commands
```bash
# Show all forks with compact commit status
forkscout show-forks https://github.com/psf/requests
# Show forks with recent commits in a separate column
forkscout show-forks https://github.com/Textualize/rich --show-commits 3
# Show detailed fork information with exact commit counts
forkscout show-forks https://github.com/pytest-dev/pytest --detail
```
### Commit Counting Options
```bash
# Basic exact commit counting (default: count up to 100 commits)
forkscout show-forks https://github.com/newmarcel/KeepingYouAwake --detail
# Unlimited commit counting for maximum accuracy (slower)
forkscout show-forks https://github.com/aarigs/pandas-ta --detail --max-commits-count 0
# Fast processing with lower commit limit
forkscout show-forks https://github.com/NoMore201/googleplay-api --detail --max-commits-count 50
# Custom display limit for commit messages
forkscout show-forks https://github.com/sanila2007/youtube-bot-telegram --show-commits 3 --commit-display-limit 10
# Focus on active forks only
forkscout show-forks https://github.com/maliayas/github-network-ninja --detail --ahead-only
```
### Understanding Commit Status Format
The fork tables display commit status in a compact "+X -Y" format:
- `+5 -2` means 5 commits ahead, 2 commits behind
- `+3` means 3 commits ahead, up-to-date
- `-1` means 1 commit behind, no new commits
- Empty cell means completely up-to-date
- `Unknown` means status could not be determined
### With Custom Configuration
```bash
forkscout analyze https://github.com/virattt/ai-hedge-fund --config my-config.yaml
```
### Automated PR Creation
```bash
forkscout analyze https://github.com/xgboosted/pandas-ta-classic --auto-pr --min-score 85
```
### Verbose Output
```bash
forkscout analyze https://github.com/pallets/click --verbose
```
## Troubleshooting
### Common Issues
**Commit counts showing "+1" for all forks:**
- This was a bug in earlier versions. Update to the latest version.
- Use `--detail` flag for accurate commit counting.
**Slow performance with commit counting:**
- Use `--max-commits-count 50` for faster processing
- Limit forks with `--max-forks 25`
- Use `--ahead-only` to skip inactive forks
**"Unknown" commit counts:**
- Usually indicates private/deleted forks or API rate limiting
- Check GitHub token configuration
- Try with `--verbose` for detailed error information
For comprehensive troubleshooting, see [docs/COMMIT_COUNTING_TROUBLESHOOTING.md](docs/COMMIT_COUNTING_TROUBLESHOOTING.md).
## Development
### Setup Development Environment
```bash
# Clone and setup
git clone https://github.com/Romamo/forkscout.git
cd forkscout
uv sync --dev
# Install pre-commit hooks
uv run pre-commit install
```
### Running Tests
```bash
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=src --cov-report=html
# Run only unit tests
uv run pytest tests/unit/
# Run only integration tests
uv run pytest tests/integration/
```
### Code Quality
```bash
# Format code
uv run black src/ tests/
# Lint code
uv run ruff check src/ tests/
# Type checking
uv run mypy src/
```
## Evaluation Criteria
Forkscout uses a sophisticated evaluation system to analyze commits and determine their value for the main repository. This section explains how the system makes decisions about commit categorization, impact assessment, and value determination.
### Commit Categorization
The system categorizes each commit into one of the following types based on commit message patterns and file changes:
#### Category Types and Patterns
**๐ Feature** - New functionality or enhancements
- **Message patterns**: `feat:`, `feature`, `implement`, `new`, `add`, `introduce`, `create`, `build`, `support for`, `enable`
- **Examples**:
- `feat: add user authentication system`
- `implement OAuth2 login flow`
- `add support for PostgreSQL database`
**๐ Bugfix** - Error corrections and issue resolutions
- **Message patterns**: `fix:`, `bug`, `patch`, `hotfix`, `repair`, `resolve`, `correct`, `address`, `issue`, `problem`, `error`
- **Examples**:
- `fix: resolve memory leak in data processing`
- `correct validation error in user input`
- `patch security vulnerability in auth module`
**๐ง Refactor** - Code improvements without functional changes
- **Message patterns**: `refactor:`, `clean`, `improve`, `restructure`, `reorganize`, `simplify`, `extract`, `rename`, `move`
- **Examples**:
- `refactor: extract common validation logic`
- `improve code organization in user module`
- `simplify database connection handling`
**๐ Documentation** - Documentation updates and improvements
- **Message patterns**: `docs:`, `documentation`, `readme`, `comment`, `comments`, `docstring`, `guide`, `tutorial`, `example`
- **File patterns**: `README.*`, `*.md`, `*.rst`, `docs/`, `*.txt`
- **Examples**:
- `docs: update installation instructions`
- `add API documentation for user endpoints`
- `improve code comments in core modules`
**๐งช Test** - Test additions and improvements
- **Message patterns**: `test:`, `tests`, `testing`, `spec`, `unittest`, `pytest`, `coverage`, `mock`, `fixture`, `assert`
- **File patterns**: `test_*.py`, `*_test.py`, `tests/`, `*.test.js`, `*.spec.js`
- **Examples**:
- `test: add unit tests for user service`
- `improve test coverage for authentication`
- `add integration tests for API endpoints`
**๐จ Chore** - Maintenance and build-related changes
- **Message patterns**: `chore:`, `maintenance`, `upgrade`, `dependency`, `dependencies`, `version`, `config`, `configuration`, `setup`
- **File patterns**: `requirements.txt`, `package.json`, `pyproject.toml`, `setup.py`, `Dockerfile`, `.github/`, `.gitignore`
- **Examples**:
- `chore: update dependencies to latest versions`
- `upgrade Python to 3.12`
- `configure CI/CD pipeline`
**โก Performance** - Performance optimizations
- **Message patterns**: `perf:`, `performance`, `speed`, `fast`, `optimize`, `optimization`, `efficient`, `cache`, `caching`, `memory`
- **Examples**:
- `perf: optimize database query performance`
- `improve memory usage in data processing`
- `add caching layer for API responses`
**๐ Security** - Security-related changes
- **Message patterns**: `security:`, `secure`, `vulnerability`, `auth`, `authentication`, `authorization`, `encrypt`, `decrypt`, `hash`
- **File patterns**: `*auth*.py`, `*security*.py`, `*crypto*.py`
- **Examples**:
- `security: fix SQL injection vulnerability`
- `implement secure password hashing`
- `add rate limiting to API endpoints`
**โ Other** - Changes that don't fit standard categories
- Used when commit patterns don't match any specific category
- Often indicates complex or unclear changes
### Impact Assessment
The system evaluates the potential impact of each commit using multiple factors:
#### File Criticality Rules
Files are assessed for criticality based on their role in the project:
**๐ด Critical Files (Score: 1.0)**
- Core application files: `main.py`, `index.js`, `app.py`, `server.py`
- Entry points: `__init__.py`, `setup.py`, `pyproject.toml`, `package.json`
- Files explicitly listed in project's critical files
**๐ High Criticality (Score: 0.8-0.9)**
- Security files: `*auth*.py`, `*security*.py`, `*crypto*.py`, `*permission*.py`
- Configuration files: `config.*`, `settings.*`, `.env*`, `Dockerfile`, `docker-compose.yml`
**๐ก Medium-High Criticality (Score: 0.7)**
- Database/model files: `*model*.py`, `*schema*.py`, `*migration*.py`, `*database*.py`
**๐ข Medium Criticality (Score: 0.6)**
- API/interface files: `*api*.py`, `*endpoint*.py`, `*route*.py`, `*controller*.py`
**๐ต Low Criticality (Score: 0.1-0.2)**
- Test files: `test_*.py`, `*_test.py`, `tests/`, `*.test.js`, `*.spec.js`
- Documentation: `README.*`, `*.md`, `*.rst`, `docs/`
#### Change Magnitude Calculation
The system calculates change magnitude based on:
- **Lines changed**: Additions + deletions (weighted 70%)
- **Files changed**: Number of modified files (weighted 30%)
- **Size bonuses**: Large changes (>500 lines) get 1.5x multiplier, medium changes (>200 lines) get 1.2x multiplier
#### Quality Factors
**Test Coverage Factor**
- Measures proportion of test files in the change
- Bonus points for including any test files
- Score: 0.0 (no tests) to 1.0 (comprehensive test coverage)
**Documentation Factor**
- Measures proportion of documentation files
- Bonus points for including any documentation
- Score: 0.0 (no docs) to 1.0 (comprehensive documentation)
**Code Organization Factor**
- Evaluates focus and coherence of changes
- Bonus for focused changes (โค3 files)
- Penalty for scattered changes (>10 files)
- Considers average changes per file
**Commit Quality Factor**
- Message length and descriptiveness
- Conventional commit format bonus
- Penalty for merge commits
#### Impact Level Determination
The system combines all factors to determine overall impact:
- **๐ด Critical (Score โฅ 0.8)**: Major changes to critical files with high quality
- **๐ High (Score โฅ 0.6)**: Significant changes to important files
- **๐ก Medium (Score โฅ 0.3)**: Moderate changes with reasonable scope
- **๐ข Low (Score < 0.3)**: Minor changes or low-impact files
### Value Assessment for Main Repository
The system determines whether each commit could be valuable for the main repository:
#### "Yes" - Valuable for Main Repository
**Automatic "Yes" Categories:**
- **Bugfixes**: Error corrections benefit all users
- **Security fixes**: Critical for all installations
- **Performance improvements**: Speed benefits everyone
- **Documentation**: Helps all users understand the project
- **Tests**: Improve reliability for everyone
**Conditional "Yes" Examples:**
- **Features**: Substantial new functionality (>50 lines changed)
- **Refactoring**: Significant code improvements
- **Dependency updates**: Security or compatibility improvements
**Example "Yes" Commits:**
```
โ
fix: resolve memory leak in data processing loop
โ
security: patch SQL injection vulnerability in user queries
โ
perf: optimize database connection pooling (40% faster)
โ
feat: add comprehensive input validation system
โ
docs: add troubleshooting guide for common errors
โ
test: add integration tests for payment processing
```
#### "No" - Not Relevant for Main Repository
**Typical "No" Scenarios:**
- Fork-specific configurations or customizations
- Environment-specific changes
- Personal preferences or styling
- Changes that break compatibility
- Experimental or incomplete features
**Example "No" Commits:**
```
โ chore: update personal development environment setup
โ feat: add company-specific branding and logos
โ config: change database from PostgreSQL to MongoDB for our use case
โ style: reformat code according to personal preferences
โ feat: add integration with internal company API
```
#### "Unclear" - Needs Further Review
**Typical "Unclear" Scenarios:**
- Small features that might be too specific
- Refactoring without clear benefits
- Complex changes that do multiple things
- Changes with insufficient context
- Experimental or unfinished work
**Example "Unclear" Commits:**
```
โ refactor: minor code cleanup in utility functions
โ feat: add small convenience method for date formatting
โ fix: workaround for edge case in specific environment
โ update: misc changes and improvements
โ feat: experimental feature for advanced users
```
### Decision Trees and Logic Flow
#### Commit Categorization Flow
```
1. Check commit message for conventional commit prefix (feat:, fix:, etc.)
โโ If found โ Use prefix category with high confidence (0.9)
โโ If not found โ Continue to pattern matching
2. Analyze commit message for category keywords
โโ Multiple matches โ Use highest priority match
โโ No matches โ Continue to file analysis
3. Analyze changed files for category patterns
โโ Strong file pattern match (>80% files) โ Use file category
โโ Weak or mixed patterns โ Continue to combination logic
4. Combine message and file analysis
โโ Message and files agree โ Boost confidence (+0.2)
โโ Message confidence > File confidence โ Use message category
โโ File confidence > Message confidence โ Use file category
โโ Equal confidence โ Default to message category or OTHER
```
#### Impact Assessment Flow
```
1. Calculate Change Magnitude
โโ Count lines changed (additions + deletions)
โโ Count files changed
โโ Apply size multipliers for large changes
2. Assess File Criticality
โโ Check against critical file patterns
โโ Calculate weighted average by change size
โโ Return criticality score (0.0 to 1.0)
3. Evaluate Quality Factors
โโ Test coverage: Proportion of test files
โโ Documentation: Proportion of doc files
โโ Code organization: Focus and coherence
โโ Commit quality: Message and format quality
4. Determine Impact Level
โโ Combine: 40% magnitude + 40% criticality + 20% quality
โโ Score โฅ 0.8 โ Critical
โโ Score โฅ 0.6 โ High
โโ Score โฅ 0.3 โ Medium
โโ Score < 0.3 โ Low
```
#### Value Assessment Flow
```
1. Check Category Type
โโ Bugfix/Security/Performance โ Automatic "Yes"
โโ Docs/Test โ Automatic "Yes"
โโ Feature/Refactor/Chore โ Continue evaluation
2. Analyze Change Scope
โโ Substantial changes (>50 lines) โ Likely "Yes"
โโ Small changes (<20 lines) โ Likely "Unclear"
โโ Medium changes โ Continue evaluation
3. Check for Fork-Specific Indicators
โโ Personal/company-specific terms โ "No"
โโ Environment-specific configs โ "No"
โโ Generic improvements โ Continue evaluation
4. Final Assessment
โโ Clear benefit to all users โ "Yes"
โโ Clearly fork-specific โ "No"
โโ Uncertain or context-dependent โ "Unclear"
```
### Troubleshooting Common Questions
#### "Why was my commit categorized as 'Other'?"
**Possible reasons:**
- Commit message doesn't match known patterns
- Mixed file types that don't clearly indicate category
- Generic or unclear commit message
**Solutions:**
- Use conventional commit format: `feat:`, `fix:`, `docs:`, etc.
- Write descriptive commit messages with clear action words
- Focus commits on single types of changes
#### "Why is the impact level lower than expected?"
**Common causes:**
- Changes affect low-criticality files (tests, docs)
- Small change magnitude (few lines/files changed)
- Poor commit quality (short message, merge commit)
- Low quality factors (no tests or docs included)
**To increase impact:**
- Include changes to core application files
- Add tests and documentation with your changes
- Write descriptive commit messages
- Make focused, substantial changes
#### "Why was my feature marked as 'Unclear' for main repo value?"
**Typical reasons:**
- Feature appears too specific or niche
- Insufficient context to determine general usefulness
- Small or experimental change
- Complex commit that does multiple things
**To improve assessment:**
- Write clear commit messages explaining the benefit
- Include documentation explaining the feature
- Make focused commits that do one thing well
- Consider if the feature would help other users
#### "The system missed an important security fix"
**Possible issues:**
- Commit message doesn't include security keywords
- Files don't match security patterns
- Change appears as refactoring or other category
**Improvements:**
- Use security-related keywords: `security`, `vulnerability`, `auth`, `secure`
- Use conventional commit format: `security: fix vulnerability in...`
- Include security-related files in the change
#### "My documentation update was categorized as 'Chore'"
**Common causes:**
- Files don't match documentation patterns
- Commit message uses maintenance-related words
- Mixed changes including config files
**Solutions:**
- Use doc-specific keywords: `docs`, `documentation`, `readme`
- Focus commits on documentation files only
- Use conventional commit format: `docs: update installation guide`
### Understanding Explanation Output
When using the `--explain` flag, you'll see structured output with clear separation between factual descriptions and system assessments:
```
๐ Description: Added user authentication middleware to handle JWT tokens
โ๏ธ Assessment: Value for main repo: YES
Category: ๐ Feature | Impact: ๐ด High
Reasoning: Large changes affecting critical security files with test coverage
```
**Key sections:**
- **๐ Description**: Factual description of what changed
- **โ๏ธ Assessment**: System's evaluation and judgment
- **Category**: Determined commit type with confidence
- **Impact**: Assessed impact level with reasoning
- **Value**: Whether this could help the main repository
This separation helps you distinguish between objective facts about the commit and the system's subjective assessment of its value.
### Visual Formatting Guide
The system uses consistent visual indicators to help you quickly scan results:
**Category Icons:**
- ๐ Feature - New functionality
- ๐ Bugfix - Error corrections
- ๐ง Refactor - Code improvements
- ๐ Documentation - Docs and guides
- ๐งช Test - Testing improvements
- ๐จ Chore - Maintenance tasks
- โก Performance - Speed optimizations
- ๐ Security - Security fixes
- โ Other - Uncategorized changes
**Impact Level Colors:**
- ๐ด Critical - Major system changes
- ๐ High - Significant improvements
- ๐ก Medium - Moderate changes
- ๐ข Low - Minor modifications
**Value Assessment:**
- โ
Yes - Valuable for main repository
- โ No - Fork-specific only
- โ Unclear - Needs further review
**Complexity Indicators:**
- โ ๏ธ Complex commits that do multiple things are flagged for careful review
- Simple, focused commits are preferred for easier integration
## Contributing
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests for your changes
5. Ensure all tests pass (`uv run pytest`)
6. Commit your changes (`git commit -m 'Add amazing feature'`)
7. Push to the branch (`git push origin feature/amazing-feature`)
8. Open a Pull Request
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Acknowledgments
- Built with [httpx](https://www.python-httpx.org/) for async HTTP requests
- CLI powered by [Click](https://click.palletsprojects.com/)
- Data validation with [Pydantic](https://pydantic.dev/)
- Package management with [uv](https://docs.astral.sh/uv/)
Raw data
{
"_id": null,
"home_page": null,
"name": "forkscout",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": "Roman Medvedev <pypi@romavm.dev>",
"keywords": "analysis, automation, code-analysis, code-quality, collaboration, developer-tools, feature-discovery, fork, git, github, open-source, productivity, pull-request, repository, workflow",
"author": null,
"author_email": "Roman Medvedev <pypi@romavm.dev>",
"download_url": "https://files.pythonhosted.org/packages/94/26/4eee2c121b546e7d6cc940b8c06e73324827510b612195ddcff9c78473bf/forkscout-1.0.5.tar.gz",
"platform": null,
"description": "# Forkscout \ud83d\ude80\n\nA powerful GitHub repository fork analysis tool that automatically discovers valuable features across all forks of a repository, ranks them by impact, and can create pull requests to integrate the best improvements back to the upstream project.\n\n## Features\n\n- **Fork Discovery**: Automatically finds and catalogs all public forks of a repository\n- **Feature Analysis**: Identifies meaningful changes and improvements in each fork\n- **Smart Ranking**: Scores features based on code quality, community engagement, and impact\n- **Report Generation**: Creates comprehensive markdown reports with feature summaries\n- **Automated PRs**: Can automatically create pull requests for high-value features\n- **Caching**: Intelligent caching system to avoid redundant API calls\n\n## Installation\n\n### Prerequisites\n\n- Python 3.12 or higher\n- [uv](https://docs.astral.sh/uv/) package manager\n\n### Install uv\n\n```bash\n# On macOS and Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# On Windows\npowershell -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n\n# Or with pip\npip install uv\n```\n\n### Install Forkscout\n\n#### From PyPI (Recommended)\n\n```bash\n# Install with pip\npip install forkscout\n\n# Or with uv\nuv add forkscout\n```\n\n#### From Source (Development)\n\n```bash\n# Clone the repository\ngit clone https://github.com/Romamo/forkscout.git\ncd forkscout\n\n# Install dependencies\nuv sync\n\n# Install in development mode\nuv pip install -e .\n```\n\n## Quick Start\n\n1. **Set up your GitHub token**:\n ```bash\n cp .env.example .env\n # Edit .env and add your GitHub token\n ```\n\n2. **Analyze a repository**:\n ```bash\n uv run forkscout analyze https://github.com/pallets/click\n ```\n\n3. **Generate a report**:\n ```bash\n uv run forkscout analyze https://github.com/psf/requests --output report.md\n ```\n\n4. **Auto-create PRs for high-value features**:\n ```bash\n uv run forkscout analyze https://github.com/Textualize/rich --auto-pr --min-score 80\n ```\n\n## Configuration\n\nCreate a `forkscout.yaml` configuration file:\n\n```yaml\ngithub:\n token: ${GITHUB_TOKEN}\n \nscoring:\n code_quality_weight: 0.3\n community_engagement_weight: 0.2\n test_coverage_weight: 0.2\n documentation_weight: 0.15\n recency_weight: 0.15\n\nanalysis:\n min_score_threshold: 70.0\n max_forks_to_analyze: 100\n excluded_file_patterns:\n - \"*.md\"\n - \"*.txt\"\n - \".github/*\"\n\n# Commit counting configuration\ncommit_count:\n max_count_limit: 100 # Maximum commits to count per fork (0 = unlimited)\n display_limit: 5 # Maximum commits to show in display\n use_unlimited_counting: false # Enable unlimited counting by default\n timeout_seconds: 30 # Timeout for commit counting operations\n\ncache:\n duration_hours: 24\n max_size_mb: 100\n```\n\n## Usage Examples\n\n### Basic Analysis\n```bash\nforkscout analyze https://github.com/pallets/click\n```\n\n### Fork Analysis Commands\n```bash\n# Show all forks with compact commit status\nforkscout show-forks https://github.com/psf/requests\n\n# Show forks with recent commits in a separate column\nforkscout show-forks https://github.com/Textualize/rich --show-commits 3\n\n# Show detailed fork information with exact commit counts\nforkscout show-forks https://github.com/pytest-dev/pytest --detail\n```\n\n### Commit Counting Options\n```bash\n# Basic exact commit counting (default: count up to 100 commits)\nforkscout show-forks https://github.com/newmarcel/KeepingYouAwake --detail\n\n# Unlimited commit counting for maximum accuracy (slower)\nforkscout show-forks https://github.com/aarigs/pandas-ta --detail --max-commits-count 0\n\n# Fast processing with lower commit limit\nforkscout show-forks https://github.com/NoMore201/googleplay-api --detail --max-commits-count 50\n\n# Custom display limit for commit messages\nforkscout show-forks https://github.com/sanila2007/youtube-bot-telegram --show-commits 3 --commit-display-limit 10\n\n# Focus on active forks only\nforkscout show-forks https://github.com/maliayas/github-network-ninja --detail --ahead-only\n```\n\n### Understanding Commit Status Format\n\nThe fork tables display commit status in a compact \"+X -Y\" format:\n- `+5 -2` means 5 commits ahead, 2 commits behind\n- `+3` means 3 commits ahead, up-to-date\n- `-1` means 1 commit behind, no new commits \n- Empty cell means completely up-to-date\n- `Unknown` means status could not be determined\n\n### With Custom Configuration\n```bash\nforkscout analyze https://github.com/virattt/ai-hedge-fund --config my-config.yaml\n```\n\n### Automated PR Creation\n```bash\nforkscout analyze https://github.com/xgboosted/pandas-ta-classic --auto-pr --min-score 85\n```\n\n### Verbose Output\n```bash\nforkscout analyze https://github.com/pallets/click --verbose\n```\n\n## Troubleshooting\n\n### Common Issues\n\n**Commit counts showing \"+1\" for all forks:**\n- This was a bug in earlier versions. Update to the latest version.\n- Use `--detail` flag for accurate commit counting.\n\n**Slow performance with commit counting:**\n- Use `--max-commits-count 50` for faster processing\n- Limit forks with `--max-forks 25`\n- Use `--ahead-only` to skip inactive forks\n\n**\"Unknown\" commit counts:**\n- Usually indicates private/deleted forks or API rate limiting\n- Check GitHub token configuration\n- Try with `--verbose` for detailed error information\n\nFor comprehensive troubleshooting, see [docs/COMMIT_COUNTING_TROUBLESHOOTING.md](docs/COMMIT_COUNTING_TROUBLESHOOTING.md).\n\n## Development\n\n### Setup Development Environment\n\n```bash\n# Clone and setup\ngit clone https://github.com/Romamo/forkscout.git\ncd forkscout\nuv sync --dev\n\n# Install pre-commit hooks\nuv run pre-commit install\n```\n\n### Running Tests\n\n```bash\n# Run all tests\nuv run pytest\n\n# Run with coverage\nuv run pytest --cov=src --cov-report=html\n\n# Run only unit tests\nuv run pytest tests/unit/\n\n# Run only integration tests\nuv run pytest tests/integration/\n```\n\n### Code Quality\n\n```bash\n# Format code\nuv run black src/ tests/\n\n# Lint code\nuv run ruff check src/ tests/\n\n# Type checking\nuv run mypy src/\n```\n\n## Evaluation Criteria\n\nForkscout uses a sophisticated evaluation system to analyze commits and determine their value for the main repository. This section explains how the system makes decisions about commit categorization, impact assessment, and value determination.\n\n### Commit Categorization\n\nThe system categorizes each commit into one of the following types based on commit message patterns and file changes:\n\n#### Category Types and Patterns\n\n**\ud83d\ude80 Feature** - New functionality or enhancements\n- **Message patterns**: `feat:`, `feature`, `implement`, `new`, `add`, `introduce`, `create`, `build`, `support for`, `enable`\n- **Examples**: \n - `feat: add user authentication system`\n - `implement OAuth2 login flow`\n - `add support for PostgreSQL database`\n\n**\ud83d\udc1b Bugfix** - Error corrections and issue resolutions\n- **Message patterns**: `fix:`, `bug`, `patch`, `hotfix`, `repair`, `resolve`, `correct`, `address`, `issue`, `problem`, `error`\n- **Examples**:\n - `fix: resolve memory leak in data processing`\n - `correct validation error in user input`\n - `patch security vulnerability in auth module`\n\n**\ud83d\udd27 Refactor** - Code improvements without functional changes\n- **Message patterns**: `refactor:`, `clean`, `improve`, `restructure`, `reorganize`, `simplify`, `extract`, `rename`, `move`\n- **Examples**:\n - `refactor: extract common validation logic`\n - `improve code organization in user module`\n - `simplify database connection handling`\n\n**\ud83d\udcda Documentation** - Documentation updates and improvements\n- **Message patterns**: `docs:`, `documentation`, `readme`, `comment`, `comments`, `docstring`, `guide`, `tutorial`, `example`\n- **File patterns**: `README.*`, `*.md`, `*.rst`, `docs/`, `*.txt`\n- **Examples**:\n - `docs: update installation instructions`\n - `add API documentation for user endpoints`\n - `improve code comments in core modules`\n\n**\ud83e\uddea Test** - Test additions and improvements\n- **Message patterns**: `test:`, `tests`, `testing`, `spec`, `unittest`, `pytest`, `coverage`, `mock`, `fixture`, `assert`\n- **File patterns**: `test_*.py`, `*_test.py`, `tests/`, `*.test.js`, `*.spec.js`\n- **Examples**:\n - `test: add unit tests for user service`\n - `improve test coverage for authentication`\n - `add integration tests for API endpoints`\n\n**\ud83d\udd28 Chore** - Maintenance and build-related changes\n- **Message patterns**: `chore:`, `maintenance`, `upgrade`, `dependency`, `dependencies`, `version`, `config`, `configuration`, `setup`\n- **File patterns**: `requirements.txt`, `package.json`, `pyproject.toml`, `setup.py`, `Dockerfile`, `.github/`, `.gitignore`\n- **Examples**:\n - `chore: update dependencies to latest versions`\n - `upgrade Python to 3.12`\n - `configure CI/CD pipeline`\n\n**\u26a1 Performance** - Performance optimizations\n- **Message patterns**: `perf:`, `performance`, `speed`, `fast`, `optimize`, `optimization`, `efficient`, `cache`, `caching`, `memory`\n- **Examples**:\n - `perf: optimize database query performance`\n - `improve memory usage in data processing`\n - `add caching layer for API responses`\n\n**\ud83d\udd12 Security** - Security-related changes\n- **Message patterns**: `security:`, `secure`, `vulnerability`, `auth`, `authentication`, `authorization`, `encrypt`, `decrypt`, `hash`\n- **File patterns**: `*auth*.py`, `*security*.py`, `*crypto*.py`\n- **Examples**:\n - `security: fix SQL injection vulnerability`\n - `implement secure password hashing`\n - `add rate limiting to API endpoints`\n\n**\u2753 Other** - Changes that don't fit standard categories\n- Used when commit patterns don't match any specific category\n- Often indicates complex or unclear changes\n\n### Impact Assessment\n\nThe system evaluates the potential impact of each commit using multiple factors:\n\n#### File Criticality Rules\n\nFiles are assessed for criticality based on their role in the project:\n\n**\ud83d\udd34 Critical Files (Score: 1.0)**\n- Core application files: `main.py`, `index.js`, `app.py`, `server.py`\n- Entry points: `__init__.py`, `setup.py`, `pyproject.toml`, `package.json`\n- Files explicitly listed in project's critical files\n\n**\ud83d\udfe0 High Criticality (Score: 0.8-0.9)**\n- Security files: `*auth*.py`, `*security*.py`, `*crypto*.py`, `*permission*.py`\n- Configuration files: `config.*`, `settings.*`, `.env*`, `Dockerfile`, `docker-compose.yml`\n\n**\ud83d\udfe1 Medium-High Criticality (Score: 0.7)**\n- Database/model files: `*model*.py`, `*schema*.py`, `*migration*.py`, `*database*.py`\n\n**\ud83d\udfe2 Medium Criticality (Score: 0.6)**\n- API/interface files: `*api*.py`, `*endpoint*.py`, `*route*.py`, `*controller*.py`\n\n**\ud83d\udd35 Low Criticality (Score: 0.1-0.2)**\n- Test files: `test_*.py`, `*_test.py`, `tests/`, `*.test.js`, `*.spec.js`\n- Documentation: `README.*`, `*.md`, `*.rst`, `docs/`\n\n#### Change Magnitude Calculation\n\nThe system calculates change magnitude based on:\n- **Lines changed**: Additions + deletions (weighted 70%)\n- **Files changed**: Number of modified files (weighted 30%)\n- **Size bonuses**: Large changes (>500 lines) get 1.5x multiplier, medium changes (>200 lines) get 1.2x multiplier\n\n#### Quality Factors\n\n**Test Coverage Factor**\n- Measures proportion of test files in the change\n- Bonus points for including any test files\n- Score: 0.0 (no tests) to 1.0 (comprehensive test coverage)\n\n**Documentation Factor**\n- Measures proportion of documentation files\n- Bonus points for including any documentation\n- Score: 0.0 (no docs) to 1.0 (comprehensive documentation)\n\n**Code Organization Factor**\n- Evaluates focus and coherence of changes\n- Bonus for focused changes (\u22643 files)\n- Penalty for scattered changes (>10 files)\n- Considers average changes per file\n\n**Commit Quality Factor**\n- Message length and descriptiveness\n- Conventional commit format bonus\n- Penalty for merge commits\n\n#### Impact Level Determination\n\nThe system combines all factors to determine overall impact:\n\n- **\ud83d\udd34 Critical (Score \u2265 0.8)**: Major changes to critical files with high quality\n- **\ud83d\udfe0 High (Score \u2265 0.6)**: Significant changes to important files\n- **\ud83d\udfe1 Medium (Score \u2265 0.3)**: Moderate changes with reasonable scope\n- **\ud83d\udfe2 Low (Score < 0.3)**: Minor changes or low-impact files\n\n### Value Assessment for Main Repository\n\nThe system determines whether each commit could be valuable for the main repository:\n\n#### \"Yes\" - Valuable for Main Repository\n\n**Automatic \"Yes\" Categories:**\n- **Bugfixes**: Error corrections benefit all users\n- **Security fixes**: Critical for all installations\n- **Performance improvements**: Speed benefits everyone\n- **Documentation**: Helps all users understand the project\n- **Tests**: Improve reliability for everyone\n\n**Conditional \"Yes\" Examples:**\n- **Features**: Substantial new functionality (>50 lines changed)\n- **Refactoring**: Significant code improvements\n- **Dependency updates**: Security or compatibility improvements\n\n**Example \"Yes\" Commits:**\n```\n\u2705 fix: resolve memory leak in data processing loop\n\u2705 security: patch SQL injection vulnerability in user queries \n\u2705 perf: optimize database connection pooling (40% faster)\n\u2705 feat: add comprehensive input validation system\n\u2705 docs: add troubleshooting guide for common errors\n\u2705 test: add integration tests for payment processing\n```\n\n#### \"No\" - Not Relevant for Main Repository\n\n**Typical \"No\" Scenarios:**\n- Fork-specific configurations or customizations\n- Environment-specific changes\n- Personal preferences or styling\n- Changes that break compatibility\n- Experimental or incomplete features\n\n**Example \"No\" Commits:**\n```\n\u274c chore: update personal development environment setup\n\u274c feat: add company-specific branding and logos\n\u274c config: change database from PostgreSQL to MongoDB for our use case\n\u274c style: reformat code according to personal preferences\n\u274c feat: add integration with internal company API\n```\n\n#### \"Unclear\" - Needs Further Review\n\n**Typical \"Unclear\" Scenarios:**\n- Small features that might be too specific\n- Refactoring without clear benefits\n- Complex changes that do multiple things\n- Changes with insufficient context\n- Experimental or unfinished work\n\n**Example \"Unclear\" Commits:**\n```\n\u2753 refactor: minor code cleanup in utility functions\n\u2753 feat: add small convenience method for date formatting\n\u2753 fix: workaround for edge case in specific environment\n\u2753 update: misc changes and improvements\n\u2753 feat: experimental feature for advanced users\n```\n\n### Decision Trees and Logic Flow\n\n#### Commit Categorization Flow\n\n```\n1. Check commit message for conventional commit prefix (feat:, fix:, etc.)\n \u251c\u2500 If found \u2192 Use prefix category with high confidence (0.9)\n \u2514\u2500 If not found \u2192 Continue to pattern matching\n\n2. Analyze commit message for category keywords\n \u251c\u2500 Multiple matches \u2192 Use highest priority match\n \u2514\u2500 No matches \u2192 Continue to file analysis\n\n3. Analyze changed files for category patterns\n \u251c\u2500 Strong file pattern match (>80% files) \u2192 Use file category\n \u2514\u2500 Weak or mixed patterns \u2192 Continue to combination logic\n\n4. Combine message and file analysis\n \u251c\u2500 Message and files agree \u2192 Boost confidence (+0.2)\n \u251c\u2500 Message confidence > File confidence \u2192 Use message category\n \u251c\u2500 File confidence > Message confidence \u2192 Use file category\n \u2514\u2500 Equal confidence \u2192 Default to message category or OTHER\n```\n\n#### Impact Assessment Flow\n\n```\n1. Calculate Change Magnitude\n \u251c\u2500 Count lines changed (additions + deletions)\n \u251c\u2500 Count files changed\n \u2514\u2500 Apply size multipliers for large changes\n\n2. Assess File Criticality\n \u251c\u2500 Check against critical file patterns\n \u251c\u2500 Calculate weighted average by change size\n \u2514\u2500 Return criticality score (0.0 to 1.0)\n\n3. Evaluate Quality Factors\n \u251c\u2500 Test coverage: Proportion of test files\n \u251c\u2500 Documentation: Proportion of doc files \n \u251c\u2500 Code organization: Focus and coherence\n \u2514\u2500 Commit quality: Message and format quality\n\n4. Determine Impact Level\n \u251c\u2500 Combine: 40% magnitude + 40% criticality + 20% quality\n \u251c\u2500 Score \u2265 0.8 \u2192 Critical\n \u251c\u2500 Score \u2265 0.6 \u2192 High\n \u251c\u2500 Score \u2265 0.3 \u2192 Medium\n \u2514\u2500 Score < 0.3 \u2192 Low\n```\n\n#### Value Assessment Flow\n\n```\n1. Check Category Type\n \u251c\u2500 Bugfix/Security/Performance \u2192 Automatic \"Yes\"\n \u251c\u2500 Docs/Test \u2192 Automatic \"Yes\"\n \u2514\u2500 Feature/Refactor/Chore \u2192 Continue evaluation\n\n2. Analyze Change Scope\n \u251c\u2500 Substantial changes (>50 lines) \u2192 Likely \"Yes\"\n \u251c\u2500 Small changes (<20 lines) \u2192 Likely \"Unclear\"\n \u2514\u2500 Medium changes \u2192 Continue evaluation\n\n3. Check for Fork-Specific Indicators\n \u251c\u2500 Personal/company-specific terms \u2192 \"No\"\n \u251c\u2500 Environment-specific configs \u2192 \"No\"\n \u2514\u2500 Generic improvements \u2192 Continue evaluation\n\n4. Final Assessment\n \u251c\u2500 Clear benefit to all users \u2192 \"Yes\"\n \u251c\u2500 Clearly fork-specific \u2192 \"No\"\n \u2514\u2500 Uncertain or context-dependent \u2192 \"Unclear\"\n```\n\n### Troubleshooting Common Questions\n\n#### \"Why was my commit categorized as 'Other'?\"\n\n**Possible reasons:**\n- Commit message doesn't match known patterns\n- Mixed file types that don't clearly indicate category\n- Generic or unclear commit message\n\n**Solutions:**\n- Use conventional commit format: `feat:`, `fix:`, `docs:`, etc.\n- Write descriptive commit messages with clear action words\n- Focus commits on single types of changes\n\n#### \"Why is the impact level lower than expected?\"\n\n**Common causes:**\n- Changes affect low-criticality files (tests, docs)\n- Small change magnitude (few lines/files changed)\n- Poor commit quality (short message, merge commit)\n- Low quality factors (no tests or docs included)\n\n**To increase impact:**\n- Include changes to core application files\n- Add tests and documentation with your changes\n- Write descriptive commit messages\n- Make focused, substantial changes\n\n#### \"Why was my feature marked as 'Unclear' for main repo value?\"\n\n**Typical reasons:**\n- Feature appears too specific or niche\n- Insufficient context to determine general usefulness\n- Small or experimental change\n- Complex commit that does multiple things\n\n**To improve assessment:**\n- Write clear commit messages explaining the benefit\n- Include documentation explaining the feature\n- Make focused commits that do one thing well\n- Consider if the feature would help other users\n\n#### \"The system missed an important security fix\"\n\n**Possible issues:**\n- Commit message doesn't include security keywords\n- Files don't match security patterns\n- Change appears as refactoring or other category\n\n**Improvements:**\n- Use security-related keywords: `security`, `vulnerability`, `auth`, `secure`\n- Use conventional commit format: `security: fix vulnerability in...`\n- Include security-related files in the change\n\n#### \"My documentation update was categorized as 'Chore'\"\n\n**Common causes:**\n- Files don't match documentation patterns\n- Commit message uses maintenance-related words\n- Mixed changes including config files\n\n**Solutions:**\n- Use doc-specific keywords: `docs`, `documentation`, `readme`\n- Focus commits on documentation files only\n- Use conventional commit format: `docs: update installation guide`\n\n### Understanding Explanation Output\n\nWhen using the `--explain` flag, you'll see structured output with clear separation between factual descriptions and system assessments:\n\n```\n\ud83d\udcdd Description: Added user authentication middleware to handle JWT tokens\n\u2696\ufe0f Assessment: Value for main repo: YES\n Category: \ud83d\ude80 Feature | Impact: \ud83d\udd34 High\n Reasoning: Large changes affecting critical security files with test coverage\n```\n\n**Key sections:**\n- **\ud83d\udcdd Description**: Factual description of what changed\n- **\u2696\ufe0f Assessment**: System's evaluation and judgment\n- **Category**: Determined commit type with confidence\n- **Impact**: Assessed impact level with reasoning\n- **Value**: Whether this could help the main repository\n\nThis separation helps you distinguish between objective facts about the commit and the system's subjective assessment of its value.\n\n### Visual Formatting Guide\n\nThe system uses consistent visual indicators to help you quickly scan results:\n\n**Category Icons:**\n- \ud83d\ude80 Feature - New functionality\n- \ud83d\udc1b Bugfix - Error corrections \n- \ud83d\udd27 Refactor - Code improvements\n- \ud83d\udcda Documentation - Docs and guides\n- \ud83e\uddea Test - Testing improvements\n- \ud83d\udd28 Chore - Maintenance tasks\n- \u26a1 Performance - Speed optimizations\n- \ud83d\udd12 Security - Security fixes\n- \u2753 Other - Uncategorized changes\n\n**Impact Level Colors:**\n- \ud83d\udd34 Critical - Major system changes\n- \ud83d\udfe0 High - Significant improvements\n- \ud83d\udfe1 Medium - Moderate changes\n- \ud83d\udfe2 Low - Minor modifications\n\n**Value Assessment:**\n- \u2705 Yes - Valuable for main repository\n- \u274c No - Fork-specific only\n- \u2753 Unclear - Needs further review\n\n**Complexity Indicators:**\n- \u26a0\ufe0f Complex commits that do multiple things are flagged for careful review\n- Simple, focused commits are preferred for easier integration\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests for your changes\n5. Ensure all tests pass (`uv run pytest`)\n6. Commit your changes (`git commit -m 'Add amazing feature'`)\n7. Push to the branch (`git push origin feature/amazing-feature`)\n8. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- Built with [httpx](https://www.python-httpx.org/) for async HTTP requests\n- CLI powered by [Click](https://click.palletsprojects.com/)\n- Data validation with [Pydantic](https://pydantic.dev/)\n- Package management with [uv](https://docs.astral.sh/uv/)",
"bugtrack_url": null,
"license": "MIT License\n \n Copyright (c) 2024 Forkscout Team\n \n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.",
"summary": "Forkscout: Powerful GitHub repository fork analysis tool that discovers valuable features across forks, ranks them by impact, and can create pull requests to integrate improvements back to upstream projects",
"version": "1.0.5",
"project_urls": {
"Bug Reports": "https://github.com/Romamo/forkscout/issues",
"Changelog": "https://github.com/Romamo/forkscout/releases",
"Documentation": "https://github.com/Romamo/forkscout#readme",
"Feature Requests": "https://github.com/Romamo/forkscout/issues",
"Homepage": "https://github.com/Romamo/forkscout",
"Issues": "https://github.com/Romamo/forkscout/issues",
"Repository": "https://github.com/Romamo/forkscout",
"Source Code": "https://github.com/Romamo/forkscout"
},
"split_keywords": [
"analysis",
" automation",
" code-analysis",
" code-quality",
" collaboration",
" developer-tools",
" feature-discovery",
" fork",
" git",
" github",
" open-source",
" productivity",
" pull-request",
" repository",
" workflow"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "b9a2bc617a73cb99ba4e885d0771bc7deb87a72c2d931e8272e8edd1615a0755",
"md5": "2cfa3eb39a3d2a8e269b4daf4e830e91",
"sha256": "0be25af03c7692e8200a72bc636d6abbedfa61401a4b4aa8d458bedffc96ab50"
},
"downloads": -1,
"filename": "forkscout-1.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2cfa3eb39a3d2a8e269b4daf4e830e91",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 362126,
"upload_time": "2025-09-10T08:52:10",
"upload_time_iso_8601": "2025-09-10T08:52:10.822082Z",
"url": "https://files.pythonhosted.org/packages/b9/a2/bc617a73cb99ba4e885d0771bc7deb87a72c2d931e8272e8edd1615a0755/forkscout-1.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "94264eee2c121b546e7d6cc940b8c06e73324827510b612195ddcff9c78473bf",
"md5": "9c31df07e38b7da9b6579fbec8d10a7a",
"sha256": "da97f7c162a321fc71599336761605853955b8c9f8dce408f8c9acd69259a8d7"
},
"downloads": -1,
"filename": "forkscout-1.0.5.tar.gz",
"has_sig": false,
"md5_digest": "9c31df07e38b7da9b6579fbec8d10a7a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 940007,
"upload_time": "2025-09-10T08:52:12",
"upload_time_iso_8601": "2025-09-10T08:52:12.746767Z",
"url": "https://files.pythonhosted.org/packages/94/26/4eee2c121b546e7d6cc940b8c06e73324827510b612195ddcff9c78473bf/forkscout-1.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-10 08:52:12",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Romamo",
"github_project": "forkscout",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "forkscout"
}