Commit Graph

33 Commits

Author SHA1 Message Date
sylvain
f03a2eb054 chore(workflow): complete step 13 (retrospective), v1.1.0 done
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 04:49:59 +01:00
sylvain
11c69b8958 chore(workflow): complete step 11 (release v1.1.0), skip step 12
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:47:42 +01:00
sylvain
03d09ac13b docs(v1.1.0): update README, freeze CHANGELOG, bump version
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
v1.1.0
2026-03-11 04:46:38 +01:00
sylvain
79cbcd8e33 chore(workflow): complete step 9, merge step 10 into 11
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:45:04 +01:00
sylvain
f39158ed55 chore(workflow): complete step 8 (audit 100), start step 9
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:41:47 +01:00
sylvain
bb3bc761e3 test(collector): add filtering optimization and edge case tests
- 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>
2026-03-11 04:40:40 +01:00
sylvain
1bc3b2fd36 chore(workflow): complete step 7, start step 8
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:36:56 +01:00
sylvain
844c9ccd08 chore(workflow): complete step 7, v1.1.0 dev done
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:36:11 +01:00
sylvain
2232260821 feat(cli): add --repo and --exclude filtering (fixes #5)
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>
2026-03-11 04:35:42 +01:00
sylvain
0f8e34edf3 chore(workflow): complete step 6, start step 7
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:30:54 +01:00
sylvain
8e8271be9d docs(v1.1.0): version plan and ADR — repo filtering feature
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:30:07 +01:00
sylvain
85c3023b34 chore(workflow): init v1.1.0 (minor)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 04:18:41 +01:00
sylvain
22590d7250 docs(analyse): workflow analysis v1.0.0 — complete breakdown
13 steps, 11 agents, 19 MCP calls, chronology, metrics, recommendations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:42:13 +01:00
sylvain
5c8e833d8b chore(workflow): complete step 13 (retrospective), v1.0.0 done
Metrics, analysis, MEMORY.md written. Milestone v1.0.0 closed on Gitea.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:31:45 +01:00
sylvain
cf88ba0ef5 chore(workflow): complete step 10, start step 11
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.0.0
2026-03-10 19:29:00 +01:00
sylvain
8b4677a6f7 docs(v1.0.0): update README and create CHANGELOG
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 19:28:25 +01:00
sylvain
6ed666fb66 chore(workflow): complete step 9 (smoke test OK), start step 10
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:08:48 +01:00
sylvain
b15ba9eea8 fix(cli): add __main__.py for python -m gitea_dashboard
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:08:25 +01:00
sylvain
6fa8990cae chore(workflow): complete step 8 (audit 97/100), start step 9
Reviewer: 81→100, Guardian: 91→97, 5 findings corrected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 19:03:09 +01:00
sylvain
01f88a0eca fix(audit): correct findings from review round 1
- client: add raise_for_status() in get_latest_release() for non-404 errors (FINDING-001)
- client: add timeout parameter (default 30s) passed to all session.get() calls (FINDING-004/SEC-002)
- cli: replace return with sys.exit(1) in all except blocks (FINDING-002)
- test_cli: remove duplicate test_exits_when_token_missing, assert GITEA_TOKEN in stderr (FINDING-006)
- test_cli: update connection error tests to expect SystemExit(1) after exit code fix
- test_cli: rework token masking test to inject token into exception message (FINDING-007)
- test_client: add test_raises_on_server_error for HTTP 500 path (FINDING-001)
- test_client: add tests for default and custom timeout values (FINDING-004)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 19:00:57 +01:00
sylvain
e05578676f chore(workflow): complete step 7, start step 8
35 tests pass, 4 modules implemented (client, collector, display, cli).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:55:22 +01:00
sylvain
4aa648fa8c feat(cli): add main entry point with error handling (fixes #4)
Read GITEA_TOKEN (required) and GITEA_URL (default) from env vars,
orchestrate client/collect/render pipeline, handle connection and
timeout errors gracefully. Never expose token in error messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:54:29 +01:00
sylvain
8fbdfcafd4 feat(display): add Rich dashboard rendering (fixes #3)
Render repos in a Rich table with [F]ork/[A]rchive/[M]irror indicators,
color-coded issue counts, relative release dates, and a milestones section.
Handles empty repo lists gracefully.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:54:25 +01:00
sylvain
b52bc72ce8 feat(collector): add RepoData dataclass and collect_all (fixes #2)
- 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>
2026-03-10 18:51:17 +01:00
sylvain
4d66aea6ed feat(client): add GiteaClient with auth and pagination (fixes #1)
- GiteaClient with requests.Session and token auth header
- _get_paginated for automatic pagination (limit=50)
- get_repos, get_latest_release (None on 404), get_milestones
- 9 unit tests with mocked requests.Session
- Fix setuptools build backend in pyproject.toml

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:50:28 +01:00
sylvain
18ce3b953e docs(v1.0.0): plan de version, architecture, ADR-002/003
- Plan en 2 phases dev : client+collecteur puis affichage+CLI
- Architecture 4 modules avec interfaces definies
- ADR-002: 4 modules max, ADR-003: pas de parallelisation en v1

chore(workflow): complete step 6, start step 7

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:44:11 +01:00
sylvain
e757c35767 docs(v1.0.0): version plan and ADR
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:43:29 +01:00
sylvain
0bd64d64a9 chore(workflow): complete step 5, start step 6
Gitea milestone v1.0.0 + issues #1-#4 + labels created.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:39:18 +01:00
sylvain
de56585840 docs(research): API Gitea endpoints, pagination, auth, cas limites
chore(workflow): complete step 4, start step 5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:28:03 +01:00
sylvain
2eec10c61a chore(workflow): complete steps 1-3, start step 4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:22:04 +01:00
sylvain
4e72ddc32f chore: init project structure
Discovery synthesis, docs tree, Python src layout, CLAUDE.md, pyproject.toml.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:21:33 +01:00
sylvain
11e5def11c chore(workflow): init v1.0.0 (major-initial)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 18:19:00 +01:00
5bedb1f8ea Initial commit 2026-03-10 18:14:04 +01:00