Files
college-infos/CHANGELOG.md
Antoine Van Elstraete 2deeb83c76 feat(M15): README, README.LLM.md, LICENSE, CHANGELOG, and final cleanup
Complete the M15 documentation and final review milestone:

README.md (French, brief):
- Project description, quick start, usage, deployment link, acknowledgments
- Acknowledgments: pronotepy, icalendar, caldav, slixmpp, pydantic, openai,
  feedparser, beautifulsoup4, and inspiration from pronote-digest (Antoine Coulon)
- Author: Antoine Van Elstraete

README.LLM.md (English, AI agent guide):
- Prerequisites, installation on LXC/VPS (Debian/CentOS)
- Non-secret configuration preparation (all env vars listed)
- Secret variables clearly identified as operator-only
- Pre-deployment checks (check_secrets.py, pip check, dry-run)
- systemd/timer/logrotate installation steps
- Notes for AI agent (do not commit secrets, do not modify existing files)

LICENSE:
- Standard MIT License, copyright Antoine Van Elstraete (2026)

CHANGELOG.md:
- Initial changelog following Keep a Changelog format
- Covers M1 through M14 with milestone summaries
- Gitea Actions noted as planned/optional, not delivered

.gitignore:
- Added FEAT_* pattern for temporary work files

TODO.md:
- M15 items 1-4 checked (README, architecture docs, CHANGELOG+LICENSE, final review)
- M15 item 5 (Gitea Actions) left unchecked (optional, not done)

Co-authored-by: opencode/tech-writer <tech-writer@agents.invalid>
2026-09-08 17:52:45 +02:00

2.8 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.1.0] - 2026-09-08

Initial release covering milestones M1 through M14.

Added

  • M1 (Scaffolding): Python project structure with pyproject.toml, and tooling configuration for ruff, mypy, bandit, and pre-commit.
  • M2 (Configuration & secrets): Pydantic Settings for configuration management, SecretStr for sensitive fields, and redaction utilities (redact_url, redact_secrets, redact_exception) with RedactingFormatter for 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.ParentClient integration, automatic fallback logic for auto, ical, and pronotepy modes, and error redaction for sensitive data.
  • M5 (Blog RSS): feedparser-based RSS client with GUID deduplication, HTTP cache support (ETag/If-Modified-Since), and BlogRSSState persistence.
  • 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-MANAGED marker for managed events, idempotent operations, preserved cancelled events, and dry-run support.
  • M8 (Agenda diff): AgendaComparator with deterministic matching, and generation of AgendaDiff/AgendaChange objects for tracking differences.
  • M9 (AI synthesis): SynthesisProvider protocol, OpenAI provider, optional litellm provider, and openai-compatible provider with degraded mode (returns None on failure).
  • M10 (XMPP channel): XmppChannel using slixmpp, formatted messages (synthesis, homeworks, changes, messages, blog), and error handling that returns False on failure.
  • M11 (Pipeline orchestration): PipelineRunner as composition root, 7 pipeline steps, degraded error handling, dry-run mode, and iCal reuse within a single run.
  • M12 (CLI entry point): pronote-sync command with --dry-run and --log-level options, 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), shared conftest.py, and secret non-leak tests.
  • M14 (Deployment): systemd service and timer (daily at 18:00), logrotate configuration (daily, rotate 7, compress), check_secrets.py pre-deployment scanner, and exploitation guide.
  • Other: MIT License. Gitea Actions CI/CD reference for LXC/VPS (Debian/CentOS) is planned and optional, not delivered in this release.