Files
gitea-dashboard/docs/analyse/workflow-execution-v1.1.0-debug.md
2026-03-11 04:54:51 +01:00

19 KiB

Analyse d'execution du workflow v1.1.0 — Debug & Introspection

Projet : gitea-dashboard Version : v1.1.0 Track : minor Date : 2026-03-11 Session : unique (1 conversation Claude Code)


1. Vue d'ensemble — Pipeline d'execution

/workflow next (step 6)
    |
    v
[STEP 6] Plan ──architect──> docs/plans/v1.1.0-plan.md
    |                         + ADR-004, ADR-005
    |                         + commit 8e8271b
    v
[STEP 7] Dev ──builder──> feat(cli): --repo/--exclude
    |                      + 14 nouveaux tests
    |                      + commit 2232260 (fixes #5)
    v
[STEP 8] Audit ──reviewer──┐
                guardian──┘──> score 94 initial
    |                         |
    |                    fixer──> 2 corrections testing
    |                         |
    |                  reviewer (resume)──> score 100
    v
[STEP 9] Smoke test ──moi-meme──> 3/3 tests CLI reels
    |
    v
[STEP 10] ──merged_with_11──> (skip, pas de docs/guides)
    |
    v
[STEP 11] Release ──guardian──┐  (release gate)
                  documenter──┘──> tag v1.1.0
    |                              + release Gitea
    |                              + push origin
    v
[STEP 12] ──skipped──> (CLI local)
    |
    v
[STEP 13] Retro ──documenter──> analyse + MEMORY.md
                                + milestone fermee

2. Agents utilises

Inventaire par etape

Etape Agent Model Mode Duree (ms) Tokens Tool uses
6 architect opus foreground 133 594 40 235 19
7 builder opus foreground 245 734 62 601 39
8 reviewer (round 1) opus background 63 338 43 677 19
8 guardian (round 1) opus background 78 867 41 494 26
8 fixer sonnet foreground 53 699 26 563 9
8 reviewer (round 2, resume) opus foreground 20 283 49 453 2
11 guardian (release gate) opus background 33 040 26 219 13
11 documenter (release) sonnet background 46 104 24 711 13
13 documenter (retro) sonnet foreground 70 589 26 395 7

Totaux

Metrique Valeur
Agents lances 9 invocations
Agents uniques 5 (architect, builder, reviewer, guardian, fixer, documenter)
Modele opus 6 invocations
Modele sonnet 3 invocations
Total tokens agents ~341 348
Total tool uses agents ~147
Duree totale agents ~745s (~12.4 min)

Repartition par role

architect   ████░░░░░░░░░░░░░░ 1 invocation  (plan)
builder     ████████░░░░░░░░░░ 1 invocation  (dev, le plus lourd)
reviewer    ████████████░░░░░░ 2 invocations (audit r1 + r2 resume)
guardian    ████████░░░░░░░░░░ 2 invocations (audit + release gate)
fixer       ████░░░░░░░░░░░░░░ 1 invocation  (corrections)
documenter  ████████░░░░░░░░░░ 2 invocations (release + retro)

3. Outils utilises

Outils Claude Code (orchestrateur principal)

Outil Utilisation Contexte
Read Lecture workflow-progress.md, CHANGELOG, plan, MEMORY.md, template Verification d'etat, collecte de donnees
Edit ~20 modifications Mise a jour workflow-progress.md a chaque transition
Write 1 fichier Ce document d'analyse
Glob 3 recherches Verification existence plan, findings-history, docs/guides
Grep 1 recherche Localisation GITEA_TOKEN
Bash ~15 commandes git, pytest, cw check, smoke tests CLI
Agent 9 lancements Delegation aux agents specialises
ToolSearch 4 recherches Chargement outils MCP (Gitea milestone, release, issues)
AskUserQuestion 1 question Demande du GITEA_TOKEN pour smoke test
Skill 1 invocation /audit (chargement du skill)

Outils MCP Gitea (appels directs par l'orchestrateur)

Outil MCP Appels Contexte
mcp__gitea__list_issues 1 Lister les issues ouvertes (step 6)
mcp__gitea__milestone_read 1 Verifier existence milestone v1.1.0
mcp__gitea__milestone_write 1 Fermer milestone v1.1.0 (step 13)
mcp__gitea__create_release 1 Creer release Gitea (step 11)

Outils utilises par les agents (indirect)

Les agents ont utilise en interne : Read, Edit, Write, Bash, Grep, Glob. Le builder a aussi utilise Bash pour python3 -m pytest et ruff check.


4. Ordre d'execution detaille

Chronologie sequentielle

T0   /workflow next (depuis step 6 in_progress)
     ├── Read workflow-progress.md
     ├── cw check transition --from 6 --to 7
     ├── Glob docs/plans/v1.1.0* → vide (plan pas fait)
     ├── CONSTAT: step 6 pas terminee, plan manquant
     │
     ├── list_issues → issue #5 ouverte
     ├── Read MEMORY.md
     │
     ├── DELEGATION: architect agent (foreground)
     │   └── [133s] Lit code existant, plan v1.0.0, cree v1.1.0-plan.md + ADR-004/005
     │       └── Commit: 8e8271b docs(v1.1.0): version plan and ADR
     │
     ├── Read v1.1.0-plan.md (verification)
     ├── milestone_read → v1.1.0 existe (id:32)
     ├── Edit workflow-progress.md (step 6 done, step 7 in_progress)
     ├── Commit: 0f8e34e chore(workflow): complete step 6, start step 7
     │
T1   /workflow next (step 7 in_progress)
     ├── pytest → 37 passed (tests v1.0.0 seulement)
     ├── git log → aucun commit dev
     ├── CONSTAT: step 7 pas terminee, code pas implemente
     │
     ├── [User: "oui" pour lancer /build]
     │
     ├── DELEGATION: builder agent (foreground)
     │   └── [246s] TDD: tests + code filtrage, argparse
     │       └── Commit: 2232260 feat(cli): add --repo and --exclude filtering (fixes #5)
     │       └── 51 tests passent
     │   └── Builder met a jour workflow-progress.md (step 7 done) ← ANOMALIE
     │
T2   /workflow next (step 7 done → step 8)
     ├── pytest → 51 passed
     ├── cw check transition --from 7 --to 8 → reclassify warning (ignored, deja minor)
     ├── Edit workflow-progress.md (step 8 in_progress)
     ├── Commit: 1bc3b2f chore(workflow): complete step 7, start step 8
     │
     ├── [User: "oui" pour lancer /audit]
     │
     ├── /audit skill charge
     ├── git diff --name-only v1.0.0..HEAD → 4 fichiers .py
     ├── Mode: standard (minor, pas docs-only, pas micro-patch)
     │
     ├── DELEGATION PARALLELE:
     │   ├── reviewer (background) [63s]
     │   │   └── Score: 94 (2 minor testing)
     │   └── guardian (background) [79s]
     │       └── Score: 97 (1 minor security, HTTP pre-existant)
     │
     ├── Deduplication: 0 doublons
     ├── Score agrege: min(94, 97) = 94
     ├── Finding HTTP = pre-existant → ne compte pas
     ├── Score effectif: 94 < 100 → correction round
     │
     ├── DELEGATION: fixer agent (foreground)
     │   └── [54s] 2 tests ajoutes, findings-history.md cree
     │       └── Commit: bb3bc76 test(collector): add filtering optimization and edge case tests
     │
     ├── DELEGATION: reviewer resume (foreground)
     │   └── [20s] Re-evaluation ciblee → Score: 100
     │
     ├── Score final: 100 → APPROVED
     ├── Edit workflow-progress.md (step 8 done)
     ├── Commit: f39158e chore(workflow): complete step 8 (audit 100), start step 9
     │
T3   /workflow next (step 8 done → step 9)
     ├── Edit workflow-progress.md (step 9 in_progress, phase 3)
     ├── Read CHANGELOG.md
     ├── Generation checklist: 3 items CLI
     │
     ├── AskUserQuestion → user fournit GITEA_TOKEN
     │
     ├── SMOKE TESTS (Bash, moi-meme):
     │   ├── Test 1: python3 -m gitea_dashboard → 13 repos OK
     │   ├── Test 2: --repo dashboard → 2 repos OK
     │   └── Test 3: --exclude flix --exclude music → 9 repos OK
     │
     ├── 3/3 → step 9 done
     ├── Glob docs/guides → vide → fusion 10+11 confirmee
     ├── Edit workflow-progress.md (step 10 merged, step 9 done)
     ├── Commit: 79cbcd8 chore(workflow): complete step 9, merge step 10 into 11
     │
T4   /workflow next (step 9 done → step 11)
     ├── Edit workflow-progress.md (step 11 in_progress, phase 4)
     ├── Mode lightweight (audit 100, 0 remaining)
     │
     ├── DELEGATION PARALLELE:
     │   ├── guardian release gate (background) [33s]
     │   │   └── APPROVED (6/6 checks OK)
     │   └── documenter release (background) [46s]
     │       └── README, CHANGELOG, pyproject.toml, commit, tag v1.1.0
     │
     ├── git push origin main --tags
     ├── create_release Gitea
     ├── Edit workflow-progress.md (step 11 done, step 12 skipped)
     ├── Commit: 11c69b8 chore(workflow): complete step 11 (release v1.1.0), skip step 12
     │
T5   [User: "oui" pour retro]
     ├── Edit workflow-progress.md (step 13 in_progress, phase 5)
     ├── Collecte metriques (Bash: find, pytest, git diff --stat)
     │
     ├── DELEGATION: documenter retro (foreground)
     │   └── [71s] Analyse workflow + MEMORY.md
     │       └── Commit: f03a2eb chore(workflow): complete step 13
     │
     ├── milestone_write → milestone v1.1.0 fermee
     ├── Edit workflow-progress.md (step 13 done, versions completees)
     ├── Commit + push: 881d3a5 chore(workflow): complete step 13, v1.1.0 done

5. Parallelisme et optimisations

Appels paralleles effectues

Moment Agents en parallele Gain estime
Step 8, round 1 reviewer + guardian ~79s economisees (au lieu de 63+79=142s, fait en 79s)
Step 11 guardian gate + documenter ~33s economisees (au lieu de 33+46=79s, fait en 46s)

Appels sequentiels (necessaires)

Moment Raison
Step 6: architect → step 7: builder Le builder a besoin du plan
Step 8: reviewer/guardian → fixer → reviewer resume Les corrections dependent des findings
Step 9: smoke tests sequentiels Chaque test depend du precedent pour la confiance

Resume d'agent (optimisation step 8)

Le reviewer round 2 a ete lance en mode resume (reutilisation du contexte du round 1).

  • Round 1 : 63s, 43 677 tokens, 19 tool uses
  • Round 2 (resume) : 20s, 49 453 tokens (cumules), 2 tool uses
  • Gain : pas besoin de relire tout le code, reevaluation ciblee uniquement

6. Commits generes

Hash Message Auteur Etape
85c3023 chore(workflow): init v1.1.0 (minor) session precedente init
8e8271b docs(v1.1.0): version plan and ADR — repo filtering feature architect 6
0f8e34e chore(workflow): complete step 6, start step 7 orchestrateur 6→7
2232260 feat(cli): add --repo and --exclude filtering (fixes #5) builder 7
844c9cc chore(workflow): complete step 7, v1.1.0 dev done builder ← 7
1bc3b2f chore(workflow): complete step 7, start step 8 orchestrateur 7→8
bb3bc76 test(collector): add filtering optimization and edge case tests fixer 8
f39158e chore(workflow): complete step 8 (audit 100), start step 9 orchestrateur 8→9
79cbcd8 chore(workflow): complete step 9, merge step 10 into 11 orchestrateur 9→11
03d09ac docs(v1.1.0): update README, freeze CHANGELOG, bump version documenter 11
11c69b8 chore(workflow): complete step 11 (release v1.1.0), skip step 12 orchestrateur 11
f03a2eb chore(workflow): complete step 13 (retrospective), v1.1.0 done documenter 13
881d3a5 chore(workflow): complete step 13 (retrospective), v1.1.0 done orchestrateur 13

Observation : 13 commits dont 6 sont du workflow tracking (chore), 2 sont des doublons (step 7 done, step 13 done).


7. Decisions prises automatiquement

Decision Regle appliquee Resultat
Pas de reclassification 7→8 Track deja minor, reclassification = patch only Ignore
Fusion step 10+11 Pas de docs/guides, pas d'OpenAPI, pas d'API doc step 10 merged
Mode lightweight step 11 audit_final=100, remaining_findings=0 guardian + documenter seulement
Skip step 12 CLI local, pas de procedure de deploy skipped
Finding HTTP = pre-existant Code non modifie en v1.1.0 (cli.py:16 default URL) Ne compte pas dans le score
Resume reviewer round 2 Agent ID sauvegarde du round 1 Re-evaluation ciblee

8. Anomalies detectees

8.1 Double mise a jour du workflow-progress (step 7)

Symptome : Le builder a mis workflow-progress.md a jour (commit 844c9cc step 7 done), puis l'orchestrateur l'a fait aussi (commit 1bc3b2f step 7 → step 8).

Cause : Le prompt du builder ne lui interdisait pas explicitement de toucher au workflow-progress. Il a considere que c'etait de sa responsabilite.

Impact : 1 commit en double, pas de conflit mais bruit dans l'historique git.

Correction suggeree : Ajouter dans le prompt du builder : "NE PAS modifier .claude/workflow-progress.md — c'est la responsabilite de l'orchestrateur."

8.2 Double commit step 13

Symptome : 2 commits "complete step 13" (f03a2eb par le documenter, 881d3a5 par l'orchestrateur).

Cause : Le documenter a committe workflow-progress.md + analyse, puis l'orchestrateur a re-modifie workflow-progress.md pour les transitions finales et re-committe.

Impact : Bruit dans l'historique, pas de perte de donnees.

Correction suggeree : Soit le documenter ne committe PAS le workflow-progress, soit l'orchestrateur amende le commit du documenter (mais risque avec les hooks).

8.3 GITEA_TOKEN absent de l'environnement

Symptome : Smoke test bloque, necessite une demande interactive au user.

Cause : Le token n'est pas dans .bashrc/.zshrc/.env, il faut l'exporter manuellement.

Impact : Interruption du flow automatique, le user a du fournir le token.

Correction suggeree : Documenter dans CLAUDE.md ou .env.example la necessite d'exporter GITEA_TOKEN avant le smoke test. Ou ajouter une verification automatique au debut du step 9.


9. Metriques de performance

Temps par etape (estimation)

Etape Temps agents Temps orchestrateur Total estime
6 Plan 134s ~30s ~2.7 min
7 Dev 246s ~20s ~4.4 min
8 Audit 216s (r1: 79s + fixer: 54s + r2: 20s) ~60s ~4.6 min
9 Smoke 0s (pas d'agent) ~45s ~0.75 min
11 Release 46s (parallele) ~30s ~1.3 min
13 Retro 71s ~45s ~1.9 min
Total ~713s ~230s ~15.7 min

Ratio code utile vs overhead

Type de commit Nombre Pourcentage
Code/tests (valeur) 3 23%
Docs/release 3 23%
Workflow tracking 7 54%

Plus de la moitie des commits sont du tracking workflow. C'est beaucoup pour une feature de ~225 lignes de code.


10. Mon ressenti et manques identifies

Ce qui fonctionne bien

  1. Le parallelisme reviewer/guardian est le plus gros gain. Sans ca, l'audit prendrait le double de temps. La possibilite de les lancer en background et d'etre notifie est excellente.

  2. Le resume d'agent au round 2 de l'audit est tres efficace. Au lieu de relancer un reviewer from scratch qui relit tout, il reprend avec son contexte complet. 20s au lieu de 60+s.

  3. La fusion 10+11 evite une etape inutile pour un petit projet CLI. La detection automatique (pas de docs/guides, pas d'OpenAPI) est pertinente.

  4. Le mode lightweight pour la release quand l'audit est a 100 est intelligent. Pas besoin de re-auditer ce qui vient d'etre valide.

  5. L'architect produit un plan actionnable que le builder suit fidelement. La separation des responsabilites fonctionne.

Ce qui manque ou frotte

  1. Pas de mecanisme de "dry run" : quand je fais /workflow next et que l'etape n'est pas terminee, le workflow me dit juste "pas fini". Il pourrait proposer de lancer l'action manquante automatiquement au lieu de me demander de confirmer ensuite.

  2. Le workflow-progress.md est un goulot d'etranglement : tout le monde le modifie (orchestrateur, builder, documenter). Ca cree des commits en double et des conflits potentiels. Il faudrait que SEUL l'orchestrateur y touche.

  3. Trop de commits de tracking : 7/13 commits sont du chore(workflow). Pour une feature de 225 lignes, c'est du bruit. Option : regrouper les transitions (ne committer le progress que quand il y a du code avec).

  4. Le smoke test est le seul moment "humain" : c'est moi qui lance les commandes Bash, pas un agent. C'est coherent (test reel) mais c'est aussi le point ou le flow se casse si l'environnement n'est pas pret (GITEA_TOKEN).

  5. Pas de visibilite sur la consommation de contexte : j'ai lance 9 agents dans une seule session. Je n'ai pas de moyen de savoir si je suis proche de la limite de contexte avant que le systeme me le dise. Le fichier .claude/ctx-status est mentionne dans les rules mais je ne l'ai pas consulte proactivement.

  6. Le finding "HTTP en clair" revient a chaque audit : c'est pre-existant depuis v1.0.0 mais il n'a jamais ete cree en tant qu'issue Gitea debt. Le workflow dit de le faire (section 6b du /audit skill) mais ca n'a pas ete fait automatiquement.

  7. Pas de coverage : pytest-cov est mentionne dans MEMORY.md comme "a ajouter en v1.1" mais ca n'a pas ete fait. Le workflow ne l'a pas detecte comme un manque car ce n'est pas dans le plan. Il faudrait un check automatique "est-ce que la couverture est mesurable ?".

  8. Le builder ne connait pas les conventions de commit du projet : il a fait 1 seul commit pour tout le dev (code + tests), alors que la regle dit "jamais plus de 3 fichiers sans commit". Il a modifie 5 fichiers en un commit.

  9. Pas de rollback automatique : si le builder ou le fixer casse quelque chose, il n'y a pas de mecanisme de rollback. On depend du fait que les tests passent, mais si un agent committe du code casse, il faut un git revert manuel.

Suggestions concretes

Priorite Suggestion Impact
Haute Interdire aux agents non-orchestrateur de modifier workflow-progress.md Elimine les commits en double
Haute Creer les issues debt pour les findings pre-existants automatiquement Tracking complet
Moyenne Regrouper les commits de tracking avec les commits de code Historique git plus propre
Moyenne Ajouter une verification pytest-cov au step 8 Couverture mesuree
Basse Auto-proposer l'action quand /workflow next detecte une etape incomplete UX plus fluide
Basse Consulter ctx-status avant chaque delegation d'agent Prevenir les debordements de contexte