Bump version 0.1.2 → 0.2.0. CHANGELOG mis à jour : contrat ExternalEndpoint commun, unification AI_BASE_URL, PIN de compte Pronote et durcissement sécurité.
7.1 KiB
7.1 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.2.0] - 2026-09-13
Added
- Prise en charge du PIN de compte Pronote (
PRONOTE_ACCOUNT_PIN) pour l'authentification par mot de passe (#8). - Contrat
ExternalEndpointcommun (Pydantic v2 :SecretStr,frozen,extra='forbid') pour les endpoints CalDAV, RSS et Pronote, avec nouvelles variables canoniquesCALDAV_ENDPOINT__URL,BLOG_ENDPOINT__URL,PRONOTE_ENDPOINT__URL,PRONOTE_ICAL_ENDPOINT__URL(#16).
Changed
- Unification du contrat
AI_BASE_URLentre les fournisseurs de synthèse (#17). - Les anciennes variables
CALDAV_URL,BLOG_RSS_URL,PRONOTE_URLetPRONOTE_ICAL_URLrestent acceptées comme alias dépréciés (DeprecationWarning). hide_input_in_errors=Truesur les paramètres Pronote/CalDAV/Blog : les valeurs sensibles ne fuitent plus dans les erreurs de validation.- Schéma
file://retiré du contrat des endpoints réseau ; HTTP restreint au loopback explicitement autorisé. - Documentation alignée (
README.LLM.md,.env.example,GUIDE_DEV_PYTHON.md,docs/pronote-auth.md) et métadonnées de packaging (identité et URL Gitea réelles).
Fixed
- Sécurité : détection des PIN
*_PINlittéraux (#48), des PIN en query string (?pin=, #58) et des placeholders d'URL documentaires (#34) parcheck_secrets.py. - Sécurité : neutralisation de
__context__et du traceback des exceptions expurgées (raise ... from Nonesorti des handlers) (#50). qr_token:get_informations()ignorée en modeqr_token(erreur pronotepy 20 sur les instances HubEduConnect) (#21).- RSS : état mémoire confirmé après remplacement atomique avant l'acquittement des GUID (#49) ; GUID acquittés après livraison XMPP (#12).
- CalDAV : devoirs rendus transparents (#11) ; événements gérés sans UID ignorés (#47).
- Configuration : fenêtres de synchronisation négatives refusées (#14).
- CLI : exécutions dégradées rendues observables (#13).
- Pronote : parsing iCal fiabilisé pour l'année scolaire 2026.
- XMPP : correction du timeout (mode TLS et timeouts de connexion/nettoyage).
- Dry-run : simulation garantie sans persistance ; sérialisation du cycle QR/token local.
- Documentation : commande
cdcorrigée après clonage du dépôt Gitea (#56).
[0.1.2] - 2026-09-10
Added
- Authentification QR code / token (
PRONOTE_AUTH_MODE=qr_token) : alternative au modepasswordpour les instances Pronote utilisant HubEduConnect/EduConnect où l'authentification par mot de passe échoue (CAPTCHA, MFA, flux SAML modifié).- Enrôlement initial via QR code (
pronotepy.qrcode_login) - Persistance du token rotatif dans
.pronote_auth_state.json(permissions0600, écriture atomique, symlink-safe) - Login subsequent via
pronotepy.token_loginavec token persisté - Notification XMPP actionnable en cas d'échec de rotation (
PronoteAuthRotationError) - Persistance du token après chaque opération de données réussie et dans le chemin d'erreur (refresh pronotepy)
_is_pronotepy_configured()mode-aware :qr_tokenne requiert quePRONOTE_URL- Redaction des secrets explicites (token, PIN, jeton QR) dans tous les logs
- Enrôlement initial via QR code (
- Nouvelles variables d'environnement :
PRONOTE_AUTH_MODE,PRONOTE_QR_CODE_FILE,PRONOTE_QR_PIN - Documentation : section "Contrat d'authentification QR code / token" dans
AGENTS.md, section QR code dans le wikiGuidePronote
Fixed
PRONOTE_URLignoré à cause du double préfixeenv_prefix(renommagepronote_url→urldansPronoteSettings)PRONOTE_ENTrendu optionnel pour les connexions pronotepy directes.env.examplecorrigé (eleve.html→parent.html)- #20/#21 —
get_informations()ignorée en modeqr_token: retourne[]immédiatement, sans connexion, verrou ni appel réseau, évitant l'échec systématique de l'endpointPageActualites(erreur pronotepy 20 sur les instances HubEduConnect testées) et le refresh redondant du token associé.
Changed
- Wiki
GuidePronoteenrichi : section "Quand l'ENT est obligatoire" (EduConnect/HubEduConnect), exemple Bordeaux AGENTS.md: ajout de la section §13 "Versionnage et releases"
Tests
- 694 tests passés, couverture 94.93%
- 35 nouveaux tests QR/token : config, auth_state, client, propagation, intégration end-to-end
[0.1.0] - 2026-09-08
Initial release covering milestones M1 through M15, except the optional Gitea Actions workflow.
Added
- M1 (Scaffolding): Python project structure with
pyproject.toml, and tooling configuration forruff,mypy,bandit, andpre-commit. - M2 (Configuration & secrets): Pydantic Settings for configuration management,
SecretStrfor sensitive fields, and redaction utilities (redact_url,redact_secrets,redact_exception) withRedactingFormatterfor logging. - M3 (Data models): 16 Pydantic models and 6 enums across 10 modules, including frozen contracts and mutable work results.
- M4 (Pronote sources): iCal fetch and parse,
pronotepy.ParentClientintegration, automatic fallback logic forauto,ical, andpronotepymodes, and error redaction for sensitive data. - M5 (Blog RSS):
feedparser-based RSS client with GUID deduplication, HTTP cache support (ETag/If-Modified-Since), andBlogRSSStatepersistence. - M6 (Theoretical agenda): JSON provider with week parity (even/odd), school holidays calendar, and deterministic IDs for events.
- M7 (CalDAV sync): Differential synchronization by UID,
X-PRONOTE-SYNC-MANAGEDmarker for managed events, idempotent operations, preserved cancelled events, and dry-run support. - M8 (Agenda diff):
AgendaComparatorwith deterministic matching, and generation ofAgendaDiff/AgendaChangeobjects for tracking differences. - M9 (AI synthesis):
SynthesisProviderprotocol, OpenAI provider, optionallitellmprovider, andopenai-compatibleprovider with degraded mode (returnsNoneon failure). - M10 (XMPP channel):
XmppChannelusingslixmpp, formatted messages (synthesis, homeworks, changes, messages, blog), and error handling that returnsFalseon failure. - M11 (Pipeline orchestration):
PipelineRunneras composition root, 7 pipeline steps, degraded error handling, dry-run mode, and iCal reuse within a single run. - M12 (CLI entry point):
pronote-synccommand with--dry-runand--log-leveloptions, redacted error display, and safe traceback in DEBUG mode. - M13 (Tests & coverage): 636 tests with 95.67% coverage, test fixtures (
pronote-4e.ics,pronote-6e.ics), sharedconftest.py, and secret non-leak tests. - M14 (Deployment): systemd service and timer (daily at 18:00), logrotate configuration (daily, rotate 7, compress),
check_secrets.pypre-deployment scanner, and exploitation guide. - M15 (Documentation): README, README.LLM.md (AI agent setup guide), MIT LICENSE, CHANGELOG, and local validation procedures. Gitea Actions CI/CD remains optional and is not delivered in this release.