feat(lea): add dashboard competence promotion dry run

This commit is contained in:
Dom
2026-05-29 21:48:00 +02:00
parent bd3aaf7d64
commit 34527b5cc5
8 changed files with 1341 additions and 1 deletions

View File

@@ -9,6 +9,10 @@ from core.competences.verdicts import (
iter_competence_verdicts,
store_competence_verdict,
)
from core.competences.promotions import (
CompetencePromotionError,
promote_competence_from_verdicts,
)
lea_competences_bp = Blueprint(
@@ -59,3 +63,41 @@ def list_competence_verdicts(competence_id: str):
"write_back_enabled": False,
"yaml_write": False,
})
@lea_competences_bp.route("/<competence_id>/promote", methods=["POST"])
def promote_competence(competence_id: str):
"""Dry-run or apply a supervised dashboard promotion."""
payload = request.get_json(silent=True) or {}
try:
promotion = promote_competence_from_verdicts(competence_id, payload)
except KeyError:
return jsonify({
"success": False,
"error": f"Competence '{competence_id}' introuvable",
}), 404
except CompetencePromotionError as exc:
return jsonify({
"success": False,
"error": str(exc),
"write_back_enabled": False,
"yaml_write": False,
}), 400
status = 200 if promotion.get("dry_run") or promotion.get("duplicate") else 201
return jsonify({
"success": True,
"competence_id": competence_id,
"promotion": _public_promotion_payload(promotion),
"dry_run": promotion.get("dry_run", False),
"write_back_enabled": not promotion.get("dry_run", False),
"yaml_write": bool(promotion.get("write_applied", False)),
}), status
def _public_promotion_payload(promotion: dict):
return {
key: value for key, value in promotion.items()
if not str(key).startswith("_")
}