- test_filtered_repos_have_no_api_calls: prouve que get_latest_release et
get_milestones ne sont pas appelés pour les repos exclus par le filtre include
- test_collect_all_include_empty_list: documente le contrat implicite où
include=[] est équivalent à include=None (tous les repos inclus)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add argparse-based CLI parsing with repeatable --repo/-r (include) and
--exclude/-x (exclude) options. Filtering is case-insensitive substring
matching, applied post-fetch in collect_all() per ADR-005.
- parse_args() separated from main() for testability
- main(argv=None) accepts argv for test injection
- collect_all() gains optional include/exclude parameters
- 14 new tests (8 filtering + 6 CLI parsing/integration)
- All 51 tests pass, backward compatible (no args = v1.0.0 behavior)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- RepoData dataclass with all repo fields
- collect_all enriches each repo with release and milestones
- Computes open_issues = open_issues_count - open_pr_counter
- 6 unit tests with mocked GiteaClient
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>