sylvain
ebf72c9a56
test(v1.4.0-p2): add failing tests for milestones and columns
...
RED phase: 5 tests in test_collector.py (collect_milestones),
10 tests in test_display.py (render_milestones, parse_columns),
2 tests in test_exporter.py (milestones JSON), 7 tests in
test_cli.py (--milestones, --columns).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 03:46:09 +01:00
sylvain
fdd806abcd
feat(config): add YAML config and graceful pagination timeout
...
fixes #17 , fixes #18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 03:43:48 +01:00
sylvain
94de64e09a
test(v1.4.0-p1): add failing tests for timeout and YAML config
...
RED phase: 4 new tests in test_client.py for graceful timeout on
pagination, 12 new tests in test_config.py for YAML config module
(import fails, module not created yet).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 03:40:27 +01:00
sylvain
670222e2fd
chore(workflow): complete step 6 (plan v1.4.0), start step 7
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 03:35:50 +01:00
sylvain
a1f613f3d8
docs(v1.4.0): version plan and ADR
...
Plan 2 phases : bugfix timeout + config YAML, puis vue milestones + colonnes.
ADR-012 a ADR-015 couvrant degradation gracieuse, config.py, MilestoneData,
et colonnes configurables.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 03:34:55 +01:00
sylvain
98223e4995
chore(workflow): init v1.4.0 (minor)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 03:28:09 +01:00
sylvain
719b36a066
chore(workflow): complete step 13 (retrospective), v1.3.0 done
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:58:54 +01:00
sylvain
e3796f64f5
chore(workflow): complete step 11 (release v1.3.0), skip step 12
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:56:08 +01:00
sylvain
4d22abbde3
docs(v1.3.0): update README, freeze CHANGELOG, bump version
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
v1.3.0
2026-03-12 19:54:38 +01:00
sylvain
540927261e
chore(workflow): complete step 9 (smoke test v1.3.0), start step 10
...
8/8 E2E tests passed, coverage 99%
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:52:54 +01:00
sylvain
d2686971ae
chore(workflow): complete step 8 (audit v1.3.0), start step 9
...
audit_initial: reviewer 81, guardian 87
audit_final: 100/100 (2 rounds, 3 corrections)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:47:44 +01:00
sylvain
16344bbb3f
fix(client): validate Retry-After header (cap, fallback, edge cases)
...
- Ajoute try/except autour du float() pour gérer les dates HTTP RFC 7231
- Cap à 30s pour éviter un blocage indéfini sur valeur énorme
- Plancher à _RETRY_DELAY pour Retry-After: 0 ou négatif (FINDING-R2)
- 4 nouveaux tests : date HTTP, valeur zéro, valeur énorme, health check partiel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-12 19:44:39 +01:00
sylvain
15ed533d20
chore(workflow): complete step 7 v1.3.0, start step 8
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:19:05 +01:00
sylvain
1b33cd36f9
feat(cli,display): add --health check and repo description column
...
Add --health option to verify Gitea connectivity and display version.
Add Description column (truncated at 40 chars) with --no-desc to hide
it. Add get_version() method to GiteaClient.
fixes #14
fixes #15
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:18:03 +01:00
sylvain
2ef7ec175e
test: add edge case tests for unicode, empty repos, malformed API
...
Add tests for unicode descriptions, repos with no commits and no
release, malformed JSON responses, HTML responses, control characters
in names, empty and very long descriptions.
fixes #13
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:16:06 +01:00
sylvain
b40dea32f4
fix(client,exporter): handle HTTP 429 retry and sanitize JSON
...
_get_with_retry now retries on HTTP 429 responses, respecting the
Retry-After header when present. exporter sanitizes control characters
(0x00-0x1F except \n \r \t) in text fields before JSON serialization.
fixes #11
fixes #12
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:15:25 +01:00
sylvain
9783389bfb
chore(workflow): complete step 6 (plan v1.3.0), start step 7
...
3 phases: corrections/robustesse (#11,#12), tests edge (#13 ), features (#14,#15)
ADR-009 (retry 429), ADR-010 (sanitize JSON), ADR-011 (--health flag)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 19:07:57 +01:00
sylvain
7dab240dce
chore(workflow): init v1.3.0 (minor track)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 18:59:59 +01:00
sylvain
be8e89114c
chore(workflow): complete step 13 (retrospective), v1.2.0 done
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 04:21:33 +01:00
sylvain
da6baf3696
chore(workflow): complete step 11 (release v1.2.0), skip step 12
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 04:19:51 +01:00
sylvain
f12ec380c7
docs(v1.2.0): update README, freeze CHANGELOG, bump version
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
v1.2.0
2026-03-12 04:18:54 +01:00
sylvain
1a8115678c
chore(workflow): complete step 9, merge step 10, start step 11
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 04:17:03 +01:00
sylvain
8b10ff5016
chore(workflow): complete step 8 (audit v1.2.0), start step 9
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 04:09:00 +01:00
sylvain
50768db31f
fix(audit): sort milestones, sort JSON export, extract test helper
...
- Fix milestone section using unsorted repos list
- Apply --sort to --format json output
- Rename _sort_repos to sort_repos (now used by cli.py)
- Extract shared make_repo helper to tests/helpers.py
- Move exporter import to module level in cli.py
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 04:07:41 +01:00
sylvain
cf6f2dd3c6
chore(workflow): complete step 7 (dev v1.2.0), start step 8
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 03:59:33 +01:00
sylvain
4c66fbe98d
feat(v1.2.0): retry API, dernier commit, tri, coloration, export JSON
...
- client.py: _get_with_retry (max 2 retries, backoff lineaire), get_latest_commit
- collector.py: champ last_commit_date dans RepoData
- display.py: colonne "Dernier commit", _sort_repos (name/issues/release/activity),
_colorize_milestone_due (rouge/jaune/vert selon echeance)
- cli.py: options --sort/-s et --format/-f (table/json)
- exporter.py: nouveau module, repos_to_dicts + export_json
- 88 tests (35 nouveaux), ruff clean
fixes #8 , fixes #7 , fixes #10 , fixes #9 , fixes #6
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 03:58:45 +01:00
sylvain
19f300ccdb
chore(workflow): complete step 6 (plan v1.2.0), start step 7
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 03:50:07 +01:00
sylvain
eb927132e3
chore(workflow): init v1.2.0 (minor)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 03:44:53 +01:00
sylvain
a913a458e9
docs(analyse): workflow execution debug analysis v1.1.0
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 04:54:51 +01:00
sylvain
881d3a5cb1
chore(workflow): complete step 13 (retrospective), v1.1.0 done
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 04:50:45 +01:00
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