feat: Calculer automatiquement les moyennes après chaque saisie de notes
Some checks failed
CI / Backend Tests (push) Has been cancelled
CI / Frontend Tests (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
CI / Naming Conventions (push) Has been cancelled
CI / Build Check (push) Has been cancelled

Les enseignants ont besoin de moyennes à jour immédiatement après la
publication ou modification des notes, sans attendre un batch nocturne.

Le système recalcule via Domain Events synchrones : statistiques
d'évaluation (min/max/moyenne/médiane), moyennes matières pondérées
(normalisation /20), et moyenne générale par élève. Les résultats sont
stockés dans des tables dénormalisées avec cache Redis (TTL 5 min).

Trois endpoints API exposent les données avec contrôle d'accès par rôle.
Une commande console permet le backfill des données historiques au
déploiement.
This commit is contained in:
2026-03-30 06:22:03 +02:00
parent b70d5ec2ad
commit b7dc27f2a5
786 changed files with 118783 additions and 316 deletions

View File

@@ -0,0 +1,57 @@
**Language:** Use `{communication_language}` for all output.
**Output Language:** Use `{document_output_language}` for documents.
**Output Location:** `{planning_artifacts}`
# Stage 2: Contextual Discovery
**Goal:** Armed with the user's stated intent, intelligently gather and synthesize all available context — documents, project knowledge, and web research — so later stages work from a rich, relevant foundation.
## Subagent Fan-Out
Now that you know what the brief is about, fan out subagents in parallel to gather context. Each subagent receives the product intent summary so it knows what's relevant.
**Launch in parallel:**
1. **Artifact Analyzer** (`../agents/artifact-analyzer.md`) — Scans `{planning_artifacts}` and `{project_knowledge}` for relevant documents. Also scans any specific paths the user provided. Returns structured synthesis of what it found.
2. **Web Researcher** (`../agents/web-researcher.md`) — Searches for competitive landscape, market context, trends, and relevant industry data. Returns structured findings scoped to the product domain.
### Graceful Degradation
If subagents are unavailable or fail:
- Read only the most relevant 1-2 documents in the main context and summarize (don't full-read everything — limit context impact in degraded mode)
- Do a few targeted web searches inline
- Never block the workflow because a subagent feature is unavailable
## Synthesis
Once subagent results return (or inline scanning completes):
1. **Merge findings** with what the user already told you
2. **Identify gaps** — what do you still need to know to write a solid brief?
3. **Note surprises** — anything from research that contradicts or enriches the user's assumptions?
## Mode-Specific Behavior
**Guided mode:**
- Present a concise summary of what you found: "Here's what I learned from your documents and web research..."
- Highlight anything surprising or worth discussing
- Share the gaps you've identified
- Ask: "Anything else you'd like to add, or shall we move on to filling in the details?"
- Route to `guided-elicitation.md`
**Yolo mode:**
- Absorb all findings silently
- Skip directly to `draft-and-review.md` — you have enough to draft
- The user will refine later
**Headless mode:**
- Absorb all findings
- Skip directly to `draft-and-review.md`
- No interaction
## Stage Complete
This stage is complete when subagent results (or inline scanning fallback) have returned and findings are merged with user context. Route per mode:
- **Guided** → `guided-elicitation.md`
- **Yolo / Headless** → `draft-and-review.md`